Jenkins持續集成——參數化構建

一、String Parameter

由於每次構建的時候指定的SVN路徑都不同,如果不使用參數化構建則每次都需要修改配置中的SVN路徑,不但不安全也容易出現錯誤。

將SVN地址設置爲字符串參數(string parameter),當開始構建的時候將會提示用戶輸入參數值(即:SVN地址)

wKiom1i6ijjhfwfNAAA4ZEFteQY307.jpg

在SVN中引用參數

wKioL1i6ijihFNSzAABP5YFvEzA445.jpg

另外,如果需要自動拉取SVN的tag或git的branch可以使用"List Subversion tags(and more)"和"Git Parameter Plug-In"這兩個插件,將會自動在所填的SVN/git地址下列出子目錄,有興趣的朋友可以自己研究一下。

當執行構建時,將會彈出頁面等待用戶輸入參數值完成構建

wKioL1i6i_6TqephAAAss2czdO8616.jpg

二、Choice

由於之前未對tomcat的狀態檢測做參數化構建,故每個模塊都需要一個對應的job用於檢測,最終將會導致所創建的job數量太大,不但增加了工作量,而且也容易出錯。

以下將通過參數化構建將其合併爲一個Tomcat_check的job。 

合併前: 

Module_Check.jpg

合併後: 

Tomcat_Check.png

勾選配置參數化構建過程(選擇"Chice"並定義參數名爲Module,Choices的值根據自己的情況填寫需要的選項) 

wKioL1jPOvPAaJFmAABgg82u0Vc646.png

構建過程(執行check.sh腳本並引用參數Module) 

wKiom1jPOvOycQf9AAAn_4AaSTI897.png

觸發郵件步驟略(將會在郵件插件中詳細介紹)


以下附上檢測tomcat的腳本(僅供參考)

Tomcat_check檢測腳本

  • 定義check函數用於檢測tomcat是否啓動正常functions

#定義失敗後重試次數
ATTEMPTS=12
FAILED=0
#定義將會輸出版本號的日誌(可用於發送郵件)
file=$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER/check
#jenkins構建時生成的日誌,用於追加日誌輸出到jenkins控制檯
log=$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER/log
check(){
    echo \<h3\> `date` >> $file
    #當調用check函數帶參數時才執行
    while [ $# != 0 ]
    do
        IP=`echo $1 | awk -F "/" '{print $3}' |awk -F ':' '{print $1}'`
        ver=`curl -skf -m 1 $1 |grep -i "v" |head -1|dos2unix`
        curl -skf -m 1 $1 > /dev/null
        #當curl檢測URL返回正常時往$file記錄IP和版本號並往jenkins控制檯輸出"$1 is OK"(shift用於向左移動一位參數)
        if [ $? -eq 0 ];then
            echo \<br\> \<a href=$1\>$IP\<\/a\> ++ $ver >> $file
            echo $1 is OK! >> $log
            FAILED=0
            shift
            continue
        else
            #當curl檢測URL返回異常則等待10秒後重試
            FAILED=$(($FAILED + 1))
            TIMES=$(($ATTEMPTS - $FAILED + 1))
            echo "Waiting for check the web-$1, retrying in 10 seconds for $TIMES times..." >> $log
            sleep 10
            if [ $ATTEMPTS -gt $FAILED ];then
                continue
            else
                echo "Failed to check the web-$1" >> $log
            fi
            #若重試指定次數後仍然失敗則將版本號記錄爲ERROR,且字體設爲紅色
            echo \<br\> \<a href=$1\>$IP\<\/a\> ++ \<font color='Red'\>Error\<\/font\> >> $file
            FAILED=0
            shift
            continue
        fi
    done
}

  • 通過腳本調用上面定義的check函數check.sh

#引入參數用於指定需要檢測的模塊(即參數化構建中的Module)
Module=$1
#引用functions中的check函數
. /data/ztjy/functions
args=`cat /data/ztjy/$Module/url`
check $args
#提取新版本號(相對其他版本而已)
Maxver=`awk -F "+" '{print $3}' $file | grep -i v | sort |tail -1`
#提取舊版本號
Minver=`awk -F "+" '{print $3}' $file | grep -i v | sort |head -1`
#如果是新版本號則改版本號字體顯示爲橙色
sed -i "s/$Maxver/ <font color='Orange'>$Maxver<\/font>/g" $file
#如果是舊版本號則改版本號字體顯示爲綠色
sed -i "s/$Minver/ <font color='SeaGreen'>$Minver<\/font>/g" $file


  • 執行參數化構建

wKioL1jPOvTAYMpOAACWiY3D698258.png

wKioL1jPOvWwc9IkAAFcrP123ng895.png

由上面可見檢測後將自動觸發郵件通知,郵件內容如下:

wKiom1jPOvWAb9WaAAB9MGpkxt4837.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章