• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<二十八>Jenkins实战应用–Jenkins参数化构建犀利插件Active-Choices-Plugin

Jenkins eryajf 1周前 (12-05) 30°C 已收录 3个评论
本文预计阅读时间 9 分钟

*系列汇总*

这是一个系列文章,大大小小到今天惊然发现竟然已经累计二十篇了,也就不得不做一个小汇总。回想当初写第一篇文章的时候,就已经决心事无巨细,一应认真的走下来,回头遮望,看着皇皇这么多文章,一股强烈的成就感就此油然而生,于是便有了这些汇总整理。在这个过程当中,好像也帮助过不少的人,这是让我尤其开心的事情,同时也结识了一些志同道合的朋友,再没有比这更让人觉得愉悦的事情啦!也希望以后写出更多类似的系列文章。

文章汇总地址如右:Jenkins 入门教程。

如果相中哪个,点击进去便是。希望正在读这段话的你能够在这个小系列中获得自信以及喜悦!

1,前言。

有时候我们在测试环境当中,可能同一个项目,需要部署多套的环境,这个时候可以针对每套环境来创建多个项目进行构建,这样做不无不可,但是今天要介绍一个插件,可以非常优雅的将这些情况,浓缩到一个 job 里边。

刚刚还在一个博主的自我介绍里看到这样一句话:喜欢一切优雅的运维方式···

通过今天的这个插件,可以让我们优雅很多。

2,插件介绍。

  • 官方地址:https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin
  • 安装方式:在 Jenkins 插件当中直接搜索即可安装。
  • 功能说明:根据所选参数,自动调出对应参数所依赖的后续参数。

3,使用插件前的方案。

那么在这种需求之下,基本思路就是,创建两个项目,每个项目负责进行分发部署。详细配置不讲解了,直接看截图内容:

简单说就是创建一个自由风格的项目,可以部署到 192.168.10.1 以及 192.168.10.2 上去,然后再创建一个项目 b,内容也是一样,只不过分发主机变成了 192.168.10.3 和 192.168.10.4。这么做其实也没什么,但是有点不太优雅。

4,使用插件后的方案。

首先安装上边介绍的插件,接着对项目开始进行配置。

这里着重介绍一下参数以及使用新参数构建时的部署脚本的调整。

1,添加 Active Choices Parameter。

去掉刚刚的 host 的选项参数,然后替换为 Active Choices Parameter,首选设置第一道参数,也就是我们刚刚规划的两套环境的参数:

  • name:定义一个名称为 plan 的参数,是的,已经开始了,我们的 A 计划以及 B 计划。
  • script:这里使用 Jenkins 的 groovy 语言进行编写,不了解也没关系,按这个来修改即可。
    return[
    "Aplan",
    "Bplan"
    ]
    
  • Description:写入一些描述信息。
  • Choice Type:这里定义的是构建时选择的类型,这个地方推荐使用 Radio Buttons。

接着来添加上述定义参数所依赖的第二步骤参数。

2,添加 Active Choices Reactive Parameter。

通过添加被动参数,从而实现如上参数选择之后,此处配置的参数自动跟随变动的效果:

  • Name:定义一个名称为 host 的参数,从而追随如上我们定义的 A 计划或者 B 计划。
  • script:特有的格式,如果需要更多参数,动态添加即可。
    A=["all","192.168.10.1","192.168.10.2"]
    B=["all","192.168.10.3","192.168.10.4"]
    if(plan.equals("Aplan")){
     return A
    }
    if(plan.equals("Bplan")){
     return B
    }
    
  • Description:写入一些描述信息。
  • Choice Type:这里定义的是构建时选择的类型,这个地方推荐使用默认的。

3,调整 shell。

接下来要做的工作,就是根据如上定义的参数,进行相应的调整,从而适用于新的构建方式,我这里简单做了一个小例子作为展示:

##set color##
echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; }
echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; }
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; }
##set color##

source /etc/profile
project="config"
remote_user="root"
remote_port="22"
remote_dir=/usr/local/$project
script_dir=/usr/local/scripts

#cd $WORKSPACE && mvn  clean install -DskipTests=true

deploy(){
    IP=$1
    echoGreen "start scp $project  on $IP"
    #scp -P $remote_port $project.jar $remote_user@$IP:$remote_dir/$project.jar && echo "success scp $project"
    #ssh -p $remote_port $remote_user@$IP "/bin/bash $script_dir/deploy.sh $mode $project"
}

if [ $mode == "deploy" ];then
  if [ $plan == "Aplan" ];then
  echoRed "您选择执行的是 A 计划"
    if [ $host == "all" ];then
      deploy 192.168.10.1
      sleep 3
      deploy 192.168.10.2
    else
      deploy $host
    fi
  elif [ $plan == "Bplan" ];then
  echoRed "您选择执行的是 B 计划"
    if [ $host == "all" ];then
      deploy 192.168.10.3
      sleep 3
      deploy 192.168.10.4
    else
      deploy $host
    fi
  fi
fi

最后来张完整截图:

5,验证效果。

先来看最神奇的一个小展示:

可以看到,效果已经如我们所需求的那样,同一套代码下,首先分出 A 计划与 B 计划,然后再每套计划之下,又能有不同的需求走向可供选择,堪称完美。

接下来真正的构建一下,真刀真枪的拉出来练一练。这里我只是为了演示,并没有连接代码库,不过每个地方的构建走向都有清晰的打印输出,所以也能够很容易看出效果。

  • 首先来构建一下 A 计划的 all 主机,看看效果。
  • 通过构建日志可以看到,构建已经触及到 A 计划所囊括的两台主机了。

  • 再来构建一下 B 计划的 all 主机,看看效果。
  • 同样的效果,构建就走向了 B 计划囊括的两台主机了。

  • 最后构建一下 B 计划的第一台主机,看看效果。
  • 可见,各个流向都是通了的,这样,就把我们一开始的需求,使用一种优雅的方式,给实现了出来。


    weinxin
    扫码订阅,第一时间获得更新
    微信扫码二维码,订阅我们网站的动态,另外不定时发送 WordPress 小技巧,你可以随时退订,欢迎订阅哦~

    二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<二十八>Jenkins实战应用–Jenkins参数化构建犀利插件Active-Choices-Plugin
    喜欢 (1)
    [如果想支持本站,可支付宝赞助]
    分享 (0)
    eryajf
    发表我的评论
    取消评论
    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址
    (3)个小伙伴在吐槽
    1. 请问下有没有考虑过一个问题?生产环境和测试环境ip是不一样的,配置文件里面需要改,有没有什么好的思路?
      fsckzy2018-12-11 11:57 (3天前)回复 Windows 10 | Chrome 71.0.3559.6
      • eryajf
        关于这个问题,我专门写过一篇文章,可供参考:http://www.eryajf.net/1626.html
        eryajf2018-12-11 12:14 (3天前)回复 Windows 7 | Chrome 70.0.3538.9
      • eryajf
        里边介绍了四五种方案可供参考,当然,我的建议是,你可以先了解这些方案,然后与你们的开发一些协调使用哪种方式最适合。
        eryajf2018-12-11 12:16 (3天前)回复 Windows 7 | Chrome 70.0.3538.9