首页 > 解决方案 > 有没有办法在 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 为参数特别注入环境变量

标签: jenkinsgroovyjenkins-pipelinejenkins-plugins

解决方案


推荐阅读