Jenkins DSL管道:从管道中删除作业

au9on6nz  于 2023-01-16  发布在  Jenkins
关注(0)|答案(2)|浏览(171)

我有一个Jenkins管道作业,它使用Job DSL plugin创建了另一个pipelineJob(用于事后清理所有内容)。

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}")
                        ]
            }
        }
    }
}

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

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

}

我想,这可以使用Pipeline Post Action来完成,但是,不幸的是,我找不到任何开箱即用的解决方案。有可能实现这一点吗?

tf7tbtn2

tf7tbtn21#

你可以使用post Groovy来实现这一点,然后你需要编写一些groovy代码来删除作业:

#!/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上运行

x9ybnkn6

x9ybnkn62#

您应该在一个作业中完成所有这些操作,而不是创建和删除作业。为此请使用多个阶段,例如部署测试系统、运行测试/等待测试完成、取消部署。无需额外的作业。示例发布在此处:Jenkins管线是否可以有可选输入步骤?

相关问题