jenkins持续集成通过shell脚本实现自动发布(三)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
根据前面2篇文章目前我们的jenkins已经简单配置完成通过这篇文章实现jenkins自动发布项目到测试环境。
一、背景
在实际开发中我们经常要一边开发一边测试当然这里说的测试并不是程序员对自己代码的单元测试而是同组程序员将代码提交后由测试人员测试或者前后端分离后经常会修改接口然后重新部署
这些情况都会涉及到频繁的打包部署
手动打包常规步骤
1. 开发提交代码
2. 问一下同组的小伙伴还有没有要提交的代码
3. 拉取代码并在本地进行打包war包或者jar包
4.打包完成上传到测试服务器
5. 查看当前程序是否在运行
6. 关闭当前程序
7. 替换当前程序最新的包
8. 启动新的war/jar包并查看日志
9. 如果还有同事说还有没有提交的代码.....再次重复1到8的步骤一上午没了
那么有一种工具能够实现将代码提交到git后就自动打包部署勒答案是肯定的Jenkins
当然除了Jenkins以外也还有其他的工具可以实现自动化部署如Hudson等
只是Jenkins相对来说使用得更广泛。
二、Jenkins基本配置
jenkins创建job/ltem任务
输入名称后选择自由风项目
点击确定后进入项目配置页面输入描述后选择This project is parameterized参数化构建
注意一般新搭建的jenkins是没有git参数选项的如果需要请在Manage Jenkins--->>Manage Plugins--->>可选插件中输入Git Parameter插件进行下载下载完成后进入job/ltem进行配置选择git参数
输入名称和描述因为我这里演示的是前后端项目一起编译所以我这里需要添加2个git参数
git参数配置完成后需要配置源码管理我这边选择的是Multiple SCMsjenkins安装好之后是没有这个参数的需要通过Manage Jenkins--->>Manage Plugins--->>可选插件中输入Multiple SCMs进行安装安装好后源码管理这里就会显示3个选项1.无 2.Git 3.Multiple SCMs
现在进行Multiple SCMs配置
Repository URL输入git仓库http地址
Credentials添加git仓库凭证
指定分支为空时代表any这里选择上面你定义的参数例如${Branch_web}一定要对应如果不对应分支会显示错误因为构建的是前后端项目所以需要配置2次分别把前后端代码存储的不同仓库进行配置还需配置一下前后端项目编译的路径方便后面排查问题和管理
注意使用Multiple SCMs插件在上面的Gig参数配置需要 配置已选仓库通过Git参数 --->> 高级--->> 已选仓库进行配置
Additional Behaviours--->>Check out to a sub-directory指定仓库编译路径配置完成后会自动编译到此路径下
此时前后端的git仓库我们已经基本配置完成下面配置构建环境选择Delete workspace before build starts选择后点击保存按钮即可我们先不配置shell脚本进行简单编译检验是否成功
进入jenkins页面显示
点击test_job--->>Build with Parameters选择分支点击开始构建
点击构建历史查看控制台输出
项目编译成功登录服务器查看配置的编译路径下是否获取到编译代码
成功后编写shell脚本通过脚本实现发布测试环境脚本是通过ssh进行操作的需要先配置服务器和服务器之间进行免密登录设置请查看Linux 免密登录设置设置完成后配置jenkins--->>构建--->> Execute shell 执行shell脚本
注意使用 jenkins2.346.3 最新版本配置shell脚本的时候需要添加 #!/bin/sh -l 如果不添加前端编译是会报错 yarn: 未找到命令
配置完成后点击 Build with Parameters 选择分支进行编译
三、Shell脚本
#!/bin/bash
set -e
export LANG=zh_CN.GB2312
# 服务器用户名
user="root"
# 服务器IP (xxx.xx.xx.xxx是指服务器ip填写即可)
hostname="xxx.xx.xx.xxx"
# 测试环境部署路径
target_dir="/home/repair"
# 前端包压缩文件
src_dist="dist.zip"
# 后端包文件名
src_jeecg="bmzy-modules-2.4.0.jar"
# jenkins工作路径
jenkins_workspace="/root/.jenkins/workspace/test_job"
echo "编译前端包"
cd ${jenkins_workspace}/web
yarn install
yarn run build
zip -r dist.zip dist/
chmod 755 dist.zip
cd ..
if [ -e $src_dist ]
then
rm -rf dist.zip
else
echo "文件不存在,执行下一步"
fi
cd web/
mv dist.zip ${jenkins_workspace}
echo "前端包编译完成"
echo "开始编译后端代码"
cd ${jenkins_workspace}/app
mvn clean package install -Dmaven.test.skip=true
mv ${jenkins_workspace}/app/bmzy-modules/target/bmzy-modules-2.4.0.jar ${jenkins_workspace}
cd ${jenkins_workspace} && chmod 755 ${src_jeecg}
echo "编译后端代码完成"
echo "将前端压缩包上传至xxx主机"
cd ${jenkins_workspace}
scp ${src_dist} ${user}@${hostname}:${target_dir}
echo "将后端压缩包上传至xxx主机"
cd ${jenkins_workspace}
scp ${src_jeecg} ${user}@${hostname}:${target_dir}/lib
echo "登录xxx主机起服务"
ssh ${user}@${hostname} << remotessh
source .bash_profile
cd ${target_dir}/bin
sh dist_reload.sh
sleep 2
sh start-jeecg.sh
echo "服务启动完毕"
exit