Linux系统使用docker安装jenkins:实现springboot项目自动化部署、实现maven项目自动化部署、实现vue项目自动化部署、实现微信小程序项目自动化部署
2023-03-23
最近把项目的自动化部署,部署到linux服务器上了。服务器网络更稳定,24小时在线。不依赖个人开发者电脑了。
本文详细记录了linux系统下,使用docker安装和配置jenkins。
并且实现了自动化部署springboot项目、maven项目、vue项目、微信小程序项目
docker安装jenkins比较方便,几个命令就搞定了,也方便后期迁移。
一、 安装docker
-
安装
yum -y install docker-io # 安装docker依赖包,仅此一条命令就可以搞定;
-
启动Docker
service docker start # 启动docker
-
加入开机启动
chkconfig docker on # 加入开机启动
-
查看版本
docker version # 查看docker版本 Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Mon Jun 7 15:36:09 2021 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Mon Jun 7 15:36:09 2021 OS/Arch: linux/amd64 Experimental: false
-
docker安装完成
二、使用docker拉取jenkins镜像
-
搜索jenkins
-
拉取镜像
docker pull jenkins/jenkins # 拉取jenkins镜像
-
查看本地的镜像
docker images
发现本机中,已经有jenkins镜像了。
三、使用docker启动jenkins容器
-
编写启动容器脚本
# 启动jenkins容器的脚本,可以保存到 .sh文件中 docker run -d -uroot -p 9096:8080 -p 50006:50000 --name jenkins --privileged=true -v /docker_chen/jenkins9096/jenkins_home:/var/jenkins_home jenkins/jenkins
-
查看容器运行状态
docker ps -a
up 28 hours ,说明正常启动着,已经运行了28个小时了
四、访问jenkins页面,进行配置
-
由于启动时,映射了9096端口,使用IP:9096访问即可
比如: http://localhost:9096
进入后,页面如下,插件安装,跳过所有的插件,不安装。等后边搜索插件安装。
-
到数据卷安装目录,找到初始密码
数据卷目录,或者去登录容器找到对应密码# docker 数据卷目录,或者去登录容器找到对应密码 cd /docker_chen/jenkins9096/jenkins_home/secrets # 或者进入容器找对应密码 docker exec -it jenkins bash [root@csbl secrets]# cat initialAdminPassword 4d14082024d1433dbf8d418d3ac545cb
-
设置新的账号密码,任意设置
root 8d3ac545cb
五、进入jenkins容器,设置上海时区
-
进入jenkins容器
# 进入容器 docker exec -it jenkins bash
-
设置时区为上海
# 设置时区为上海 echo 'Asia/Shanghai' >/etc/timezone
-
重启容器
# 重启容器 docker restart jenkins #在System Information页面中,可以看到时区已经设置成功 user.timezone Asia/Shanghai
六、安装jinkins插件
-
配置jenkins插件镜像地址
设置为清华大学的镜像: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
-
搜索插件,之后点击下载安装
建议安装以下插件,比较常用:
中文语音:Chinese (Simplified)Version
凭据保存:Credentials Binding
maven打包:Maven Integration
svn拉取代码:Subversion
SSH远程服务器:Publish Over SSH
node环境Vue打包:NodeJS Plugin
七、配置jenkins中的jdk和maven
-
将maven、jdk1.8和node.js放置到共享数据卷中,之后在jenkins页面中配置
此处跳过了在宿主机linux系统安装maven和jdk的过程,还有安装node.js的过程 -
点击全局工具配置,进行jdk/maven/node.js等工具的配置
-
配置参考如下:
-
maven打包注意有5分钟的静默期
意思是,小于5分钟时间间隔的打包,将会被忽略,不会去打包哈。
八、配置jenkins的Publish over SSH
由于jinkins是在容器中运行,而部署的项目在宿主机中,这个情况下,容器就需要SSH来与宿主机通信,上传文件到宿主机和执行宿主机的脚本等等。
-
点击 系统配置,进入对SSH的设置
-
设置SSH的地址和账号密码
九、创建maven自动打包任务
-
创建任务
-
设置打包记录保持7天,最大10个,防止把服务器磁盘撑满
-
配置SVN源码地址,同时设置svn的账号凭据
-
svn的其他配置参考
-
设置构建触发器
满足特定条件去触发打包操作
这里,直接使用简单的轮询方案,每10分钟去查询svn版本是否有变化,如果有新版本代码,才会触发打包动作。
-
设置Build打包的maven指令
clean install -Dmaven.test.skip=true
-
配置SSH Publishers
打包成功后,使用SSH连接到宿主机,之后执行宿主机的项目部署脚本
脚本参考:
核心业务:
-
备份原项目的包
-
将target中maven打好的包,复制到部署的指定目录;
-
之后,重启项目
#[root@csbl jenkins9096]# cat jenkins_bs_java_server.sh #!/bin/bash ## 供jenkin打包,调用自动部署项目 # @version 2023-03-16 chen # jenkins打包后的目录 target="/docker_chen/jenkins9096/jenkins_home/workspace/JAVA_SERVER/taxation-sns-server/bootstrap/target" # 项目部署的目录 bs_target="/root/taxation-sns-server-28585" # 测试目录 #bs_target="/root/taxation-sns-server-28585/testLib" # 文件夹是否存在 echo "$target/lib" if [ -d "$target/lib" ]; then timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】 $target/lib Exist,Begin Copy... \033[0m" #绿色 # 备份原文件,将原文件夹修改成时间戳后缀 mv $bs_target/lib $bs_target/lib.bak.$timeVar # 复制目标文件 cp -r $target/lib $bs_target cp $target/taxation-sns-server-*.jar $bs_target/lib timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】 $target/lib Copy... SUCCESS \033[0m" #绿色 # 停止服务 cd $bs_target/bin ./stop.sh # 启动服务 ./start.sh timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】 $target/lib ReStart SUCCESS \033[0m" #绿色 else echo -e "\033[31m $target/lib File Not Exist! Please check \033[0m" #红色 fi
-
十、创建Vue自动打包任务
-
创建任务,选择自由风格
-
进行配置
丢弃旧的构建、SVN配置、构建触发器等,跟创建maven自动打包的一样,注意更换svn仓库地址。 -
构建环境设置,选择 Provide Node 环境
-
构建后操作配置
构建打包完成后,SSH连接宿主机服务器,调用服务器脚本
-
服务器脚本,参考:
脚本参考:核心业务:
- 备份原项目的包
- 将npm打好的dist包,复制到部署的指定目录;
- 部署完成,由于前端是Nginx部署,这里只需要前两步即可。
#[root@csbl jenkins9096]# cat jenkins_bs_vue_dist.sh #!/bin/bash ## 供jenkin打包,调用自动部署项目 # @version 2023-03-16 chen # jenkins打包后的目录 target="/docker_chen/jenkins9096/jenkins_home/workspace/VUE_DIST" # 项目部署的目录 bs_target="/root/" # 测试目录 #bs_target="/root/taxation-sns-server-28585/testLib" # 文件夹是否存在 echo "$target/dist" if [ -d "$target/dist" ]; then timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】 $target/dist Exist,Begin Copy... \033[0m" #绿色 # 备份原文件,将原文件夹修改成时间戳后缀 mv $bs_target/dist $bs_target/dist.bak.$timeVar # 复制目标文件 cp -r $target/dist $bs_target timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】 $target/dist Copy... SUCCESS \033[0m" #绿色 else echo -e "\033[31m $target/dist File Not Exist! Please check \033[0m" #红色 fi
十一、创建微信小程序自动更新任务
主要实现思路:
- jenkins拉取最新版微信小程序代码
- 使用miniprogram-ci 实现更新到微信小程序平台
- jenkins触发拉取代码后,去触发调用js脚本
-
创建自动化分格任务
-
丢弃旧的构建、SVN配置、构建触发器等,跟创建vue自动打包的一样,注意更换svn仓库地址
-
构建环境
由于小程序不需要单独打包,这里可以跳过。
-
构建后操作,调用服务器脚本
-
服务器bash脚本jenkins_bs_mini.sh参考:
核心业务:
- 由jenkins调用触发此脚本
- 此脚本核心业务是:去调用upload.js脚本
#[root@csbl jenkins9096]# cat jenkins_bs_mini.sh #!/bin/bash ## 供jenkin打包,调用自动部署项目 # @version 2023-03-16 chen # jenkins打包后的目录 target="/docker_chen/jenkins9096/jenkins_home/workspace/MINI" # 项目部署的目录 bs_target="/root" # 获取前两个参数 iVersion=$1 iDesc=$2 # 测试目录 #bs_target="/root/taxation-sns-server-28585/testLib" # 文件夹是否存在 echo "$target/node_modules" if [ -d "$target/node_modules" ]; then timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】MINI $target Exist,Begin CI... \033[0m" #绿色 node -v cd /docker_chen/jenkins9096/miniTool/src node upload.js $iVersion $iDesc timeVar=`date +%Y-%m-%d-%H.%M.%S` echo -e "\033[32m 【$timeVar】 $target MINI SUCCESS \033[0m" #绿色 else echo -e "\033[31m $target MINI File Not Exist! Please check \033[0m" #红色 fi
-
准备微信小程序自动化CI的资料
登录小程序管理后台,获取到小程序的APPID、部署私钥 private.xxx.key等 -
编写upload.js脚本
在宿主机中,创建目录miniToolmkdir miniTool
进入miniTool文件夹,安装miniprogram-ci依赖
cd miniTool npm install miniprogram-ci --save
安装完成后,如图:
注意: private.xxx.key,需要去微信小程序管理后台下载获取。新建src目录,编写upload.js文件
mkdir src cd src vi upload.js
upload.js文件如下:
[root@csbl src]# cat upload.js // 自动化部署微信小程序的脚本 // /docker_chen/jenkins9096/jenkins_home/workspace/MINI // npm install miniprogram-ci --save const ci = require('miniprogram-ci') // 数组的第一第二位,默认接收的是node.exe路径和upload.js路径(所要执行的文件), // 从第三位开始,就是对应运行命令node所携带的各个参数(按顺序)。 // 调用脚本: node upload.js 6.6.0.svnV "描述" // 建议版本设置为 6.6.0.svnV : 6.6是大版本,0是修复小版本,svnV是svn版本管理的版本 const version = process.argv[2]; // 自定义备注 const desc = process.argv[3]; console.log(version, desc); const project = new ci.Project({ appid: 'wx3ecaa6216dc9b271', type: 'miniProgram', // projectPath: "D:\\work\\space2\\taxation-sns-mini-source/", projectPath: "/docker_chen/jenkins9096/jenkins_home/workspace/MINI", privateKeyPath: '../private.wx3ecaa6216dc9b271.key', ignores: ['node_modules/**/*'], }) // 在有需要的时候构建npm const warning = ci.packNpm(project, { ignores: ['pack_npm_ignore_list'], reporter: (infos) => { console.log(infos) } }) console.warn(warning) const uploadResult = ci.upload({ project, version: version, desc: desc, setting: { es6: true, // es6 转 es5 minifyJS: true, //压缩 JS 代码 minifyWXML: true, //压缩 WXML 代码 minifyWXSS: true, //压缩 WXSS 代码 minify:true //压缩所有代码,对应小程序开发者工具的 "压缩代码" }, onProgressUpdate: console.log, }) console.log(uploadResult)
-
upload.js文件的执行
# 核心程序是:node执行js文件 node upload.js
-
触发微信小程序自动部署成功
登录微信管理后台,可以查看到效果:
后记:
程序员,时刻要开发节省自己时间的软件
提高自己水平的同时,节省自己的时间!