我'm trying to use the Dynamic Choice Parameter plugin to set up a parameterized build in Jenkins. The parameters should be the names of some directory'在作业工作目录的目录中(即 /var/lib/jenkins/workspace/JobName/dirToScan/ ) .

可以通过以下方式在下拉菜单中创建项目:

def list = ['ls', "/path/to/dirToScan/"].execute().text.tokenize()

为了到达正确的目录,我需要作业的名称,因为与执行作业时相反,执行此操作的目录不是 /var/lib/jenkins/workspace/[Job Name]/ 目录,而是根目录 / . 动态选择参数插件允许执行Groovy脚本来填充选择参数 . 使用提供的答案here我能够检索作业名称 . 所以我在Jenkins的参数化构建菜单中构建下拉菜单的最终代码如下所示:

def build = Thread.currentThread().toString()
def regexp= ".+?/job/([^/]+)/.*"
def match = build  =~ regexp
def jobName = match[0][1]

def list = ['ls', "/var/lib/jenkins/workspace/" << jobName << "/dirToScan"].execute().text.tokenize()

单击Jenkins作业中的Build with Parameters链接将打开包含下拉菜单(我将其命名为Restore)的页面,并且实际的建筑工作也很棒!

但现在出现了我的问题:如果将作业设置为定期构建,则构建将失败并显示以下控制台输出:

Started by timer
Building in workspace /var/lib/jenkins/workspace/JobName
FATAL: Null value not allowed as an environment variable: Restore
java.lang.IllegalArgumentException: Null value not allowed as an environment variable: Restore
    at hudson.EnvVars.put(EnvVars.java:356)
    at hudson.model.StringParameterValue.buildEnvironment(StringParameterValue.java:56)
    at hudson.model.ParametersAction.buildEnvVars(ParametersAction.java:88)
    at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:929)
    at hudson.plugins.mercurial.MercurialSCM.checkout(MercurialSCM.java:533)
    at hudson.scm.SCM.checkout(SCM.java:484)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
    at hudson.model.Run.execute(Run.java:1750)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:89)
    at hudson.model.Executor.run(Executor.java:240)
Finished: FAILURE

如果我只是以'normal'方式填充下拉菜单,就不会发生这种情况,例如: def list = ["Option 1", "Option 2", "Option 3"]

这可能是插件中的错误,或者如果Jenkins自己启动作业,则无法执行Groovy代码 . 问题只发生在定期构建中,而不是我自己开始构建并且它独立于下拉菜单中的所选选项 . 有没有人知道如何解决这个问题?