jenkins 共用宿主机中的docker自动化部署
目录
第一节 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容器进程
第一节 jenkins 共用宿主机中的docker自动化部署
1.docker命令安装启动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
2.查询jenkins内是否可以执行宿主机中的docker
进入容器 docker exec -it bae630c41276 /bin/bash
执行 docker ps
正常使用 宿主机docker
第二节.jenkins 配置自动化部署
1.界面配置
访问
http://localhost:9998/login?from=%2F
#查看密码
宿主机挂载目录下 /Users/jiajie/soft/jenkins/secrets/initialAdminPassword
也可以在/var/jenkins_home/secrets/initialAdminPassword这个文件中查看到管理员密码
1.配置mave
M2_HOME
/var/jenkins_home/apache-maven-3.6.1
PATH+EXTRA
$M2_HOME/bin
2.配置gitee
第三节 创建springboot多模块项目
1.相关配置
1.pom
##### 需要加上 spring-boot-maven-plugin
########否则打包会报 no main manifest attribute, in app.jar
<build>
<finalName>micro-gateway</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--加入下面两项配置-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>com.micro.microgateway.MicroGatewayApplication</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
2.编写dockerfile文件
FROM openjdk:8-jdk-alpine
MAINTAINER heshuai <2460983732@qq.com.com>
##镜像源
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
3.项目上传到gitee
###相关命令
上传项目
第一步:建立本地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 强制命令会覆盖别人分支,慎用
第四节 jenkins部署项目相关配置
##############################################################################################################################
###构建命令
##############################################################################################################################
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
第五节 测试启动
1.项目发布构建
2.查看宿主机进程
#查看宿主机进程
docker ps
3.查看jenkins容器进程
#查看jenkins容器进程
docker exec -it bae630c41276 /bin/bash
docker ps