将参数映射到标签

Map parameter to label

我有一个由 env 参数化的管道,它采用如下所示的特定值。该参数在脚本中使用,不能更改。但是管理员告诉我,代理的标签必须取决于参数 env 和另一个固定参数(例如 LABELX)。

我遇到的问题是,虽然脚本需要如下所示的值,但代理的标签并不总是 ${params.env},但在一种情况下需要制作 mapping/translation .

这是极度简化的 groovy 脚本:

pipeline {
    agent {label "${params.env} && LABELX"}
    parameters {
        choice(
            name: 'env',
            choices: ['development', 'staging', 'production'],
        )
    }
    
    stages {
        stage('Process') {
            steps {
                sh """
                # use ${params.env} in bash script
                """"
            }
        }
    }
}

我需要的映射如下:

env label
development development
staging test
production production

如何在选择代理之前将参数staging替换为标签test?我不能在脚本中执行此操作,因为脚本是 运行 由代理...我以前必须以某种方式执行此操作,也许在 ${params.env} 内部。或者我需要一个额外的参数 (params.label)?

解决它的一种方法是在您的管道之前创建一个常量标签映射,然后在您的管道中使用它来检索所需的值。
类似于:

LABELS = ['development':'development', 'staging':'test', 'production':'production']

pipeline {
    agent {
       label "${LABELS[params.env]} && LABELX"
    }
    parameters {
        choice(
            name: 'env',
            choices: ['development', 'staging', 'production'],
        )
    }
    stages {
        stage('Process') {
            steps {
                sh """
                # use ${params.env} in bash script
                """
            }
        }
    }
}

顺便说一句,不建议调用您的参数 env,因为在某些情况下它可能会覆盖或与包含作业所有环境参数的默认 env 映射发生冲突,包括环境指令中定义的那些。