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

Jenkins声明式流水线:如何实现手动作业依赖另一作业上次构建成功

实现Jenkins手动触发作业的交叉依赖检查

嘿,这个需求用Jenkins声明式流水线很容易实现,核心就是先检查依赖作业的上次构建状态,不满足条件就直接终止构建。我给你写个具体的实现方案,分步骤讲清楚:

核心思路

因为两个作业都是手动触发,我们只需要在每个作业的流水线开头,添加一个检查步骤:获取另一个作业的上次构建结果,如果结果不是SUCCESS,就直接抛出错误让当前构建失败;如果是成功,再继续执行后续的构建任务。

具体代码示例

假设我们有两个作业:JobA 和 JobB,现在要实现:

  • 只有当JobB上次构建成功时,JobA才能正常运行;否则JobA构建失败
  • 反过来,JobB也只有在JobA上次构建成功时才能运行

JobA的流水线代码

pipeline {
    agent any
    // 明确禁用自动触发,保持手动触发模式
    triggers {
        none()
    }
    stages {
        stage('检查依赖作业状态') {
            steps {
                script {
                    // 获取依赖作业JobB的实例
                    def dependentJob = Jenkins.instance.getItemByFullName('JobB')
                    // 获取JobB的上次构建记录
                    def lastBuild = dependentJob.getLastBuild()
                    
                    // 双重检查:上次构建存在,且状态为成功
                    if (!lastBuild || lastBuild.result != Result.SUCCESS) {
                        error("❌ JobB的上次构建状态不是成功,无法执行JobA,请先确保JobB构建成功!")
                    } else {
                        echo("✅ JobB上次构建成功,可以继续执行JobA")
                    }
                }
            }
        }
        stage('执行JobA的核心任务') {
            steps {
                echo "开始执行JobA的实际构建任务..."
                // 这里替换成你的具体步骤,比如:
                // sh 'mvn clean package'
                // deploy ...
            }
        }
    }
}

JobB的流水线代码

只需要把上面代码中的JobB替换成JobA即可:

pipeline {
    agent any
    triggers {
        none()
    }
    stages {
        stage('检查依赖作业状态') {
            steps {
                script {
                    def dependentJob = Jenkins.instance.getItemByFullName('JobA')
                    def lastBuild = dependentJob.getLastBuild()
                    
                    if (!lastBuild || lastBuild.result != Result.SUCCESS) {
                        error("❌ JobA的上次构建状态不是成功,无法执行JobB,请先确保JobA构建成功!")
                    } else {
                        echo("✅ JobA上次构建成功,可以继续执行JobB")
                    }
                }
            }
        }
        stage('执行JobB的核心任务') {
            steps {
                echo "开始执行JobB的实际构建任务..."
                // 你的具体步骤
            }
        }
    }
}

注意事项

  • 权限问题:确保运行Jenkins的用户账号,拥有读取目标依赖作业构建记录的权限,否则会抛出权限异常
  • 文件夹作业:如果你的作业在Jenkins文件夹下,getItemByFullName需要填写完整路径,比如'MyProjectFolder/JobB'
  • 扩展检查:如果需要更严格的检查,可以加上lastBuild.isStable()来确保上次构建是稳定的(不过通常SUCCESS状态已经足够)

内容的提问来源于stack exchange,提问作者Giel Berkers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:07:43