如何在Jenkins中删除作业并使用JobDSL运行清理代码?

时间:2018-01-23 15:50:14

标签: git jenkins groovy pipeline jenkins-job-dsl

与此问题类似:https://stackoverflow.com/questions/33784488/how-can-i-delete-a-job-using-job-dsl-pluginscript-in-jenkins#=

问题是如果我将removeAction('DELETE')添加到DSL,作业将被删除,这是我想要的,但我也想运行一些清理代码。有没有办法查询JobDSL,或者创建新作业的增量与之前存在的新作业相比?

上下文是,我正在使用JobDSL为GIT存储库中存在的每个分支创建管道作业。删除分支时,我想删除该作业并运行一些清理代码。

1 个答案:

答案 0 :(得分:1)

种子作业的每个构建都将生成的作业的名称存储在GeneratedJobsBuildAction中。如果将上一个版本的生成作业与上一个版本进行比较,则会获得已删除作业的名称。

您可以在Jenkins脚本控制台中尝试以下示例,以获取上次运行种子作业时已删除的作业的名称:

import javaposse.jobdsl.dsl.GeneratedJob
import javaposse.jobdsl.plugin.actions.GeneratedJobsBuildAction

FreeStyleProject seedJob = Jenkins.instance.getItem('seed')

FreeStyleBuild lastBuild = seedJob.lastBuild
FreeStyleBuild previousBuild = lastBuild.previousBuild

Set<GeneratedJob> lastGeneratedJobs = lastBuild.getAction(GeneratedJobsBuildAction).modifiedObjects
Set<GeneratedJob> previousGeneratedJobs = previousBuild.getAction(GeneratedJobsBuildAction).modifiedObjects

print previousGeneratedJobs*.jobName - lastGeneratedJobs*.jobName