docker部署jenkins
1、拉取jenkins镜像
docker pull jenkins/jenkins
2、新建文件夹,用来挂载docker目录
mkdir -pv /var/jenkins_home
添加修改权限(这一步非常重要!这一步非常重要!这一步非常重要!)
chown -R 1000 /var/jenkins_home
3、启动jenkins
docker run --name jenkins -p 8088:8080 -p 50000:50000 \
--restart=always -u root \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /var/lib/docker/tmp:/var/lib/docker/tmp \
-v /var/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins
启动命令解析
--restart=always #Docker重启后该容器也为随之重启
-u root
#以root的身份去运行镜像(避免在容器中调用Docker命令没有权限)
#最好使用docker用户去运行
-v $(which docker):/bin/docker
#将宿主机的docker命令挂载到容器中
#可以使用which docker命令查看具体位置
-v /var/run/docker.sock:/var/run/docker.sock
#容器中的进程可以通过它与Docker守护进程进行通信
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
#libltdl.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
-v /var/jenkins_home:/var/jenkins_home
#将运行的docker镜像目录挂载到本地的/var/jenkins_home
3、进入jenkins容器查看密码
#第一步:进入容器
docker exec -it jenkins /bin/bash
#第二步:查看能否使用宿主机的docker命令(如果命令运行成功切显示版本信息则成功)
docker -v
#第三步:查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
4、安装插件
Maven Integration
GitLab
ssh
5、配置全局变量
6、配置全局工具
6.1、配置jdk
这里采用自动安装,因为jenkins自带的jdk版本是11的,我用jdk8
这里需要账号,可以在网上自己找一个,我找的这里就不贴上去了
6.2、配置git路径
在容器内继续输入which git,并配置git路径
which git
6.3、配置maven
7、自动构建springBoot项目
注意注意!!!!这个一定要注意,必须在你创建的springBoot项目里面配置docker构建插件!不然后面脚本运行的docker build命令是没法把镜像上传到指定服务器的!!!
如下图
现在可以在jenkins新建项目了
7.1、配置Git仓库拉代码构建
1、选择maven
2、确认之后配置git仓库
3、配置打包命令
4、脚本
1)部署到jenkins所在的服务器
添加构建完成之后执行的shell命令
脚本1
(这个是git里面没有配置dockerFile的,脚本自动配置dockerfile)
#!/bin/bash
#1.2.3.4需要根据不同项目修改不同值
#1.服务名称
SERVER_NAME=tool-test
#2.启动dev配置文件
CONFIG_NAME=dev
#3.源jar路径,mvn打包完成之后,target目录下的jar包或jar包名称(包含后缀)
JAR_NAME=tools.jar
#4.端口
PORT=9002
# 源jar路径
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/$SERVER_NAME/target
#创建createImages和demo文件夹
mkdir -pv /var/jenkins_home/createImages/$SERVER_NAME
#在demo文件夹下创建Dockerfile文本文件
touch /var/jenkins_home/createImages/$SERVER_NAME/Dockerfile
#写入Dockerfile
cat >>/var/jenkins_home/createImages/$SERVER_NAME/Dockerfile<<EOF
FROM java:8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD $JAR_NAME $SERVER_NAME
ENTRYPOINT ["java","-jar","$SERVER_NAME","--spring.profiles.active=$CONFIG_NAME"]
EOF
# 打包完成之后,把jar包移动到创建Docker镜像的目录(此目录包含Dockerfile文件)--->createImages,demo这两个目录需要自己提前创建(上面已经提前创建了)
JAR_WORK_PATH=/var/jenkins_home/createImages/$SERVER_NAME
echo "清理$SERVER_NAME的容器"
containerId=$(docker ps -a | grep -w tools | awk '{print $1}')
if [ -n "$containerId" ];
then
docker stop $containerId
docker rm $containerId
echo "成功停止、删除容器"
fi
imageld=$(docker images | grep -w tools | awk '{print $3}')
if [ -n "$imageld" ];
then
docker rmi -f $imageld
echo "成功删除镜像"
fi
echo "停止并清除镜像完成,进入创建新镜像过程"
echo "复制jar包到/createImages/demo目录下"
#复制jar包到/createImages/demo目录下
cp $JAR_PATH/$JAR_NAME $JAR_WORK_PATH
#切换到demo创建镜像文件夹目录下
cd $JAR_WORK_PATH
#修改文件权限
chmod 755 $JAR_NAME
echo "执行命令创建新镜像"
#执行docker创建镜像命令
docker build -t $SERVER_NAME .
#删除Dockerfile文本文件
rm /var/jenkins_home/createImages/$SERVER_NAME/Dockerfile
#运行镜像
docker run -d -p $PORT:$PORT --restart=always -u root --name $SERVER_NAME $SERVER_NAME
echo "运行新镜像,流程完毕,端口号为:$PORT"
2)部署到jenkins不同的服务器
①配置用户凭证
依次点击以下视图内容
②编辑脚本
(这里一共有3块命令,都在脚本2里面)
脚本2
#远程服务器执行
containerId=$(docker ps -a | grep -w tools | awk '{print $1}')
if [ -n "$containerId" ];
then
docker stop $containerId
docker rm $containerId
echo "成功停止、删除容器"
fi
imageld=$(docker images | grep -w tools | awk '{print $3}')
if [ -n "$imageld" ];
then
docker rmi -f $imageld
echo "成功删除镜像"
fi
#打包并构建docker镜像
mvn clean package docker:build
# 远程服务器执行
docker run -d -p 9002:9002 --restart=always -u root --name tools tools
8、启动
构建的时候只需要点击项目名称->立即构建就可以自动运行之前配置的脚本了(也可以直接点击右边的绿色三角图标构建,后面再把前端VUE的构建脚本贴上)