参数化构建,通过tag传递参数达到发布和代码回滚的操作
(1) 先给代码打标签,推送到 gitlab
(2)配置 jenkins
http://10.0.0.201:8080/job/free-jbo/configure
使用git parameter插件------git参数
git parameter
上边 的 getversion 就可以获取TAG号
接下来我们配置一下, 如何获取对应的tag 的代码
tar -zcvf /opt/game.tar.gz ./*
ssh 10.0.0.7 "mkdir /code/xiaobanwang_$BUILD_ID"
scp /opt/game.tar.gz 10.0.0.7:/code/xiaobanwang_$BUILD_ID
ssh 10.0.0.7 "cd /code/xiaobanwang_$BUILD_ID && tar -xf game.tar.gz && rm -rf game.tar.gz"
ssh 10.0.0.7 "rm -rf /code/game && ln -s /code/xiaobanwang_$BUILD_ID /code/game"
成功了
解我们再来 打一个 13.4的标签
如何快速的 回滚呢?
我们来写代码,需要配置脚本
(1) 参数化构建-》 添加参数-》 选项参数
我们保存一下, 前端应该可以选择 2个参数 deploy 还是 rollback
如果选择回滚,我们的逻辑是 不再拉取代码,因为之前部署过一次。做到秒级回滚(软连接方式)
我们写一下脚本:
sh -x /server/scripts/deploy_rollback.sh
[root@baimeidashjenkins /server/scripts]#cat deploy_rollback.sh
#!/bin/sh
gitversion=$getversion
CODE_DIR="/var/lib/jenkins/workspace/free-jbo"
WEB_DIR="/code/"
WEB_IP=10.0.0.7
get_code_tar(){
cd $CODE_DIR && tar zcf /opt/web-${gitversion}.tar.gz ./*
}
scp_code_web(){
scp /opt/web-${gitversion}.tar.gz $WEB_IP:$WEB_DIR
}
code_tarxf(){
ssh $WEB_IP "cd $WEB_DIR &&mkdir web-${gitversion} && tar xf web-${gitversion}.tar.gz -C web-${gitversion} && rm -rf *.tar.gz"
}
ln_html(){
ssh $WEB_IP "cd $WEB_DIR && rm -rf game && ln -s web-${gitversion} game"
}
main(){
get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
#main
#if [ "$deploy_env" == "deploy" ];then
# main
#elif [ "$deploy_env" == "rollback" ];then
# ln_html
#fi
#
#当重复执行构建后会生成多个相同版本的文件,利用jenkins变量值解决重复性构建问题
#jenkins变量
#1. GIT_COMMIT 当前版本提交产生的哈希唯一值
#2. GIT_PREVIOUS_SUCCESSFUL_COMMIT 已经提交过的版本的哈希唯一值
#使用以上两个值做比较,如果已提交则退出,如果没有提交过则继续执行构建,更改脚本做判断
#
if [ "$deploy_env" == "deploy" ];then
if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
echo "构建失败该 $git_version 版本号已部署"
else
main
fi
elif [ "$deploy_env" == "rollback" ];then
ln_html
fi
以上实现的功能,就是 不会重复部署, 回滚可以做到秒级回滚
欢迎来撩 :shell 编程从0到1
欢迎来撩 :devops cicd持续集成全程(汇总)
欢迎来撩 :汇总all