【问题标题】:Trigger dependent jobs in Multibranch Pipeline project在 Multibranch Pipeline 项目中触发相关作业
【发布时间】:2016-07-05 19:12:04
【问题描述】:

我正在使用多分支管道项目来构建我的应用程序。我们有大约 100 多个组件和许多管道项目。所以说例如我们有:

项目A依赖→项目B依赖→项目C

我们对所有这些作业都使用 SCM 轮询。我希望一旦我构建了项目C,就应该构建项目B,然后应该构建项目A。我的依赖项列表可能因项目而异。

我知道一个 Maven 项目可以使用 Build Triggers 来处理这个问题 → ☑ 只要构建了 SNAPSHOT 依赖项就构建,但是使用 Multibranch Pipeline 插件,没有找到任何方法处理这个。

任何指针?

【问题讨论】:

    标签: jenkins cloudbees jenkins-pipeline


    【解决方案1】:

    分支的配置页面有☐构建其他项目后构建,可以选择,但不能保存分支的配置(分支侧边栏中的菜单项显示为刚刚查看配置,而不是配置)。

    以下Jenkinsfile 应该做你想要实现的目标。将其添加到所有分支。如果发生更改,请在您的 master/trunk 上编辑它,然后将其挑选到受这些更改影响的分支。

    // From: Trigger dependent jobs in Multibranch Pipeline project
    //       http://stackoverflow.com/a/38151703/1744774
    
    String[][] buildChains = [
      ['master'],
      ['branch1', 'master'],
      ['branch2', 'branch1', 'master'],
      ['no-build']
      // ... further build chains ...
      ]
    
    for ( buildChain in buildChains ) {
      if ( buildChain[0].equalsIgnoreCase( env.BRANCH_NAME ) ) {
        int depth = 0
        for ( branch in buildChain ) {
          String depthIndicator = "+" * ++depth
          //optional: String depthIndicator = new String(new char[++depth]).replace('\0', '+')
          //optional: String depthIndicator = repeat( "+", ++depth )
          println "  $depthIndicator Triggering build for branch '$branch'"
          build( branch )
          } // for ( branches )
        break // comment this if there are more build chains for one branch
        }
      } // for ( buildChains )
    
    
    def build( String branch ) {
    
      switch ( branch ) {
        case "master":
          buildMaster()
          break
        case ["branch1", "branch2"]:
          buildBranch( branch )
          break
     // case ...
     //   ...
    
        default:
          println "  --- No build defined for branch \'$branch\' ---"
        }  // switch ( branch )
      }  // build( branch )
    
    def buildMaster()   {
      println '  Building branch \'master\'...'
      // ... build code ...
      }
    
    def buildBranch( String branch )    {
      println "  Building branch '$branch'..."
      // ... build code ...
      }
    
    // From: Can I multiply strings in Java to repeat sequences?
    //       http://stackoverflow.com/a/34650746/1744774
    String repeat( String s, int count ) {
      return count > 0 ? s + repeat( s, --count ) : ""
      }
    

    branch1上运行它:

    [Pipeline] echo
      + Triggering build for branch 'branch1'
    [Pipeline] echo
      Building branch 'branch1'...
    [Pipeline] echo
      ++ Triggering build for branch 'master'
    [Pipeline] echo
      Building branch 'master'...
    [Pipeline] End of Pipeline
    Finished: SUCCESS
    

    branch2上运行它:

    [Pipeline] echo
      + Triggering build for branch 'branch2'
    [Pipeline] echo
      Building branch 'branch2'...
    [Pipeline] echo
      ++ Triggering build for branch 'branch1'
    [Pipeline] echo
      Building branch 'branch1'...
    [Pipeline] echo
      +++ Triggering build for branch 'master'
    [Pipeline] echo
      Building branch 'master'...
    [Pipeline] End of Pipeline
    Finished: SUCCESS
    

    记得在 Manage JenkinsIn-process Script Approval 下使用Script Security Plugin 批准最初禁止的功能。

    【讨论】:

    • 感谢您的回复。会试试看。
    • @SarojGharat 不客气。如果您想感谢这里的人,请参阅Why is voting important?
    • 我必须使用完整路径才能成功触发
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多