如何在代码仓库推送变更时取消Jfrog Pipelines的活跃运行?
代码仓库推送变更时取消活跃的Jfrog Pipelines运行实例
当然有办法,以下是几种实用的实现方式:
1. 启用触发器内置的"取消之前运行"功能
这是最简单的方式,直接在流水线的webhook触发器配置里操作:
- 找到对应代码仓库的触发器,开启Cancel Previous Runs选项。
- 开启后,每当新的变更触发流水线时,系统会自动取消当前分支下所有处于活跃状态(RUNNING/PENDING)的旧运行实例。
- 注意:这个功能仅对同分支的运行生效,不同分支的活跃实例不会被影响。
2. 通过REST API自定义取消逻辑
如果需要更灵活的控制(比如跨分支取消、按特定条件筛选实例),可以用Jfrog Pipelines的REST API实现:
- 第一步:获取活跃运行实例ID
调用GET /pipelines/api/v1/runs接口,通过参数过滤出目标实例:
从返回结果中提取所有符合条件的curl -H "Authorization: Bearer YOUR_PIPELINES_TOKEN" \ "https://your-jfrog-instance/pipelines/api/v1/runs?status=RUNNING&pipelineId=YOUR_PIPELINE_ID&branch=YOUR_BRANCH"runId。 - 第二步:取消目标实例
对每个提取到的runId,调用取消接口:curl -X POST -H "Authorization: Bearer YOUR_PIPELINES_TOKEN" \ "https://your-jfrog-instance/pipelines/api/v1/runs/{runId}/cancel" - 可以把这套逻辑加到流水线的初始步骤里,每次触发新运行前自动清理旧的活跃实例。
3. 在Pipeline DSL中嵌入取消脚本
直接在流水线的DSL定义里添加前置步骤,用脚本完成取消操作,以Groovy DSL为例:
pipeline { agent any environment { PIPELINES_TOKEN = credentials('pipelines-api-token') PIPELINES_URL = 'https://your-jfrog-instance' BRANCH_NAME = "${git.branch}" } stages { stage('Clean Up Previous Runs') { steps { script { // 获取当前分支的活跃运行实例 def runsResponse = sh( script: "curl -s -H 'Authorization: Bearer $PIPELINES_TOKEN' '$PIPELINES_URL/pipelines/api/v1/runs?status=RUNNING&branch=$BRANCH_NAME'", returnStdout: true ) def runs = new groovy.json.JsonSlurper().parseText(runsResponse).items // 逐个取消 runs.each { run -> sh "curl -X POST -H 'Authorization: Bearer $PIPELINES_TOKEN' '$PIPELINES_URL/pipelines/api/v1/runs/${run.id}/cancel'" echo "Canceled previous run: ${run.id}" } } } } // 后续构建、测试等步骤 stage('Build Application') { steps { // 你的构建逻辑 } } } }
- 注意要提前在Jfrog Pipelines中配置好API令牌的凭证,确保脚本有足够权限调用API。
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

