Jenkins整合Docker实现CICD自动化部署的详细过程(若依项目)
GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
【 如果你想靠AI翻身,你先需要一个靠谱的工具! 】
前期准备
提前准备好jenkins环境
并且jenkins能使用docker命令,并且已经配置好了jdk、node、maven环境,我之前写了安装jenkins的博客,里面讲得比较详细,推荐用我这种方式安装
docker安装jenkins,并配置jdk、node和maven_jenkins
需要提前准备好gitlab环境
github、gitee其实也可以,但是需要和jenkins互相能访问到,这边推荐gitlab
需要准备好mysql
如果没安装的,docker一句话就可以了
1 2 3 4 5 6 | docker run -d \ --name mysql \ -p 0.0.0.0:3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ --restart=always \ mysql:8.0.39 |
准备好redis环境
安装gitlab插件
如果想实现代码提交自动部署,需要安装gitlab插件
进入系统管理,插件管理
搜索gitlab插件进行安装
安装成功即可,无需重启
开始部署
拉取项目
拉取若依项目,我们拉取的是若依项目的前后端分离版
根目录有个ruoyi-ui,这是前端项目,我们把它移动到外层,我们分成2个项目部署
部署后端项目
将这两个sql文件导入到数据库中
到application-druid.yml中修改数据库的连接信息
修改redis的连接信息
根目录新建Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | pipeline { // 任意节点都可以执行Jenkins流水线 agent any tools { // 刚刚配置的java环境 jdk 'jdk8' } // 环境变量 environment { // 项目名称 APP_NAME = 'ruoyi-server' // 端口 APP_PORT = 9800 } // 流水线阶段 stages { // 构建阶段 stage('build') { // 步骤 steps { // 可以写流水线脚本,groovy语法 script { // 执行shell命令 sh 'mvn clean package -DskipTests=true' } } } // 部署阶段 stage('deploy') { steps { script { sh """ docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $APP_NAME || true docker build -t $APP_NAME . docker run -d --name $APP_NAME \ -p 0.0.0.0:$APP_PORT:$APP_PORT \ --restart=always \ $APP_NAME \ --server.port=$APP_PORT """ } } } } } |
根目录新建Jenkinsfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | pipeline { // 任意节点都可以执行Jenkins流水线 agent any tools { // 刚刚配置的java环境 jdk 'jdk8' } // 环境变量 environment { // 项目名称 APP_NAME = 'ruoyi-server' // 端口 APP_PORT = 9800 } // 流水线阶段 stages { // 构建阶段 stage('build') { // 步骤 steps { // 可以写流水线脚本,groovy语法 script { // 执行shell命令 sh 'mvn clean package -DskipTests=true' } } } // 部署阶段 stage('deploy') { steps { script { sh """ docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $APP_NAME || true docker build -t $APP_NAME . docker run -d --name $APP_NAME \ -p 0.0.0.0:$APP_PORT:$APP_PORT \ --restart=always \ $APP_NAME \ --server.port=$APP_PORT """ } } } } } |
根目录新建.dockerignore
这个是为了提高docker的构建速度,把不必要的文件屏蔽起来
1 2 3 4 5 6 7 8 9 10 11 12 13 | .git ruoyi-admin/src ruoyi-admin/target/classes ruoyi-admin/target/generated-sources ruoyi-admin/target/maven-archiver ruoyi-admin/target/maven-status ruoyi-common ruoyi-framework ruoyi-generator ruoyi-quartz ruoyi-system ruoyi-ui sql |
检查项目中是否已经有了这几个文件
将项目提交到gitlab
Jenkins中新建任务
名称随便填,选择流水线,确定
找到流水线,选择scm
然后选择git
然后把ssh地址复制进去
不出意外的话,会出现无法连接仓库,原因是Jenkins无法拉取gitlab的代码
我们到Jenkins容器中
生成ssh秘钥
查看公钥
将公钥配置到gitlab中
进行一次ssh通信,然后将信息保存下来
这步仍然是在jenkins容器中操作的
1 2 | # 192.168.200.120是gitlab的地址,8091是gitlab的ssh端口 ssh -keyscan -p 8091 192.168.200.120 >> ~/. ssh /known_hosts |
查看一下.ssh目录下的文件
如果有这3个文件,就说明Jenkins可以拉取gitlab的代码了
回到Jenkins看下,就会发现错误消失了
下一步,找到这个,把它勾上
展开高级
找到Secret token,点击Generate生成,就会生成一串token,这串token一会儿到gitlab中会用上
我们到gitlab中Settings中有一个Webhooks
我们来添加一个webhook
填写相关信息
如果出现了这个错误,说明github没有开启webhook
我们到管理员设置中,找到Network
找到Allow requests to the local network from webhooks and integrations,勾上
这时候再来添加webhooks就能添加了
我们模拟一次push事件,看看Jenkins有什么反应
回来看Jenkins,你就会发现Jenkins在构建了
这时候代码push的时候,Jenkins也会自动构建
如果没有报错就说明构建成功了
部署前端项目
打开前端项目
添加nginx.conf,真实的后端地址根据实际情况修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | server { # 前端访问端口 listen 9801; # 前端 location / { # 前端页面路径 root /usr/share/nginx/html; # 尝试着从$uri寻找静态资源,找不到就到$uri/找,如果还是找不到就找/index.html try_files $uri $uri/ /index.html; } # 后端 location /prod-api { # 去掉/prot-api开头 rewrite ^/prod-api/(.*)$ /$1 break; # 真实的后端地址,根据实际情况修改 proxy_pass http://192.168.200.120:9800; } } |
添加Dockerfile
1 2 3 4 5 6 7 8 | # 使用nginx镜像来部署 FROM nginx:1.26.2 # 解决文件名乱码问题 ENV LC_ALL=C.UTF-8 # 将nginx配置文件添加到容器 ADD nginx.conf /etc/nginx/conf.d # 前端打包后,将dist下的文件复制到容器里 COPY dist/ /usr/share/nginx/html/ |
添加.dockerignore
添加Jenkinsfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | pipeline { agent any environment { // 项目名称 APP_NAME = 'ruiyi-ui' // 端口 APP_PORT = 9801 } stages { stage('build') { steps { script { // 进行打包 sh """ npm install npm run build:prod """ } } } stage('deploy') { steps { script { sh """ docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $APP_NAME || true docker build -t $APP_NAME . docker run -d --name $APP_NAME \ -p 0.0.0.0:$APP_PORT:$APP_PORT \ --restart=always \ $APP_NAME """ } } } } } |
检查一下有没有这几个文件
提交代码
Jenkins再新建一个项目
和刚刚一样,勾上
生成Secret token
设置gitlab仓库地址
gitlab中webhooks配置
添加一个webhook
然后push代码
等待Jenkins构建
构建成功
我们到浏览器看一下吧
到此这篇关于Jenkins整合Docker实现CICD自动化部署的文章就介绍到这了,更多相关Jenkins整合Docker CICD自动化部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
![](http://files.jb51.net/skin/2018/images/jb51ewm.png)
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
解决docker镜像(centos系统)中无sudo命令问题
这篇文章主要介绍了解决docker镜像(centos系统)中无sudo命令问题,具有很好的参考价值,希望对大家有所帮助,2023-11-11docker的基本使用及使如何用Docker 运行D435i
这篇文章主要介绍了docker的基本使用及使如何用Docker 运行D435i,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2023-11-11
最新评论