天天看點

Jenkins持續內建——參數化建構一、String Parameter二、Choice

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

将SVN位址設定為字元串參數(string parameter),當開始建構的時候将會提示使用者輸入參數值(即:SVN位址)

<a href="https://s1.51cto.com/wyfs02/M02/8E/44/wKiom1i6ijjhfwfNAAA4ZEFteQY307.jpg" target="_blank"></a>

在SVN中引用參數

<a href="https://s5.51cto.com/wyfs02/M02/8E/41/wKioL1i6ijihFNSzAABP5YFvEzA445.jpg" target="_blank"></a>

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

<code>當執行建構時,将會彈出頁面等待使用者輸入參數值完成建構</code>

<a href="https://s1.51cto.com/wyfs02/M00/8E/41/wKioL1i6i_6TqephAAAss2czdO8616.jpg" target="_blank"></a>

由于之前未對tomcat的狀态檢測做參數化建構,故每個子產品都需要一個對應的job用于檢測,最終将會導緻所建立的job數量太大,不但增加了工作量,而且也容易出錯。

以下将通過參數化建構将其合并為一個Tomcat_check的job。 

合并前: 

<a href="https://raw.githubusercontent.com/Vnimos/devops/master/jenkins/images/Module_Check.jpg" target="_blank"></a>

合并後: 

<a href="https://raw.githubusercontent.com/Vnimos/devops/master/jenkins/images/Tomcat_Check.png" target="_blank"></a>

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

<a href="https://s3.51cto.com/wyfs02/M00/8E/E6/wKioL1jPOvPAaJFmAABgg82u0Vc646.png" target="_blank"></a>

建構過程(執行check.sh腳本并引用參數<code>Module</code>) 

<a href="https://s3.51cto.com/wyfs02/M01/8E/E8/wKiom1jPOvOycQf9AAAn_4AaSTI897.png" target="_blank"></a>

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

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

定義check函數用于檢測tomcat是否啟動正常<code>functions</code>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<code>#定義失敗後重試次數</code>

<code>ATTEMPTS=12</code>

<code>FAILED=0</code>

<code>#定義将會輸出版本号的日志(可用于發送郵件)</code>

<code>file</code><code>=$JENKINS_HOME</code><code>/jobs/</code><code>$JOB_NAME</code><code>/builds/</code><code>$BUILD_NUMBER</code><code>/check</code>

<code>#jenkins建構時生成的日志,用于追加日志輸出到jenkins控制台</code>

<code>log=$JENKINS_HOME</code><code>/jobs/</code><code>$JOB_NAME</code><code>/builds/</code><code>$BUILD_NUMBER</code><code>/log</code>

<code>check(){</code>

<code>    </code><code>echo</code> <code>\&lt;h3\&gt; `</code><code>date</code><code>` &gt;&gt; $</code><code>file</code>

<code>    </code><code>#當調用check函數帶參數時才執行</code>

<code>    </code><code>while</code> <code>[ $</code><code># != 0 ]</code>

<code>    </code><code>do</code>

<code>        </code><code>IP=`</code><code>echo</code> <code>$1 | </code><code>awk</code> <code>-F </code><code>"/"</code> <code>'{print $3}'</code> <code>|</code><code>awk</code> <code>-F </code><code>':'</code> <code>'{print $1}'</code><code>`</code>

<code>        </code><code>ver=`curl -skf -m 1 $1 |</code><code>grep</code> <code>-i </code><code>"v"</code> <code>|</code><code>head</code> <code>-1|dos2unix`</code>

<code>        </code><code>curl -skf -m 1 $1 &gt; </code><code>/dev/null</code>

<code>        </code><code>#當curl檢測URL傳回正常時往$file記錄IP和版本号并往jenkins控制台輸出"$1 is OK"(shift用于向左移動一位參數)</code>

<code>        </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ];</code><code>then</code>

<code>            </code><code>echo</code> <code>\&lt;br\&gt; \&lt;a href=$1\&gt;$IP\&lt;\</code><code>/a</code><code>\&gt; ++ $ver &gt;&gt; $</code><code>file</code>

<code>            </code><code>echo</code> <code>$1 is OK! &gt;&gt; $log</code>

<code>            </code><code>FAILED=0</code>

<code>            </code><code>shift</code>

<code>            </code><code>continue</code>

<code>        </code><code>else</code>

<code>            </code><code>#當curl檢測URL傳回異常則等待10秒後重試</code>

<code>            </code><code>FAILED=$(($FAILED + 1))</code>

<code>            </code><code>TIMES=$(($ATTEMPTS - $FAILED + 1))</code>

<code>            </code><code>echo</code> <code>"Waiting for check the web-$1, retrying in 10 seconds for $TIMES times..."</code> <code>&gt;&gt; $log</code>

<code>            </code><code>sleep</code> <code>10</code>

<code>            </code><code>if</code> <code>[ $ATTEMPTS -gt $FAILED ];</code><code>then</code>

<code>                </code><code>continue</code>

<code>            </code><code>else</code>

<code>                </code><code>echo</code> <code>"Failed to check the web-$1"</code> <code>&gt;&gt; $log</code>

<code>            </code><code>fi</code>

<code>            </code><code>#若重試指定次數後仍然失敗則将版本号記錄為ERROR,且字型設為紅色</code>

<code>            </code><code>echo</code> <code>\&lt;br\&gt; \&lt;a href=$1\&gt;$IP\&lt;\</code><code>/a</code><code>\&gt; ++ \&lt;font color=</code><code>'Red'</code><code>\&gt;Error\&lt;\</code><code>/font</code><code>\&gt; &gt;&gt; $</code><code>file</code>

<code>        </code><code>fi</code>

<code>    </code><code>done</code>

<code>}</code>

<code></code>

通過腳本調用上面定義的check函數<code>check.sh</code>

<code>#引入參數用于指定需要檢測的子產品(即參數化建構中的Module)</code>

<code>Module=$1</code>

<code>#引用functions中的check函數</code>

<code>. </code><code>/data/ztjy/functions</code>

<code>args=`</code><code>cat</code> <code>/data/ztjy/</code><code>$Module</code><code>/url</code><code>`</code>

<code>check $args</code>

<code>#提取新版本号(相對其他版本而已)</code>

<code>Maxver=`</code><code>awk</code> <code>-F </code><code>"+"</code> <code>'{print $3}'</code> <code>$</code><code>file</code> <code>| </code><code>grep</code> <code>-i </code><code>v</code> <code>| </code><code>sort</code> <code>|</code><code>tail</code> <code>-1`</code>

<code>#提取舊版本号</code>

<code>Minver=`</code><code>awk</code> <code>-F </code><code>"+"</code> <code>'{print $3}'</code> <code>$</code><code>file</code> <code>| </code><code>grep</code> <code>-i </code><code>v</code> <code>| </code><code>sort</code> <code>|</code><code>head</code> <code>-1`</code>

<code>#如果是新版本号則改版本号字型顯示為橙色</code>

<code>sed</code> <code>-i </code><code>"s/$Maxver/ &lt;font color='Orange'&gt;$Maxver&lt;\/font&gt;/g"</code> <code>$</code><code>file</code>

<code>#如果是舊版本号則改版本号字型顯示為綠色</code>

<code>sed</code> <code>-i </code><code>"s/$Minver/ &lt;font color='SeaGreen'&gt;$Minver&lt;\/font&gt;/g"</code> <code>$</code><code>file</code>

執行參數化建構

<a href="https://s4.51cto.com/wyfs02/M01/8E/E6/wKioL1jPOvTAYMpOAACWiY3D698258.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M01/8E/E6/wKioL1jPOvWwc9IkAAFcrP123ng895.png" target="_blank"></a>

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

<a href="https://s3.51cto.com/wyfs02/M02/8E/E8/wKiom1jPOvWAb9WaAAB9MGpkxt4837.png" target="_blank"></a>

     本文轉自Vnimos51CTO部落格,原文連結:http://blog.51cto.com/vnimos/1908323,如需轉載請自行聯系原作者