背景
目前公司有两套jenkins环境,一个用于部署测试环境和构建生产环境发布包,一个用于部署生成环境。因为每次发布的时候,都需要在打开浏览器,在浏览器上多次点击,比较麻烦,于是写了个shell脚本用于部署。
步骤
- 打开http://jenkins_build_url/jenkins/cli,jenkins_build_url是对应jenkins服务的地址。点击下载jenkins-cli.jar
- 编写shell脚本,脚本名称为jenkins.sh。如mac在终端执行vim jenkins.sh。 脚本中需要替换一些变量
- PATH_OF_CLI:jenkins-cli.jar存放的位置
- jenkins_build_url: 部署测试环境和构建生产环境发布包的jenkins地址
- user_name: 登录的用户id
- password:登录密码
- jenkins_deploy_url:部署生成环境jenkins地址
- job_name:测试环境部署job名称
- build_job_name:生产环境发布包构建job名称
- deploy_job_name:生产环境部署job名称
- server_name:服务器名称前缀
#!/bin/bash
#构建工程,可以跟多个参数 参数名为job名称
function jenkins_build(){
for i in $*
do
java -jar /PATH_OF_CLI/jenkins-cli.jar -s jenkins_build_url -auth user_name:password build $i -f
done
}
#deploy生产环境系统 第一个参数是job名称,第二参数是部署服务器名称
function jenkins_deploy(){
java -jar /PATH_OF_CLI/jenkins-cli.jar -s jenkins_deploy_url -auth user_name:password build $1 -p action=deploy -p hosts=$2 -f
}
#部署交互函数
function jenkins_echo(){
# 财务系统可能需要先构建财务的jooq项目 输入y则先构建jooq项目 然后构建对应的项目
read "all?build all?"
if [[ $all = 'y' ]]
then
jenkins_build jooq-model-online $1
else
jenkins_build $1
fi
# 是否部署第一台机器
read "deploy?deploy 1?"
if [[ $deploy = 'y' ]]
then
# 我们部署的服务器名称的统一规则是 前缀+序号
jenkins_deploy $2 ${3}1
fi
# 是否部署第二台机器
read "deploy?deploy 2?"
if [[ $deploy = 'y' ]]
then
jenkins_deploy $2 ${3}2
fi
}
# 测试环境 构建命令
alias jtest='jenkins_build job_name'
# 线上部署命令
alias jprod='jenkins_echo build_job_name deploy_job_name server_name'
- 给脚本增加执行权限,chmod +x jenkins.sh
- source jenkins.sh
- 部署测试环境,执行名称 ltfo。部署生产环境执行jprod
问题
因为公司的jekins使用了nginx代理,刚开始jenkins_build_url是对应的nginx的地址,所以访问无效,后来改成jenkins的地址就好了
网友评论