Docker 加jenkins +Springboot实现自动化部署
本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。
环境:centos7+git(gitee)
简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。
一、Docker和镜像安装
2.1、Docker安装
2.1.1、检查环境
Docker运行环境要求系统为64位、Linux系统内核版本为 3.8以上
docker tag 448a08f1d2f9 nginx:latest
查看自己虚拟机的内核:
cat /etc/redhat-release
2.1.2、搭建gcc环境(gcc是编程语言译器)
yum -y install gcc
yum -y install gcc-c++
2.1.3、安装需要的软件包
yum install -y yum-utils
2.1.4、装镜像仓库
因为docker的服务器是在国外,
所以有时候从仓库中下载镜像的时候会连接被拒绝或者连接超时的情况!
因此可以使用阿里云镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.1.5、新yum软件包索引
yum makecache fast
2.1.6、安装docker引擎
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
2.1.7、启动docker
systemctl start docker
2.1.8、查看docker版本
docker version
2.1.9、配置阿里云镜像加速
为了提高镜像的拉取、发布的速度,可以配置阿里云镜像加速(推荐)
1、找到容器镜像服务ARC
2、复制加速器地址
3、在CentOS下配置镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你个人的阿里云镜像加速器地址"]
}
二部署容器可视化管理工具安装Jenkins
Jenkins中文官网:https://www.jenkins.io/zh/
安装J enkins
一、Jenkins镜像
#查询镜像
docker search jenkins
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYGp2isV-1685958085793)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685944237834.png)]
这里使用的是第二个镜像(因为第一个镜像的docker版本较低)
#下载镜像
docker pull jenkins/jenkins
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3cPghSI-1685958085793)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685944316281.png)]
#查看镜像
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ST8W5da-1685958085794)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685944361213.png)]
二、启动Jenkins容器
创建挂载文件夹,并且进行文件权限授予
#创建文件夹
mkdir -p /home/jenkins_home
#权限
chmod 777 /home/jenkins_home
docker run -d -uroot -p 8888:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
命令 描述
-d 后台运行容器,并返回容器ID
-uroot 使用 root 身份进入容器,推荐加上,避免容器内执行某些命令时报权限错误
-p 9095:8080 将容器内8080端口映射至宿主机9095端口,这个是访问jenkins的端口
-p 50000:50000 将容器内50000端口映射至宿主机50000端口
--name jenkins 设置容器名称为jenkins
-v /home/jenkins_home:/var/jenkins_home :/var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录
-v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置
jenkins/jenkins 镜像的名称,这里也可以写镜像ID
#日志查看
docker logs jenkins
jenkins 没有执行docker的 解决方法 建议使用此启动脚本
docker run -d \
-u root \
--name jenkins \
--privileged=true \
--restart=always \
-p 8888:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins/jenkins
三、访问Jenkins
在浏览器中输入:http://serverIp:port/访问jenkins,serverIp为docker宿主机的ip,port即为宿主机映射的端口。我的即为:
http://http://192.168.232.3/:8888/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFZVuVFE-1685958085794)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685944781705.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mU29z6Xb-1685958085794)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685944747270.png)]
这里要求输入初始的管理员密码,根据提示密码在/var/jenkins_home/secrets/initialAdminPassword这个文件中,注意这个路径是Docker容器中的,所以我们通过如下命令获取一下
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
输入上面获取的密码,即可解锁。别忘了我们映射了本地数据卷/opt/jenkins_data/,所以也可以通过如下命令输出:
cat /opt/jenkins_data/secrets/initialAdminPassword
还有我们的日志文件就可以看见密码,可以直接使用。
四、安装插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6qrhTVGg-1685958085794)(C:\Users\zsb\AppData\Roaming\Typora\typora-user-images\image-20230605140152664.png)]
因为网络原因,需要将插件源设置为国内的,这样才可以安装插件。进入宿主机目录 /home/jenkins_home/,编辑文件
hudson.model.UpdateCenter.xml
cd /home/jenkins_home/
cat hudson.model.UpdateCenter.xml
将 url 内容修改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json(清华大学官方镜像)
重启容器
docker restart jenkins
重启之后,选择推荐插件安装!!!
插件安装完成,创建管理员用户
至此,Jenkins安装完成!!!
安装插件
选择第一个:安装推荐的插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyNIm4hJ-1685958085795)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685944858218.png)]
创建管理员用户
此账户一定要记住哦
系统配置
安装需要插件
进入【首页】–【系统管理】–【插件管理】–【可选插件】
搜索以下需要安装的插件,点击安装即可。
安装Maven Integration
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uK2TjRu2-1685958085795)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945053900.png)]
安装Publish Over SSH(如果不需要远程推送,不用安装)
如果使用Gitee 码云,安装插件Gitee(Git自带不用安装)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wyd9N5WB-1685958085795)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945053900.png)]
配置git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3s0iHOQ-1685958085795)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945250780.png)]
配置Maven
进入【首页】–【系统管理】–【全局配置】,拉到最下面maven–maven安装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xLxMAtCn-1685958085796)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945217481.png)]
创建任务
新建任务
点击【新建任务】,输入任务名称,点击构建一个maven项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7QMCW3Z4-1685958085796)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945155005.png)]
源码管理
点击【源码管理】–【Git】,输入仓库地址,添加凭证,选择好凭证即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-davPtpG5-1685958085796)(C:\Users\zsb\AppData\Roaming\Typora\typora-user-images\image-20230605140528743.png)]
构建触发器
点击【构建触发器】–【构建】–【增加构建步骤】–【调用顶层Maven目标】–【填写配置】–【保存】
此处命令只是install,看是否能生成jar包
clean install -Dmaven.test.skip=true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D267iBT7-1685958085796)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945344146.png)]
保存
点击【保存】按钮即可
测试
该功能测试是否能正常打包
构建
点击构建按钮
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqGC73Oj-1685958085796)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945374237.png)]
查看日志
点击正在构建的任务,或者点击任务名称,进入详情页面,查看控制台输出,看是否能成功打成jar包。
该处日志第一次可能下载依赖jar包失败,再次点击构建即可成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXuDaC5o-1685958085797)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945418635.png)]
查看项目位置
cd /var/jenkins_home/workspace/dream/dream-admin
ls命令即可查看是否存在
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CNciBfR1-1685958085797)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685945472473.png)]
运行项目
因为我们项目和jenkins在同一台服务器,所以我们用shell脚本运行项目,原理既是通过dockerfile 打包镜像,然后docker运行即可。
Dockerfile
在springboot项目根目录新建一个名为Dockerfile的文件,注意没有后缀名,其内容如下:(大致就是使用jdk8,把jar包添加到docker然后运行prd配置文件)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9GTd4Og-1685958085797)(D:\soft\Tencent\WeChat\Documents\WeChat Files\WeChat Files\wxid_590kmi1hdcz322\FileStorage\Temp\1685946174681.png)]
修改jenkins任务配置
-t:指定新镜像名
.:表示Dockfile在当前路径
cd /var/jenkins_home/workspace/dream/dream-admin
docker stop dream-admin || true
docker rm dream-admin || true
docker rmi dream-admin:1.0 || true
docker build -t dream-admin:1.0 .
docker run -it -d --name dream-admin -p 8080:8080 \
-e TZ="Asia/Shanghai" \
-v /home/ruoyi/logs/:/home/ruoyi/logs/ \
-e JVM_OPTS="-Dname=%AppName% -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" \
dream-admin:1.0
jenkins 没有执行docker的 解决方法
docker run -d \
-u root \
--name jenkins \
--privileged=true \
--restart=always \
-p 8888:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins/jenkins
vorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
dream-admin:1.0
jenkins 没有执行docker的 解决方法
docker run -d
-u root
–name jenkins
–privileged=true
–restart=always
-p 8888:8080
-p 50000:50000
-v jenkins-data:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
jenkins/jenkins