我在服务器上有一个文本文件,例如的/ 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插件。
答案 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的当前版本