首页 > 解决方案 > 完成后自行删除 Jenkins 构建

问题描述

tl; dr:我想从它们的执行中删除构建,或者更确切地说,在 post 语句中(尽管细节不重要)。


背景:在我正在从事的一个项目中,只要某些其他工作仍在运行,就有一种“网关”工作可以将所有新工作触发器聚合到一次启动中。为此,该作业会自行中止,以便只运行一个实例(通常不是最新版本)。

不幸的是,这意味着在作业预览中,作业通常显示为中止,这是不可取的(以“成功”或其他状态结束作业不会改善任何事情)。因此,我有两个选择:

  1. 更改中止逻辑,以使最新的构建继续存在,而旧的构建被中止。这在技术上是可行的,但由于某些内部逻辑而具有其他缺点,这就是我想避免使用此解决方案的原因。
  2. 完成后删除中止的构建

但是,这显然不像在作业中调用“doDelete”REST API 那样简单,并且构建丢弃器不能设置为存储 0 个构建(它需要是一个正整数)。这是我在代码方面尝试过的(MWE):

steps {
    script {
        currentBuild.result = 'ABORTED'
        error("abort")
    }
}
post {
    always {
        withCredentials([string(credentialsId: 'x', variable: 'TOKEN')]) {
            sh "curl -X POST \"https://jenkins.example.com/etc/job/jobname/${env.BUILD_NUMBER}/doDelete\" -i -H 'Authorization: Bearer $TOKEN'"
        }
    }
}

此代码删除了一些作业信息(例如,控制台日志为空),但不删除构建本身。因此,我的问题仍然存在:

如何让作业自行删除?

标签: jenkinsjenkins-pipeline

解决方案


推荐阅读