jenkins - 有没有办法在 extendedChoice 参数中使用管道环境变量?
问题描述
我正在为我的 Jenkins 管道使用扩展选择插件。它从存储桶中获取 s3 对象,并使用简短的 Groovy 脚本提供值列表。问题是我需要使用管道环境部分中定义的相应变量来参数化 s3 存储桶。我怎样才能做到这一点?
所以我尝试了很多不同的片段来获取环境变量,但没有结果。
import jenkins.model.*
// This will print out the requested var from the global Jenkins config.
def envVars = Jenkins.instance.getGlobalNodeProperties()[0].getEnvVars()
return envVars['S3_BUCKET']
// This will print out values from the env vars of the node itself where the Jenkins is running.
def env = System.getenv('S3_BUCKET')
return env
// This is what I have now
def domainsList = "aws s3api list-objects-v2 --bucket someRandomBucket --output text --delimiter /".execute() | 'cut -d / -f 1'.execute() | 'sed 1d'.execute()
domainsList.waitFor()
def output = domainsList.in.text
return output.split('COMMONPREFIXES')
// This is the Jenkinsfile
pipeline {
agent any
environment {
DOMAIN_NAME = "${params.DOMAIN_NAME}"
MODEL_VERSION = "${params.MODEL_VERSION}"
S3_BUCKET = "someRandomBucket"
}
parameters {
extendedChoice(
bindings: '',
defaultValue: '',
description: '',
descriptionPropertyValue: '',
groovyClasspath: '',
groovyScript: '''
def domainsList = "aws s3api list-objects-v2 --bucket someRandomBucket --output text --delimiter /".execute() | 'cut -d / -f 1'.execute() | 'sed 1d'.execute()
domainsList.waitFor()
def output = domainsList.in.text
return output.split('COMMONPREFIXES')
''',
multiSelectDelimiter: ',',
name: 'DOMAIN_NAME',
quoteValue: false,
saveJSONParameterToFile: false,
type: 'PT_SINGLE_SELECT',
visibleItemCount: 10)
choice(
choices: ['a', 'b'],
description: 'Select a model version for processing',
name: 'MODEL_VERSION')
}
stages {
stage('Clean workdir') {
steps {
cleanWs()
}
}
stage('build') {
steps {
sh "echo $S3_BUCKET"
sh "echo $DOMAIN_NAME"
sh "echo $MODEL_VERSION"
}
}
}
}
正如我上面提到的,我需要用 extendedChoice 参数中的 groovy 脚本中的 S3_BUCKET env var 值替换 someRandomBucket 硬代码
已解决 - 可以通过Jenkins作业 UI 为参数特别注入环境变量
解决方案
推荐阅读
- python - Python 检查 - 查找文件中关键字匹配的最后一次出现,然后检查正则表达式
- ssis - SSDT 2017 安装失败 无法打开配置注册表项
- node.js - Alexa API 技能 - nodejs 获取请求未执行
- bots - 我的 GupShup 机器人迷路了?
- ios - ios - 如何将 mtl 纹理文件应用于 OBJ
- typescript - 如何注释一个接受类并返回具有静态成员的工厂的函数?
- python - 在python中比较列表和文件以进行匹配
- javascript - Javascript 将响应对象解析为对象数组
- jquery - 如果页面上存在动态创建的跨度类,则显示 div
- javascript - 如何更新 Vue.JS 中的插槽