二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

    • Jenkins入门系列笔记汇总整理
    • 前言与介绍
    • Jenkins初始部署与简单配置
    • Jenkins各配置选项介绍
    • Jenkins中一个项目的构建
    • Jenkins配置项目构建的钉钉通知
    • Jenkins忘记管理员密码怎么办
    • Jenkins与gitlab的交互探微
    • Jenkins根目录详解
    • Jenkins插件之显示构建时间
    • Jenkins插件之批量修改配置
    • Jenkins配置简单构建邮件推送
    • Jenkins复杂邮件推送配置详解
    • Jenkins配置复杂构建邮件推送
    • Jenkins构建安卓项目之前的一些唠叨
    • Jenkins构建安卓项目配置
    • Jenkins与Gitlab分支的交互
    • Jenkins构建nodejs项目
    • 使用docker部署Jenkins及初始配置
    • 配置gitlab提交代码Jenkins自动构建
    • Jenkins回滚方案探微
    • Jenkins角色控制(小黄锁)探微
    • Jenkins构建的应用配置问题解决探微
    • Jenkins构建中tag的应用
    • Jenkins插件之Ansicolor(神器)
    • 最基础核心的Jenkins功能部署一个java应用
    • Jenkins+sonar构建代码扫描
    • Jenkins+docker+gitlab将应用部署到docker
    • Jenkins参数化构建犀利插件Active-Choices-Plugin
      • 1,前言。
      • 2,插件介绍。
      • 3,使用插件前的方案。
      • 4,使用插件后的方案。
        • 1,添加 Active Choices Parameter。
        • 2,添加 Active Choices Reactive Parameter。
        • 3,调整 shell。
    • 记一次将代码中参数外显到构建历史中的操作
    • Jenkins升级与迁移的经验分享
    • pipeline笔记之从一个简单的项目构建开始
    • Jenkinsfile声明式语法详解
    • 自动构建的原始配置以及pipeline中的用法
    • 多分支构建的实践与思考
    • 使用Jenkinsfile类前端项目的部署与回滚
    • 如何在Jenkinsfile中定义一个全局的时间戳变量
    • Jenkins中自由风格回滚方案的最佳实践
    • Jenkins中pipeline风格回滚方案的最佳实践
    • pipeline结合ansible剧本进行批量的部署与回滚配置
    • 最近配置安卓iOS打包本地化流程中一些值得记录的内容
    • pipeline中如何在environment环节声明一个含有通配符的变量
    • git-Parameter插件在pipeline共享库中的实践详解
    • jenkins作为ci检测代码是否合并的实践
    • 将Jenkins共享库的Jenkinsfile放到ci静态检测的实践
    • Jenkins的pipeline实践之GitSCM参数配置项详解
    • Jenkins中pipeline对接CMDB接口获取主机列表的发布实践
    • Jenkins有任务无法kill提示即将关闭
    • Jenkins基于Share Library共享库的最佳实践探索
    • Jenkins结合MySql Database插件的平台化实践思路
    • Jenkins-Groovy中三元表达式的用法
    • Jenkins-Groovy中Switch的高阶用法
    • Jenkins-pipeline之利用activity choice插件对接查询MySQL数据实现动态参数化的功能
    • CentOS通过yum快速安装Jenkins
    • Jenkins-pipeline语法之错误处理详解(文末有干货)
    • Jenkins常用插件汇总以及简单介绍
    • Jenkins所遇报错汇总及解决
    • Jenkins管理维护运维规范
  • ELK笔记

  • Kubernetes笔记

  • LLM专题

  • 系列专题
  • Jenkins系列文章
二丫讲梵
2018-12-05
目录

Jenkins参数化构建犀利插件Active-Choices-Plugin

文章发布较早,内容可能过时,阅读注意甄别。

# 1,前言。

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

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

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

# 2,插件介绍。

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

# 3,使用插件前的方案。

image

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

image

简单说就是创建一个自由风格的项目,可以部署到 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,首选设置第一道参数,也就是我们刚刚规划的两套环境的参数:

image

  • name:定义一个名称为 plan 的参数,是的,已经开始了,我们的 A 计划以及 B 计划。

  • script:这里使用 Jenkins 的 groovy 语言进行编写,不了解也没关系,按这个来修改即可。

  • return[
    "Aplan",
    "Bplan"
    ]
    
    1
    2
    3
    4
  • Description:写入一些描述信息。

  • Choice Type:这里定义的是构建时选择的类型,这个地方推荐使用 Radio Buttons。

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

# 2,添加 Active Choices Reactive Parameter。

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

image

  • 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
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 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
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
42
43

最后来张完整截图:

image

5,验证效果。

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

2018120512133385

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

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

  • 首先来构建一下 A 计划的 all 主机,看看效果。

image

通过构建日志可以看到,构建已经触及到 A 计划所囊括的两台主机了。

  • 再来构建一下 B 计划的 all 主机,看看效果。

image

同样的效果,构建就走向了 B 计划囊括的两台主机了。

最后构建一下 B 计划的第一台主机,看看效果。

image

可见,各个流向都是通了的,这样,就把我们一开始的需求,使用一种优雅的方式,给实现了出来。

微信 支付宝
#jenkins#plugin
上次更新: 2024/07/04, 22:40:37
Jenkins+docker+gitlab将应用部署到docker
记一次将代码中参数外显到构建历史中的操作

← Jenkins+docker+gitlab将应用部署到docker 记一次将代码中参数外显到构建历史中的操作→

最近更新
01
睡着的人不关灯
06-12
02
学习周刊-总第215期-2025年第24周
06-12
03
学习周刊-总第214期-2025年第23周
06-05
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式