Jenkins DSL管道:从其管道中删除作业 [英] Jenkins DSL Pipeline: delete a job from its pipeline

查看:108
本文介绍了Jenkins DSL管道:从其管道中删除作业的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Jenkins管道作业(除其他事项外)使用

I have a Jenkins pipeline job that (among other things) creates another pipelineJob (to cleanup everything afterwards) using Job DSL plugin.

pipeline {

    agent { label 'Deployment' }

    stages {
        stage('Clean working directory and Checkout') {
            steps {
                deleteDir()
                checkout scm
            }
        }

        // Complex logic omitted

        stage('Generate cleanup job') {
            steps {
                build job: 'cleanup-job-template',
                        parameters: [
                                string(name: 'REGION', value: "${REGION}"),
                                string(name: 'DEPLOYMENT_TYPE', value: "${DEPLOYMENT_TYPE}")
                        ]
            }
        }
    }
}

问题是,我只需要构建一次新生成的作业,然后,如果构建成功,则应删除该作业.

The thing is that I need this newly generated job to be built only once and then, if the build was successful, the job should be deleted.

pipeline {
   stages {
        stage('Cleanup afterwards') {
            // cleanup logic
        }
   }
    post { 
        success { 
            // delete this job?
        }
    }

}

我认为可以使用管道发布操作来完成此操作,但不幸的是,我找不到任何开箱即用的解决方案. 完全有可能做到这一点吗?

I thought, that this can be done using Pipeline Post Action, but, unfortunately, I couldn't find any out-of-the-box solution for this. Is it possible to achieve this at all?

推荐答案

您可以使用Groovy帖子实现此目的,然后需要编写一些Groovy代码才能删除作业:

You can achieve this using the post Groovy and then you will need to write some groovy code in order to delete the job:

#!/usr/bin/env groovy
import hudson.model.*
pipeline {
   agent none
   stages {
        stage('Cleanup afterwards') {
            // cleanup logic
            steps {
                node('worker') {
                    sh 'ls -la'
                }
            }
        }
   }
   post { 
       success { 
           script {
               jobsToDelete = ["<JOB_TO_DELETE"]
               deleteJob(Hudson.instance.items, jobsToDelete)
           }
       }
   }
}

def deleteJob(items, jobsToDelete) {
    items.each { item ->
      if (item.class.canonicalName != 'com.cloudbees.hudson.plugins.folder.Folder') {
        if (jobsToDelete.contains(item.fullName)) {
          manager.listener.logger.println(item.fullName)
          item.delete()
        }
      }
    }
}

测试了两种情况并在Jenkins 2.89.4上工作

Tested both cases and work on Jenkins 2.89.4

这篇关于Jenkins DSL管道:从其管道中删除作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆