You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线同步控制与优雅终止技术问询

解决方案

一、实现流水线间Deploy/Destroy的同步控制

要解决Deploy必须等前一次Destroy完成才能执行,同时代码推送时跳过测试阶段的需求,推荐使用Lockable Resources插件实现资源互斥:

1. 全局配置锁资源

进入Jenkins「系统管理」→「Manage Nodes and Clouds」→「Lockable Resources」,新建一个锁资源(比如命名为test-environment-lock),这个锁专门用于控制测试环境的部署与销毁操作,确保同一时间只有一个操作在执行。

2. 修改流水线代码

在testEnvDeploy阶段和post的销毁步骤外层包裹锁逻辑,并通过when条件跳过代码推送触发时的测试阶段:

pipeline {
    agent any
    stages {
        stage('testEnvDeploy') {
            steps {
                // 申请锁,确保同一时间只有一个Deploy/Destroy在运行
                lock(resource: 'test-environment-lock', inversePrecedence: true) {
                    // 你的测试环境部署命令(外部进程)
                    sh './deploy-test-env.sh'
                }
            }
        }

        stage('testA') {
            // 仅非代码推送触发的构建(比如手动触发)才执行测试
            when { not { triggeredBy cause: 'SCMTrigger' } }
            steps {
                // testA逻辑
            }
        }

        stage('testB') {
            when { not { triggeredBy cause: 'SCMTrigger' } }
            steps {
                // testB逻辑
            }
        }

        stage('testC') {
            when { not { triggeredBy cause: 'SCMTrigger' } }
            steps {
                // testC逻辑
            }
        }
    }
    post {
        always {
            // 销毁步骤同样加锁,确保Deploy必须等销毁完成后才能执行
            lock(resource: 'test-environment-lock', inversePrecedence: true) {
                // 你的测试环境销毁命令(外部进程)
                sh './destroy-test-env.sh'
            }
        }
    }
}
  • inversePrecedence: true:让最新触发的构建优先获得锁,避免旧的非代码推送构建(正在跑测试)占用锁导致新的代码推送构建排队。
  • when { not { triggeredBy cause: 'SCMTrigger' } }:代码推送触发的构建会自动跳过testA/testB/testC阶段,直接进入后续流程。

二、流水线中止时让当前步骤正常完成

要实现流水线被中止时,正在运行的Deploy/Destroy步骤不被强制终止,可使用Jenkins内置的ignoreInterruptions步骤包裹核心命令:

ignoreInterruptions {
    sh './deploy-test-env.sh'
}

这个步骤会忽略Jenkins的中止信号,让内部的命令完整执行完毕后再响应中止操作,适配你所说的「杀死stage无法终止外部进程」的场景。

内容的提问来源于stack exchange,提问作者Raziza O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:22:56