jenkins - 如何根据完成状态丢弃 Jenkins 中的旧版本?
问题描述
我有一个 Jenkins 作业设置为每 10 分钟轮询一次 git 存储库中的更改。如果它没有找到(99/100 次,这就是发生的情况)它会提前中止构建并将其标记为 UNSTABLE 。如果它发现一个变化,它会处理它并将其标记为成功,并存储它的工件。我知道我可以使用插件来丢弃旧版本,但它只允许以下选项: 如您所见,没有按完成状态过滤的选项。
理想情况下,我想丢弃除最新的 UNSTABLE 构建之外的所有构建,并保留所有 SUCCESS 或 FAILED 构建及其工件。如果这是不可能的,那么简单地丢弃所有UNSTABLE 构建也可以。
注意:我使用的是声明式管道
解决方案
一种可能性是以编程方式丢弃构建。获取您的作业对象
def job = Jenkins.instance.getItem("JobName")
由于您使用的是声明性管道,job
因此属于WorkflowJob
[1] 类型,您可以使用
job.getBuilds()
. 现在您可以检查每个构建的结果(WorkflowRun
对象 [2])并决定是否要删除它。像下面这样的东西应该工作
def job = Jenkins.instance.getItem("JobName")
job.getBuilds().each {
if(it.result.toString() == "UNSTABLE") {
it.delete()
job.save()
}
}
您可以创建一个执行上述代码并YourJob
在构建后触发的新作业。
[1] https://javadoc.jenkins.io/plugin/workflow-job/org/jenkinsci/plugins/workflow/job/WorkflowJob.html
[2] https://javadoc.jenkins.io/plugin/workflow-job /org/jenkinsci/plugins/workflow/job/WorkflowRun.html
推荐阅读
- pip - pip 安装挂起 (Windows 10) (python 3.10)
- python - 如何在 Python 中获取数据框的过滤值?
- python - 转换为日期时间,假设日期的一部分可能会丢失
- python - 将 Word docx 导入 Google Colab,以便 docx 中的图形和表格按原样显示
- kubernetes - 在生产中使用 ingress-nginx 节点端口访问集群可以吗?
- .net - 如何在 .net 5 中使用 log4net 登录数据库
- mysql - 如何计算出总不同值减去 MySQL 中的分组不同值
- clojure - 为什么在 def 中是 '@foo Cons 而不是 PersistentList 的类?
- javascript - 查找未出现在数组中的最小正整数
- rabbitmq - 带有 Celery&RabbitMQ 的 Airflow 多节点集群 - HA RabbitMQ 的 broker_url 设置问题