繁体   English   中英

在 Groovy 中访问 Jenkins 参数

[英]Access Jenkins Parameter in Groovy

我如何访问 Groovy 中的参数值? 这似乎是一个微不足道的问题,但却让我痛苦了好几个小时。

dslFactory.job(name) {

            parameters {
                activeChoiceParam('ENTERPRISESERVER') {
                    description('')
                    choiceType('SINGLE_SELECT')
                    groovyScript {
                        script("""[
                            "vws-10-persmft",
                            "vws-10-persmft2",
                            "vws-10-persmft3",
                            // "vws-10-persmfe",
                            // "vws-10-persmfe2",
                            "vts-10-perse9",
                            //"vts-10-perse8",
                            //"vts-10-perse7",
                            "vws-10-perskmt5"
                        ]""")
                    }
                }
            }

            steps {
                def targetServer = '${ENTERPRISESERVER}'
                powerShell """
                    Write-Output 'Target Server: $targetServer'
                    Invoke-Command -ComputerName '$targetServer' -ScriptBlock {
                        Restart-Service -Name 'SEEShutdown';
                        Restart-Service -Name 'SEEMonitor';
                    };
                """
            }
        }

当我运行该代码时,出现以下错误:

+ ...             Invoke-Command -ComputerName '${ENTERPRISESERVER}' -Scrip ...

所以出于某种原因,Groovy 没有解析${ENTERPRISESERVER} 我试过使用$ENTERPRISESERVER ,它不会编译:

de.akdb.pers.ci.JobScriptsSpec > test script bootstrap.groovy FAILED
    org.spockframework.runtime.UnallowedExceptionThrownError at JobScriptsSpec.groovy:24
        Caused by: javaposse.jobdsl.dsl.DslScriptException at JobScriptsSpec.groovy:21
            Caused by: groovy.lang.MissingPropertyException at JobScriptsSpec.groovy:21

我究竟做错了什么?

我还尝试了以下问题的解决方案:

Jenkins Job DSL:在作业步骤中使用 groovyScript 中的参数

如何从 JobDSL 中访问特定的 Jenkins 作业参数?

如何使用 Groovy API 检索 Jenkins 构建参数?

尝试以下操作之一。

def targetServer = "${ENTERPRISESERVER}"
def targetServer = params.ENTERPRISESERVER

据我了解,ENTERPRISESERVER 是为您要创建的作业定义的,它在创建该作业的 dsl 代码中无效。
这意味着 ENTERPRISESERVER 在 PowerShell 脚本中是直接可见和可用的。
我从未使用过 PowerShell,但在 BASH 中可以通过“$ENTERPRISESERVER”访问它。
dsl 代码中的 shell 脚本应使用“\$ENTERPRISESERVER”转义 param/var 取消引用。
试试!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM