groovy 在Jenkins管道中,如何跟踪Git子模块中的哪个子模块具有特定的分支?

vhmi4jdf  于 2023-10-15  发布在  Jenkins
关注(0)|答案(1)|浏览(117)

假设我有一个Git子模块,并在它的一些(但不是全部)子模块上创建了一个同名的分支。这是文件结构。

/path/submodule/module1
               /module2 <---- has feature/jira-123-new-feature branch
               /module3
               /module4 <---- has feature/jira-123-new-feature branch

所以在上面的例子中,子模块module2module4feature/jira-123-new-feature分支,但没有module1module3
在Jenkins管道中,我希望能够这样做。

node("buildNode") {
  stage("Run Git") {
    List<String> childModules = []
    sh """
      git submodule foreach 'git checkout feature/jira-123-new-feature && <add child module to childModules list> || :'
    """
  }
}

这个想法是,如果子模块有分支,git checkout feature/jira-123-new-feature将通过,<add child module to childModules list>的代码将执行。否则,git checkout ...将失败,但|| :将捕获它并移动到下一个子模块。
我的问题是,如何编写<add child module to childModules list>代码?或者有更好的/不同的方法来完成我需要的东西吗?Tia

ff29svar

ff29svar1#

我做了以下的事情,虽然我真的认为有人会有更好的方法。

// Store the child modules with "branchToBuild" in a file called
      // "dirs.txt"
      sshagent(credentials: ['bitbucket-creds']) {
        sh(label: "Build",
           script: """
             if [ -f dirs.txt ]; then rm -f dirs.txt; fi
             git submodule foreach 'git checkout $branchToBuild && git pull origin $branchToBuild && echo \$name >> ../dirs.txt || :'
           """,
           returnStatus: true)
      }

      // Now read the "dirs.txt" file into a list 
      final List<String> modules = (readFile(file: "./dirs.txt")).split("\n")
      modules.each { module ->
        // Do something
      }

相关问题