Jenkins基础教程(150)Jenkins参数化构建作业历史:Jenkins参数化构建:让流水线学会“变脸”的魔法手册

每次手动修改Jenkins配置的日子,就像每天吃同一碗白米饭,没味道还不得不咽。现在,是时候给Jenkins加点料了。

1 什么是参数化构建?从“固定套餐”到“自助点单”

简单来说,参数化构建就是在Jenkins任务中添加一系列可配置的参数,这些参数可以在构建开始时由用户输入或通过API传递,从而影响构建的过程和行为。

没有参数化构建前:每次构建项目时都需要去修改配置,然后保存,再去立即构建。这样修改容易出错,操作也比较麻烦。

使用参数化构建后:就像我们去咖啡店点单,可以自由选择咖啡种类、糖度、冰量等参数,最终得到符合个人口味的咖啡。

在企业中,要实现敏捷开发,必须结合Jenkins的众多插件来实现更强大的特性。通过参数化构建,我们可以取到构建人员究竟是想根据参数做什么操作,提前在shell脚本中做好对应的判断。

1.1 为什么你的Jenkins需要参数化构建?

在日常开发中,这种场景屡见不鲜:

  • 开发需要部署到测试环境,而测试人员需要部署到预发环境
  • 同一个项目需要根据不同参数构建不同模块
  • 生产环境部署需要人工确认才能进行

参数化构建的四大优势

  • 提高灵活性:通过参数化构建,我们可以根据不同的需求提供可配置的参数,动态调整构建的配置和行为。
  • 减少重复Job:在没有使用参数化构建之前,可能需要为每个环境(开发、测试、生产)创建单独的Job。
  • 降低出错风险:每次构建项目时如果都需要修改配置,不仅麻烦,还容易出错。
  • 实现更复杂的流程控制:结合条件判断和参数,可以实现根据不同的参数值执行不同的构建步骤。

2 参数化构建进化史:从“青铜”到“王者”

回顾Jenkins参数化构建的发展历程,它经历了一段有趣的进化:

2.1 远古时期:硬编码配置

在参数化构建出现之前,每个小改动都意味着需要修改Job配置并保存。正如一个开发者在2017年所描述:"由于每次构建的时候指定的SVN路径都不同,如果不使用参数化构建则每次都需要修改配置中的SVN路径,不但不安全也容易出现错误"。

这就像每次换电视频道都需要重新焊接电视机内部电路一样笨拙。

2.2 青铜时代:基础参数类型

早期的参数化构建支持基本的参数类型,主要是字符串参数和选项参数。这些基础参数虽然简单,但已经解决了大部分常见问题。

字符串参数的应用场景:将SVN地址设置为字符串参数,当开始构建的时候将会提示用户输入参数值(即:SVN地址)。

选项参数的价值:通过一个Tomcat_check的Job替代每个模块都需要一个对应Job的冗余情况,大大减少了Job数量。

2.3 白银时代:Pipeline集成

随着Jenkins Pipeline的普及,参数化构建进入了代码化时代。现在,我们可以在Jenkinsfile中直接定义参数,这让配置更加灵活且易于版本管理。

Pipeline中的parameters指令支持多种参数类型:

pipeline {
    agent any
    parameters {
        booleanParam(defaultValue: true, description: '', name: 'p_userFlag')
        choice(
            choices: 'dev\nprod',
            description: 'choose deploy environment',
            name: 'p_deploy_env'
        )
        string (name: 'p_version', defaultValue: '1.0.0', description: 'build version')
        text (name: 'p_deploy_text', defaultValue: 'One\nTwo\nThree', description: '')
        password (name: 'p_password', defaultValue: '', description: '')
    }
}

被传入的参数会放到名为params的对象中,在pipeline中可以直接使用,比如params.userFlag就是引用parameters指令中定义的userFlag参数。

2.4 黄金时代:动态参数

现代的参数化构建支持动态参数,这标志着参数化构建进入了成熟阶段。Active Choices插件允许我们创建动态更新的参数。

比如,我们可以创建一个根据所选环境动态显示不同服务器列表的参数:

if (DEPLOY_ENV == "dev") {
    return ["dev-server-1", "dev-server-2"]
} else if (DEPLOY_ENV == "test") {
    return ["test-server-1", "test-server-2"]
} else if (DEPLOY_ENV == "staging") {
    return ["staging-server-1"]
} else if (DEPLOY_ENV == "production") {
    return ["prod-server-1", "prod-server-2", "prod-server-3"]
} else {
    return ["default-server"]
}

3 参数化构建实战:打造多环境部署流水线

3.1 常用参数类型一览

Jenkins提供了多种参数类型,像是一个专业厨房的各种调味区:

参数类型

用途描述

示例定义

string

文本输入(分支名、版本号)

string(name: 'BRANCH', defaultValue: 'main', description: 'Git分支名')

b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值