关于在声明式pipeline的parameters中创建参数化的选项参数的参数

标题有点绕,因此就先来解释一下标题,顺便把需求给说明清楚了。

关于在声明式pipeline的parameters中创建参数化的选项参数的参数,前边的定语都可以忽略,主要的想法还是想创建一个能够动态传入参数的选项参数,选项参数我们都很熟悉了,我这边服务的几个参数也都固定了,以便于整个发布流程的规范统一,然而为了满足开发者能够发布应用到某台主机或者发布到整个集群,我在pipeline中定义了一个选择主机的选项参数,并添加一个all的参数,大概定义方式如下:

pipeline {
    agent any
    parameters {
        choice(name: 'remote_host', choices: 'all\n127.0.0.1\n127.0.0.2', description: '选择要发布的主机')
    }
    stages {
        stage('Checkout') {
            steps {
                echo 'Checkout'
                sh 'echo $remote_host'
            }
        }
    }
}

其中的 choices中的三项将会作为选项参数用于选择。

当我把所有的项目的个性化配置都提取到 environment之后,我把公共的部分放入到了共享库当中,以便于调用,但是因为项目发布主机不同,也就导致我无法通过共享库中的一个脚本来构建所有项目,但这是一个目标,于是,今天我终于打算发力攻克掉这个问题。

有一些事情,终究需要钻研才能够推进,我首先来到网上搜索,但并没什么收获,在这里看到过一个脚本式的伪代码:

#!/bin/groovy

def envs = loadEnvs();

properties([
   parameters([
      choice(choices: envs, description: 'Please select an environment', name: 'Env')
   ])
])

node { 
   try {
      stage('Preparation'){
...

自己尝试了许久,都不能使用,最后参考着,用如下方式实现了需求:

def hosts = 'all\n127.0.0.1\n127.0.0.2'
pipeline {
    agent any
    parameters {
        choice(name: 'remote_host', choices: hosts, description: '选择要发布的主机')
    }
    stages {
        stage('Checkout') {
            steps {
                echo 'Checkout'
                sh 'echo $remote_host'
            }
        }
    }
}

在开篇通过def声明,然后choice选项参数中直接使用即可,基于这个实践,我立马改进共享库当中的构建流程,改成参数传递,然后再在调用共享库的时候将需要的参数传入,最终终于实现,基于一个流水线脚本,再多的项目都可以通过传递参数来进行构建了!

2赞