首页 > 解决方案 > jenkins如何强制下游项目只建一次?

问题描述

我正在使用 jenkins 声明式管道来构建我的项目。有3个项目:ABC。项目ABC的直接下游。每次项目BC被触发(通过 Subversion 中的提交)时,它们都会产生一个工件(一个 SNAPSHOT),然后项目A将使用它。出于性能原因,我想强制项目A只构建一次,当项目BC正在构建或它们在队列中等待时。

我如何使用声明性管道来实现这一点?

这是我的管道源代码:

pipeline {
  agent any
  tools {
    maven "maven"
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
}

pipeline {
  agent any
  tools {
    maven "maven"
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
  post {
    success {
      build job: 'A', wait: false
    }
  }
}

pipeline {
  agent any
  tools {
    maven "maven"
  }
  stages {
    stage('Build') {
      steps {
        sh "mvn clean install"
      }
    }
  }
  post {
    success {
      build job: 'A', wait: false
    }
  }
}

标签: jenkinscontinuous-integrationdevops

解决方案


正如评论中所讨论的,发布包装管道的基本代码片段:

pipeline {
    stages {
        stage('Trigger'){
            // Initial trigger if needed
        }
        stage('Build B and C'){
            parallel BuildB: {
                when{
                    // Condition to evaluate
                }
                steps {
                    // Trigger pipeline B
                }
            },
            BuildC: {
                when{
                    // Condition to evaluate
                }
                steps {
                    // // Trigger pipeline C
                }
            }
        }
        stage('Build A'){
            // Trigger pipeline A
        }
    }
}

这个包装器管道将并行执行 B 和 C,并且只有在两者都完成后,才会触发 A。


推荐阅读