根据前面2篇文章目前我们的jenkins已经简单配置完成,通过这篇文章实现jenkins自动发布项目到测试环境。
在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;或者前后端分离后,经常会修改接口,然后重新部署;
这些情况都会涉及到频繁的打包部署;
手动打包常规步骤
1. 开发提交代码
2. 问一下同组的小伙伴还有没有要提交的代码
3. 拉取代码并在本地进行打包(war包或者jar包)
4.打包完成上传到测试服务器
5. 查看当前程序是否在运行
6. 关闭当前程序
7. 替换当前程序最新的包
8. 启动新的war/jar包并查看日志
9. 如果还有同事说还有没有提交的代码.....再次重复1到8的步骤!!!!!(一上午没了)
那么,有一种工具能够实现,将代码提交到git后就自动打包部署勒,答案是肯定的:Jenkins
当然除了Jenkins以外,也还有其他的工具可以实现自动化部署,如Hudson等
只是Jenkins相对来说,使用得更广泛。
jenkins创建job/ltem任务
输入名称后选择自由风项目
点击确定后进入项目配置页面,输入描述后,选择This project is parameterized参数化构建
注意:一般新搭建的jenkins是没有git参数选项的,如果需要请在Manage Jenkins--->>Manage Plugins--->>可选插件中输入Git Parameter插件进行下载,下载完成后进入job/ltem进行配置,选择git参数
输入名称和描述,因为我这里演示的是前后端项目一起编译所以我这里需要添加2个git参数
git参数配置完成后,需要配置源码管理,我这边选择的是Multiple SCMs,jenkins安装好之后是没有这个参数的,需要通过Manage Jenkins--->>Manage Plugins--->>可选插件中输入Multiple SCMs进行安装,安装好后源码管理这里就会显示3个选项,1.无 2.Git 3.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 选择分支进行编译
#!/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