Jenkins+pipeline+参数构建+人工干预确定

摘要:
Jenkins+流水线+参数构建+人工干预实现以下功能:1.环境可选择,单选;您可以选择要发布的项目,并选择多个项目。2.可视化发布过程。3.您可以手动干预是否继续发布/Bin/bash#由于Jenkins选择的多个项目名称将以“name1,name2,name3”的形式提供,因此我们需要执行字符串剪切处理,删除逗号和双引号。填写“,”作为分隔符,这意味着项目名称用逗号分隔。添加管道的脚本:node{stage{//fordisplaypurosesgit}git@192.168.0.75:/data/git/zyx_T'sh“/var/jenkins_home/shell/init_configure_cchoice.sh”调用初始化配置的shell脚本}}#手动干预是否继续发布。
  Jenkins+pipeline+参数构建+人工干预 实现了以下功能

1. 可以选择环境,单选;可以选择需要发布的项目,多选

Jenkins+pipeline+参数构建+人工干预确定第1张

2.发布过程可视化

Jenkins+pipeline+参数构建+人工干预确定第2张

3. 可以人工干预是否继续发布。

初始化配置需要很久,比如拉镜像这些事情,我可以提前操作。配置做好之后,等到下班时间,再进行发布操作。有时候会遇到,我初始化配置做好之后,测试通知还有变动。我可以人工干预,不进行继续发布。再次进行配置初始化后再发布。

Jenkins+pipeline+参数构建+人工干预确定第3张

4.查看日志,鼠标停留在蓝色进度图时,会自动出现Log提示按钮

Jenkins+pipeline+参数构建+人工干预确定第4张

5.点击Log,可以看日志。

Jenkins+pipeline+参数构建+人工干预确定第5张

6.点击日志里面的文字,可以看日志详细情况

 Jenkins+pipeline+参数构建+人工干预确定第6张

7.日志详细情况

Jenkins+pipeline+参数构建+人工干预确定第7张

实现上述功能的步骤

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的项目

Jenkins+pipeline+参数构建+人工干预确定第8张

Jenkins+pipeline+参数构建+人工干预确定第9张

红色框框,ProjectName 是会作为变量传给shell脚本的。check Boxes 类型是表示能选择多个项目。delimiter 填写 “,”  表示项目名称以逗号隔开。

Jenkins+pipeline+参数构建+人工干预确定第10张

value ,填写项目名称,并且以“,”隔开。

Jenkins+pipeline+参数构建+人工干预确定第11张

添加pipeline的脚本:

Jenkins+pipeline+参数构建+人工干预确定第12张

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脚本
        
   }
}

免责声明:文章转载自《Jenkins+pipeline+参数构建+人工干预确定》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux应用程序调试----backtraceDebian下Fcitx的简单安装与配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

代码管理工具:使用github和git工具管理自己的代码

一、git工具和账户创建 1.1 安装 Git 是 Linus Torvalds 最近实现的源代码管理软件。"Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。" Git 目前主要由寻找 CVS 或专有代码管理解决方案替代物的软件开发人员所使用。Git 与 CVS 有很多区别: 分支更快、更容易。...

Git学习(四)----版本号跳转

git log 、git reflog 、git reset Git版本号跳转: 想实现版本号跳转,须要先了解Git的版本号的标记,也就是通过这个唯一的标记能定位一个版本号,也就是commit id。 这个commit id是个挺长的字符串。由于它是通过SHA-1计算出来。 (这个字符串就跟你硬盘里的某些磁力链接挺像的。嘿嘿嘿!),由于git是分布式的,...

Jenkins+Gradle+Git自动打apk包,并上传到ftp

软件安装: 1、安装Jenkins、git、AndroidSDK 2、配置AndroidSDK环境变量 ANDROID_HOME:D:Androidsdk PATH:%ANDROID_HOME%platform-tools;%ANDROID_HOME% ools 环境配置: 1、打开Jenkins首页,进入系统管理--插件管理--可选插件列表,安装Grad...

Spring常用注解与J2EE注解总结

Spring注解 1)@Component 作用:调用无参构造函数创建一个bean对象,并把对象存入spring的ioc容器,并交由spring容器进行管理,相当于在xml中配置一个<bean>。 属性:value:id默认按照当前bean的类名,首字母小写,可以在使用时指定value名称。 2)@Repository 作用:与@Compone...

adb命令(笔记)

1、adb shell su     进入root管理员权限(前提是手机已root) 2、chmod 可以修改文件夹的权限:   $ adb shell   $ su   # chmod -R 777  /data/data/com.tencent.mm/ MicroMsg       -R或者–recursive参数:递归处理,将指定目录下的所有文件及子...

Docker开发环境预览

目录 1.1 开发环境预览 1.1.1 启动单个容器开发 1.1.2 从特定的分支或标签创建一个开发环境 2.1 分享你的开发环境 3.1 优缺点 docker在我们印象中完成的是开发完阶段的部署与协作共享功能,最近Docker推出了适合开发阶段的Docker环境容器开发。 1.1 开发环境预览 开发环境允许您与团队成员共享正在进行的代码,从...