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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM