我正在尝试使用Dynamic Choice Parameter插件在Jenkins中设置参数化构建。参数应该是作业工作目录(即/var/lib/jenkins/workspace/JobName/dirToScan/
)目录中某些目录的名称。
可以通过以下方式完成下拉菜单中的项目:
def list = ['ls', "/path/to/dirToScan/"].execute().text.tokenize()
要访问正确的目录,我需要作业的名称,因为与执行作业时相反,执行此操作的目录不是/var/lib/jenkins/workspace/[Job Name]/
目录,而是根目录{{ 1}}。
动态选择参数插件允许执行Groovy脚本来填充选择参数。使用提供的答案here我能够检索作业名称。所以我在Jenkins的参数化构建菜单中构建下拉菜单的最终代码如下所示:
/
单击Jenkins作业中的Build with Parameters链接将打开包含下拉菜单的页面(我将其命名为Restore),并且实际建筑效果也很好!
但现在我的问题出现了: 如果将作业设置为定期构建,则构建将失败,并显示以下控制台输出:
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()
如果我只是以“正常”方式填充下拉菜单,就不会发生这种情况,例如: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
这可能是插件中的错误,或者如果Jenkins自己启动作业,则无法执行Groovy代码。这个问题只发生在定期构建中,而不是我自己开始构建它并且它独立于下拉菜单中的所选选项。有没有人知道如何解决这个问题?