当前位置: 首页 > news >正文

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

 

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

实现了以下功能

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

2.发布过程可视化

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

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

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

 

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

 

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

 

 

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

 

红色框框,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

相关文章:

  • sql -- 移除数据中的换行符和回车符
  • 总结http get和post的区别
  • SpringBoot案例中关于添加的方式
  • WORD文档怎么转换成EXCEL
  • Java基础学习总结(24)——Java单元测试之JUnit4详解
  • 软件工程:第三章作业
  • js验证后台传递的map数据是否为空
  • 扫描【单调队列】
  • MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
  • C# 接口属性的定义get、set访问器的简单应用
  • Maven学习总结(五)——聚合与继承
  • https遇到自签名证书/信任证书
  • Spring学习总结(2)——Spring的常用注解
  • 三剑客 Handler、Looper 和 MessageQueue
  • 使用brew安装MySQL
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 2019.2.20 c++ 知识梳理
  • java 多线程基础, 我觉得还是有必要看看的
  • k8s 面向应用开发者的基础命令
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • linux安装openssl、swoole等扩展的具体步骤
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Phpstorm怎样批量删除空行?
  • Puppeteer:浏览器控制器
  • PV统计优化设计
  • socket.io+express实现聊天室的思考(三)
  • Spring Boot快速入门(一):Hello Spring Boot
  • Sublime Text 2/3 绑定Eclipse快捷键
  • supervisor 永不挂掉的进程 安装以及使用
  • 观察者模式实现非直接耦合
  • 基于webpack 的 vue 多页架构
  • 记录:CentOS7.2配置LNMP环境记录
  • 数组大概知多少
  • 物联网链路协议
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • MPAndroidChart 教程:Y轴 YAxis
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #stm32整理(一)flash读写
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (分布式缓存)Redis分片集群
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm码农论坛 毕业设计 231126
  • (七)理解angular中的module和injector,即依赖注入
  • (学习日记)2024.01.09
  • (一)RocketMQ初步认识
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 物件導向與老子思想 (OO)
  • .htaccess配置常用技巧
  • .net 按比例显示图片的缩略图