• 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脚本
            
       }
    }
  • 相关阅读:
    【解决】Linux Tomcat启动慢Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [236,325] milliseconds
    初学java总结
    第8周课程总结&实验报告6
    第9周总结&实验报告7
    实验报告5&第七周课程总结
    第五周课程总结、实验报告三
    第六周总结&实验报告四
    使用REST接口获取GeoServer中的图层列表
    网上最流行的FLASH焦点图文幻灯片(focus.swf改进版),可支持jpg/gif/png/swf文件(转载)
    使用PostgreSQL的bytea字段存读取文件及读取出错问题处理
  • 原文地址:https://www.cnblogs.com/zoujiaojiao/p/11028039.html
Copyright © 2020-2023  润新知