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

实现了以下功能

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

2.发布过程可视化

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

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

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

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

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

7.日志详细情况

实现上述功能的步骤

1.安装启动Jenkins:我以容器的方式启动。

docker run -itd -p : -p : --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.:/usr/lib/x86_64-linux-gnu/libltdl.so. -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 -|grep commit|awk '{print $2}'`
ID2=`git log -|grep commit|awk '{print $2}'|tail -n `
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 [ "$?" != "" ];then
exit
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}" != "" ];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脚本 }
}

Jenkins+pipeline+参数构建+人工干预确定的更多相关文章

  1. Jenkins Pipeline 参数详解

    Pipeline 是什么 Jenkins Pipeline 实际上是基于 Groovy 实现的 CI/CD 领域特定语言(DSL),主要分为两类,一类叫做 Declarative Pipeline,一 ...

  2. 使用Jenkins pipeline流水线构建docker镜像和发布

    新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...

  3. Jenkins Pipeline+sonar构建质量平台

    前提: Jenkins JDK 目录: 1.安装sonar插件:SonarQube Scanner for Jenkins 2.安装SonarQube 3.安装sonar-scanner ++++++ ...

  4. Jenkins Pipeline Job构建配置

    ​ ​ ​ ​​ 1.创建pipeline job任务,新建任务>输入任务名称>选择“流水线”>点击[确定] ​ 添加描述,This is my first test pipelin ...

  5. Jenkins pipeline job 根据参数动态获取触发事件的分支

    此文需要有Jenkins pipeline job 的简单使用经验 场景 我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据. 如果用Jenkins ...

  6. Jenkins + Pipeline 构建流水线发布

      Jenkins + Pipeline 构建流水线发布 利用Jenkins的Pipeline配置发布流水线 参考: https://jenkins.io/doc/pipeline/tour/depl ...

  7. jenkins pipeline构建后返回构建结果给gitlab

    jenkins pipeline构建后返回构建结果给gitlab 使用场景 gitlab 合并请求时要求管道任务必须成功,否则无法执行合并操作,又不想使用gitlab ci 工具. 实现方法 1.Ge ...

  8. jenkins pipeline构建项目

    以前用的jenkins自由风格发布代码.界面丑陋,出现问题位置不够清晰.今天改进一下流程使用jenkins pipeline构建项目. 学习使我快乐 步骤一.安装pipeline插件 点击系统管理-& ...

  9. 【最新】Android使用jenkins全自动构建打包-Windows版本(Android,Jenkins,360加固,Email,QRcode,参数构建,蒲公英)

    Android打包喝咖啡系列(Windows版) 这篇博客主要讲述的内容: 1.windows上部署Jenkins https://jenkins.io 2.基于SVN或Git https://git ...

随机推荐

  1. String的常见面试题

    下面代码,是我前些天在网上搜集的一小部分String的面试题.个人觉得感触很深,希望对大家有所帮助.不好的也请大家批评指正. package com.zys.string; public class ...

  2. Qt5教程: (5) Lambda匿名函数的使用

    Lambda是C++11的新特性, 首先看看你的.pro项目文件里有没有CONFIG += c++11这句话, 没有就加上. 下面新建一个工程, 具体步骤就不多说了 然后给主窗口添加一个按钮b, 并且 ...

  3. 关于thinkphp框架中模型笔记

    模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...

  4. windows系统安全日志取证工具

    0x01 关于日志 Windows安全事件日志中详细记录了是谁在什么时候通过什么手段登录到系统或者注销了登录,通过分析该日志可以详细了解服务器的安全情况以及必要时的取证工作. 0x02 查看日志 传统 ...

  5. PHP yield代替range生成范围内的数

    <?php function yieldRange($start, $limit, $step) { if ($start == $limit || $step == 0) { return $ ...

  6. 一起来看一下Java中的Annotation注解

    目录: 一. 什么是Annotation 二. Annotation的作用 2.1 编译器使用到的注解 2.2 .class文件使用到的注解 2.3 运行期读取的注解 三. 定义Annotation ...

  7. 数据结构5_java---二叉树,树的建立,树的先序、中序、后序遍历(递归和非递归算法),层次遍历(广度优先遍历),深度优先遍历,树的深度(递归算法)

    1.二叉树的建立 首先,定义数组存储树的data,然后使用list集合将所有的二叉树结点都包含进去,最后给每个父亲结点赋予左右孩子. 需要注意的是:最后一个父亲结点需要单独处理 public stat ...

  8. css3实现饼状图进度及环形进度条

    1 <!-- 饼图 --> <div class="pie"></div> <hr /> <!-- 环形图 --> &l ...

  9. Orleans 知多少 | 3. Hello Orleans

    1. 引言 是的,Orleans v3.0.0 已经发布了,并已经完全支持 .NET Core 3.0. 所以,Orleans 系列是时候继续了,抱歉,让大家久等了. 万丈高楼平地起,这一节我们就先来 ...

  10. java中多线程 - 多线程中的基本方法

    介绍一下线程中基本的方法使用 线程睡眠sleep() Thread.sleep(毫秒);我们可以通过sleep方法设置让线程睡眠.可以看到sleep是个静态方法 public static nativ ...