将参数映射到标签
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
映射发生冲突,包括环境指令中定义的那些。
我有一个由 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
映射发生冲突,包括环境指令中定义的那些。