jenkins:通过groovy脚本更新参数

时间:2018-02-08 03:08:19

标签: jenkins groovy

我在服务器上有一个文本文件,例如的/ var / lib中/詹金斯/.../ myChoices.txt

FirstChoice,SecondChoice

由于文件会不时更新,我希望每次点击“使用参数构建”时脚本都会更新参数
但是我的代码仅在我构建作业时起作用,即不实时更新。

def getMyChoices() {
    List<String> choices = Arrays.asList(readFileFromWorkspace('/var/lib/jenkins/.../myChoices.txt').split(','))
    return choices
}
job(jobName) {

  description("Deploy something based on choice.")

  parameters {
    ...
    ...
    choiceParam('EB_ACTIVE_ENV_NAME', getMyChoices(), '')
  }
}

由于某些漏洞原因,我也不想使用hudson插件。

2 个答案:

答案 0 :(得分:0)

只有在运行作业时才会执行Groovy脚本。因此,在作业运行之前,参数不会刷新

唯一可用的解决方案是定期执行此作业,并使用附加标志单独刷新参数然后退出。

这样,无论何时单击Build on Parameters选项,您都将拥有文件中存在的最新参数。

答案 1 :(得分:0)

需要重新生成作业以刷新参数。 我要做的是创建一个作业,当我对myChoices.txt版本进行版本控制的存储库中发生更改时,使用jobdsl步骤生成作业。

这是jobDsl的使用示例

    jobDsl removedJobAction: 'DELETE',
            removedViewAction: 'DELETE',
            targets: targetFile,
            unstableOnDeprecation: true,
            additionalParameters: [
                pipelineJobs: arrFiles,
                props: [
                    basePath: destination,
                    gitRemoteUrl: config.gitRemoteUrl,
                    gitConfigJenkinsBranch: config.gitConfigJenkinsBranch,
                    localPath: config.localPath ?: ''
                ]
            ]

我将其与我创建的共享库一起使用,该共享库允许我抽象jobDSL并仅写pipelineDSL https://github.com/SAP/jenkins-pipelayer/,但对此库有限制,因为我解析pipelineDSL,getMyChoices()不会在lib的当前版本