目标 : 实现Jenkins 根据git分支名打包,部署指定应用
本人项目:一个项目包含四个子应用 ops 包含:admin,app,service
一.Jenkins 参数化构建
添加四个构建参数
1.分支号
2.是否执行自动部署
3.要部署的服务器环境
4.该项目的子应用
二.实现打包后自动部署
1.需要Jenkins安装Post build task插件
2.在构建后操作中增加Post build task
Script:
#!/usr/bin/env bash
_project=ops #指定项目
#后面四个参数为构建中的四个参数
_is_deployer=${deployer}
_build_number=${BUILD_NUMBER}
_application=${application}
_environment=${environment}
if [ "$_is_deployer" == "true" ];then
cd /home/test
./run.sh ${_project} ${_build_number} ${_environment} ${_application}
fi
通过Jenkins插件中script调用后续部署脚本run.sh
run.sh
#!/usr/bin/env expect
set _project [lindex $argv 0]
set _build_number [lindex $argv 1]
set _environment [lindex $argv 2]
set _application [lindex $argv 3]
set timeout 90
spawn su test
sleep 3
send "password"
sleep 3
send "cd /home/test\r"
sleep 3
send "./deployer.sh $_project $_build_number $_environment $_application \r"
expect "success"
Interact
脚本解释:
1.使用expect命令 安装方法 yum install expect
2.前四个set用于接收参数 set timeout用于指定执行脚本的超时时间
3.通过su 自动设置密码 从Jenkins用户切换到test用户
4.每条指令间隔我这里前面设置等待3秒保证脚本执行完成
5.最后一个调用deployer.sh是指最终的部署,通过参数指定环境,应用,构建包号
6.deployer.sh执行成功后返回success,expect判断接收到success完成脚本执行,等待返回值的最大时间是
上面设置set timeout
此次教程中,Jenkins插件属于简单操作,后面的部署命令调用是重点.
每个公司都有自己的部署方式,但是Jenkins打包服务器与应用服务器基本都是分开的.
所以会涉及到通过脚本切换服务器角色执行命令,所以这里就用到了except实现.