我'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代码 . 问题只发生在定期构建中,而不是我自己开始构建并且它独立于下拉菜单中的所选选项 . 有没有人知道如何解决这个问题?