初始化配置需要很久,比如拉镜像这些事情,我可以提前操作。配置做好之后,等到下班时间,再进行发布操作。有时候会遇到,我初始化配置做好之后,测试通知还有变动。我可以人工干预,不进行继续发布。再次进行配置初始化后再发布。
1.安装启动Jenkins:我以容器的方式启动。
docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -m 1500M -v /data/jenkins_home/:/var/jenkins_home -v /usr/bin/dos2unix:/usr/bin/dos2unix -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /etc/timezone:/etc/timezone jenkins
2.安装插件:Extended Choice Parameter Plug-In 和 Pipeline
3.自己按照工作环境进行shell脚本编写。
初始化配置的脚本:
[root@cloud_250 shell]# cat init_configure_choice.sh #!/bin/bash #对比文件,获取需要发布的文件 ID1=`git log -1|grep commit|awk ‘{print $2}‘` ID2=`git log -2|grep commit|awk ‘{print $2}‘|tail -n 1` echo "本次有变更的配置是:" git diff ${ID1} ${ID2}|grep diff|grep "template/stack"|awk -F"/" ‘{print $5}‘ uptime=`date +%Y-%m-%d" "%H:%M` echo "$WORKSPACE/template/pull_images_and_check_md5.sh" sh $WORKSPACE/template/pull_images_and_check_md5.sh if [ "$?" != "0" ];then exit 251 fi #调用Jenkins中选择的环境变量,注意要与Jenkins上配置的名称一样,我在截图中会框出来。 /usr/bin/python conf_to_stack.py --type=${Environment} cat $WORKSPACE/template/address.txt > $WORKSPACE/${Environment}/address.txt git add . git status iplist_zyx_p="192.168...." iplist_zyx="192.168.5......" iplist_emp="192.168.5X.XX" #根据环境名称确定ip列表,这个zyx,zyx_p是对应Jenkins中可以选择的环境参数选项。 if [ "${Environment}" = "zyx_p" ];then iplist=$iplist_zyx_p fi if [ "${Environment}" = "emp" ];then iplist=$iplist_emp fi if [ "${Environment}" = "zyx" ];then iplist=$iplist_zyx fi #将更新内容同步到服务器,拉取镜像 for ip in $iplist; do echo $ip ssh root@$ip "/usr/bin/rm -rf /data/git/${Environment}/*" scp -r $WORKSPACE/${Environment}/ root@$ip:/data/git/ ssh root@$ip "cd /data/git/${Environment};/usr/bin/sh /data/git/${Environment}/pull_images.sh" return=`ssh root@$ip "/usr/bin/cat /data/git/${Environment}/return"` if [ "${return}" != "0" ];then exit $return else continue fi done
部署脚本:
[root@cloud_250 shell]# cat deploy_choice.sh #!/bin/bash #由于Jenkins提供的选择的多个项目名称会以“name1,name2,name3”的方式提供,我们需要进行字符串切割处理,去掉逗号,和双引号。 projectlist=`echo ${ProjectName} | sed -r ‘s/,/ /g‘| sed -r ‘s/"/ /g‘` #根据环境进行判断,选择需要发布的服务器节点。 if [ "${Environment}" = "zyx_p" ];then ipnode=192.168.x fi if [ "${Environment}" = "zyx" ];then ipnode=192.168.x fi if [ "${Environment}" = "emp" ];then ipnode=192.168.x fi #发布,ssh远程到服务器上进行启动服务 for NAME in ${projectlist}; do ssh root@$ipnode "docker stack deploy -c /data/git/$Environment/stack_$NAME.yaml $NAME" sleep 30s done
3. Jenkins上创建一个pipeline的项目
红色框框,ProjectName 是会作为变量传给shell脚本的。check Boxes 类型是表示能选择多个项目。delimiter 填写 “,” 表示项目名称以逗号隔开。
value ,填写项目名称,并且以“,”隔开。
添加pipeline的脚本:
node { stage(‘初始化配置 ‘) { // for display purposes git ‘git@192.168.0.75:/data/git/zyx_t‘ sh "/var/jenkins_home/shell/init_configure_choice.sh" 调用初始化配置的shell脚本 } } #人工干预是否继续发布。 stage ‘确定是否发布‘ input ‘Do you approve deployment?‘ #确定发布后,在进行部署 node{ stage(‘部署‘) { sh "/var/jenkins_home/shell/deploy_choice.sh" 调用发布的shell脚本 } }
原文:https://www.cnblogs.com/zoujiaojiao/p/11028039.html