天天看点

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,如需转载请自行联系原作者