当前位置: 首页 > 知识库问答 >
问题:

如何将变量传递到在Jenkins管道参数中执行的Groovy脚本中?

袁阿苏
2023-03-14

我有一个领事密钥AAA / BBB /测试密钥,如“1,2,3”,AAA / CCC /测试密钥,如“4,5,6”等。

我在几个作业之间有一个共享的 Jenkinsfile。

我不想在每一份工作中都使用Jenkinfile。我想通过工作名称访问密钥,但我无法实现。

如果我在 URL 中对密钥进行硬编码,它可以工作,例如

node('master') {
properties([parameters([
    [   $class: 'ChoiceParameter',
        name: 'GROUPS',
        description: 't2',
        randomName: 't3',
        script: [
            $class: 'GroovyScript', 
            fallbackScript: [
                classpath: [], sandbox: false, script: ''
            ],
            script: [   
                classpath: [], sandbox: false, script:
                '''
                    def text = new URL('http://consul.local:8500/v1/kv/AAA/BBB/test-key?raw').getText()
                    return text.split(",").collect{ (it=~/\\d+|\\D+/).findAll() }.sort().collect{ it.join() } as List      
                '''
            ]
        ],
        choiceType: "PT_RADIO", //PT_SINGLE_SELECT,PT_MULTI_SELECT,PT_RADIO,PT_CHECKBOX
        filterable: true, 
        filterLength: 1
    ]
])])
}

但是,当我尝试在URL中使用env.JOB_NAME时,它不起作用:

node('master') {
properties([parameters([
    [   $class: 'ChoiceParameter',
        name: 'GROUPS',
        description: 't2',
        randomName: 't3',
        script: [
            $class: 'GroovyScript', 
            fallbackScript: [
                classpath: [], sandbox: false, script: ''
            ],
            script: [   
                classpath: [], sandbox: false, script:
                '''
                    def text = new URL('http://consul.local:8500/v1/kv/AAA/'+ env.JOB_NAME + '/test-key?raw').getText()
                    return text.split(",").collect{ (it=~/\\d+|\\D+/).findAll() }.sort().collect{ it.join() } as List      
                '''
            ]
        ],
        choiceType: "PT_RADIO", //PT_SINGLE_SELECT,PT_MULTI_SELECT,PT_RADIO,PT_CHECKBOX
        filterable: true, 
        filterLength: 1
    ]
])])
}

如何访问使用Groovy脚本定义的选择参数中的环境变量?

共有2个答案

曾骁
2023-03-14

是的,在将“”更改为“”之后,我的问题得到了解决

商夜洛
2023-03-14

如果要传递< code>env。JOB_NAME添加到脚本内容中,您必须将< code >“”替换为< code >“”,并使用< code>${env >引用该变量。作业名称}。大概是这样的:

        script: [   
            classpath: [], sandbox: false, script:
            """
                def text = new URL('http://consul.local:8500/v1/kv/AAA/${env.JOB_NAME}/test-key?raw').getText()
                return text.split(",").collect{ (it=~/\\d+|\\D+/).findAll() }.sort().collect{ it.join() } as List      
            """
        ]
 类似资料:
  • 问题内容: 我们如何在Jenkins管道的Groovy脚本中传递参数? 我已经写了xyz.groovy,它可以很好地加载和执行,但是我想在其中传递参数而不是重复工作。我尝试传递负载’../xyz.groovy’param1param2但没有运气。 xyz.groovy 问题答案: 您是否在用参数调用的Groovy中创建方法?

  • 问题内容: 有没有办法在Powershell脚本中使用Groovy变量?我的示例脚本如下。 问题答案: 您不能在单引号或三单引号中插入变量。使用三重双引号:

  • 我正在构建一个jenkins管道,作业可以由远程触发。我需要知道哪个IP触发了作业。所以我有一个小Groovy脚本,它返回远程IP。使用EnvInject-plugin,我可以轻松地在正常的自由式作业中使用这个变量,但是我如何在管道中使用它?我不能将EnvInject-plugin与管道插件一起使用:( 这是获取IP的小脚本:

  • 我正在尝试从使用自由式詹金斯构建切换到管道项目。 我喜欢它的许多方面,但我希望我可以使用多分支管道,因为它更适合我们公司,但目前这不是一个选择。 我们目前所做的是创建一个名为

  • 问题内容: 我想将“ $ WORSKPACE”变量用于jenkins脚本调用的常规文件。但是在SO上找到的所有解决方案都失败了: 我得到的消息:脚本不允许使用groovy.lang.GroovyObject方法setProperty java.lang.String java.lang.Object(JenkinsHelper.name)。管理员可以决定是批准还是拒绝此签名。 对设置为允许Jenk