目录
第一节 jenkins 共用宿主机中的docker自动化部署
1.docker命令安装启动jenkins
2.查询jenkins内是否可以执行宿主机中的docker
第二节.jenkins 配置自动化部署
1.界面配置
1.配置mave
2.配置gitee
第三节 创建springboot多模块项目
1.相关配置
1.pom
2.编写dockerfile文件
3.项目上传到gitee
第四节 jenkins部署项目相关配置
第五节 测试启动
1.项目发布构建
2.查看宿主机进程
3.查看jenkins容器进程
mkdir 挂载文件
##############################################################################################################################
##
cd Users/jiajie/soft
mkdir jenkins
## 上传maven文件到 jenkins 目录下
##
宿主机安装的docker.sock文件
var/run/docker.sock
##############################################################################################################################
启动命令
##############################################################################################################################
docker run -u root -m 1024m --name jenkins
-p 9998:8080 -p 50000:50000 --privileged
-v /var/run/docker.sock:/var/run/docker.sock
-v $(which docker):/bin/docker
-v /Users/jiajie/soft/jenkins:/var/jenkins_home
-d jenkins/jenkins:lts
#以root用户运行---否则会报无权限
参数说明:
(1) -v /var/run/docker.sock:/var/run/docker.sock:容器中的进程通过它与Docker守护进程进行通信
(2) -v /usr/bin/docker:/usr/bin/docker:将宿主机的docker命令挂载到容器中。
/usr/bin.docker为docker命令所在具体位置,可以通过which docker指令获取。或者挂载时使用-v $(which docker):/usr/bin/docker
(3) -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7:ibltdl.so.7是Docker命令执行所依赖的函数库,容器中library的默认目录是/usr/lib/x86_64-linux-gnu/,把宿主机的libltdl.so.7函数库挂载到该目录即可。
可以通过whereis libltdl.so.7命令查看具体位置
centos7中该文件路径为/usr/lib64/libltdl.so.7
ubuntu中该文件路径为/usr/lib/x86_64-linux-gnu/libltdl.so.7
进入容器 docker exec -it bae630c41276 /bin/bash
执行 docker ps
正常使用 宿主机docker
访问
http://localhost:9998/login?from=%2F
#查看密码
宿主机挂载目录下 /Users/jiajie/soft/jenkins/secrets/initialAdminPassword
也可以在/var/jenkins_home/secrets/initialAdminPassword这个文件中查看到管理员密码
M2_HOME
/var/jenkins_home/apache-maven-3.6.1
PATH+EXTRA
$M2_HOME/bin
##### 需要加上 spring-boot-maven-plugin
########否则打包会报 no main manifest attribute, in app.jar
micro-gateway
org.springframework.boot
spring-boot-maven-plugin
repackage
true
com.micro.microgateway.MicroGatewayApplication
org.apache.maven.plugins
maven-surefire-plugin
true
FROM openjdk:8-jdk-alpine
MAINTAINER heshuai <[email protected]>
##镜像源
RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
&& echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \
&& apk update upgrade \
&& apk add --no-cache openssh vim \
&& apk add --no-cache procps unzip curl bash tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
RUN mkdir /data
RUN mkdir /micro-gateway
RUN mkdir /data/log
WORKDIR /micro-gateway
COPY target/micro-gateway.jar /micro-gateway
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /micro-gateway/micro-gateway.jar"]
EXPOSE 9000
###相关命令
上传项目
第一步:建立本地git仓库
cd 到你的本地项目根目录下,执行git命令
git init
第二步:将本地项目工作区的所有文件添加到暂存区
git add . // . 表示所有文件, 如果想添加项目中的指定文件,那就把 . 改为指定文件名即可
第三步:将暂存区的文件提交到本地仓库
git commit -m "" //冒号里面写注释语句 eg:git commit -m "init project"
第四步:在码云上创建自己的项目,创建如图所示
创建仓库 https://gitee.com/wondersgroups/little-sweet-sister.git--仓库地址
第五步:将本地仓库关联到码云上
git remote add origin https://gitee.com/wondersgroups/little-sweet-sister.git
注意:在这一步时如果出现错误:fatal:remote origin already exists 意思是路径存在了,就需要删除原来的路径从新添加
git remote rm origin
第六步:最后一步,将代码由本地仓库上传到Github远程仓库
git push -u origin master 指定分支 master
git push -u origin +master 强制上传
注意:如果报failed to push some refs to git 错误出现错误的主要原因是码云中的README.md文件不在本地代码目录
可以通过如下命令进行代码合并【注:pull=fetch+merge]
git pull --rebase origin master
执行上面代码后可以看到本地代码库中多了README.md文件
此时再执行语句 git push -u origin master即可完成代码上传到github
执行完之后如果无错误就上传成功了!
需要提示的是这里的master是Github默认的分支,如果你本地的当前分支不是master,就用git checkout master命令切换到master分支,
如果你想用本地当前分支上传代码,则把第六步的命令里的master切换成你的当前分支名即可。
如果最后再出现错误,就执行下面代码:
git push -u origin master -f 强制命令会覆盖别人分支,慎用
##############################################################################################################################
###构建命令
##############################################################################################################################
echo $JAVA_HOME
echo "=============java变量路径:$JAVA_HOME"
PROJECT_LOCATION=little-sweet-sister
GROUP_ID=com.micro
cd /var/jenkins_home/workspace/${PROJECT_LOCATION}/${PROJECT} && /var/jenkins_home/apache-maven-3.6.1/bin/mvn clean install -am -pl ${GROUP_ID}:${PROJECT} -Dmaven.test.skip=true
#cd $PROJECT_LOCATION && /var/jenkins_home/apache-maven-3.6.1/bin/mvn clean install -am -pl ${GROUP_ID}:${PROJECT} -Dmaven.test.skip=true
TAG=`date "+%Y%m%d"`
IMAGE_NAME=$PROJECT
echo "=============查看进程id,然后删除"
#容器id
cid=$(docker ps -a | grep $IMAGE_NAME | awk '{print $1}')
#镜像id
iid=$(docker images | grep $IMAGE_NAME | awk '{print $3}')
if [ -n "$cid" ]; then
echo "存在容器$IMAGE_NAME,cid=$cid,删除容器。。。"
docker rm -f $cid
else
echo "不存在$IMAGE_NAME容器"
fi
if [ -n "$iid" ]; then
echo "存在镜像$IMAGE_NAME,iid=$iid,删除容器镜像。。。"
#docker rmi -f $iid
else
echo "不存在$IMAGE_NAME镜像"
fi
#####
case $PROJECT in
"micro-gateway")
cd /var/jenkins_home/workspace/${PROJECT_LOCATION}/micro-gateway;;
"micro-pay")
cd micro-pay;;
"micro-base")
cd micro-base;;
*)
echo "error"
;;
esac
### 构建容器
docker build -t $IMAGE_NAME .
echo "=============开始构建镜像$IMAGE_NAME"
echo "当前docker 所有镜像:"
docker images
echo "启动容器------->"
case $PROJECT in
"micro-gateway")
docker run -p 9000:9000 -d --restart=always -e JAVA_OPTS='-Xmx500m -Xms300m -Dspring.profiles.active=test' -v /Users/jiajie/soft/logs/micro-gateway:/data/log --name $IMAGE_NAME $IMAGE_NAME
;;
"micro-pay")
docker run -p 8082:8082 -d --restart=always -e JAVA_OPTS='-Xmx500m -Xms300m -Dspring.profiles.active=test' -v /Users/jiajie/soft/logs/micro-pay:/data/log --name $IMAGE_NAME $IMAGE_NAME
;;
*)
echo "error"
;;
esac
echo "启动服务成功"
echo "查看启动的所有进程:"
docker ps
#查看宿主机进程
docker ps
#查看jenkins容器进程
docker exec -it bae630c41276 /bin/bash
docker ps