如何让git功能分支与jenkins-workflow一起使用?

Rob*_*ert 5 git jenkins jenkins-workflow

我正在尝试设置jenkins-workflow来进行集成测试.我们的集成测试工作方式如下:

有人LibraryA在git的功能分支中进行了更改.我们希望詹金斯在其上运行的特性分支的代码单元测试,那么我们想从这个特性分支安装代码转换成client1client2(这是用户LibraryA),并运行他们的测试.

我能够设置一个工作流来完成所有工作,除了得到正确的提交到功能分支LibraryA.相反,我的设置只是从一些(看似随机的)分支提取LibraryA.

我们有许多功能分支,因此在工作流程设置中对特定分支进行硬编码是不合适的.似乎应该有一些方法来获取触发工作流作业的提交的哈希值(即使使用SCM轮询).

我的设置如下:

currentBuild.setDisplayName("#" + env.BUILD_NUMBER)

node {
  git credentialsId: '033df7f1-7752-46bd-903d-8a70e613eed0', url: 'git@github.com:mycompany/myrepo.git'
  sh '''
echo `git rev-parse HEAD` > libraryA_version.txt
sudo docker run --rm=true -e LANG=en_US.UTF-8 -a stdout -i -t mycompany/libraryA run_tests
'''
  archive 'libraryA_version.txt'
}

def integration_jobs = [:]

integration_jobs[0]={
  node{
    ws {
      unarchive mapping: ['libraryA_version.txt':'.']
      sh 'sudo docker run -t --rm mycompany/client1:v1 bash run_tests.sh "`cat libraryA_version.txt`"'
    }
  }
}

integration_jobs[1] = {
  node{
    ws {
      unarchive mapping: ['libraryA_version.txt' : '.']
      sh 'sudo docker run -t --rm mycompany/client2 run_tests.sh "`cat libraryA_version.txt`" '
    }
  }
}

parallel integration_jobs
Run Code Online (Sandbox Code Playgroud)

所以,我目前的问题是如何设置git repo/polling以获得在第一次测试中运行的正确提交,这将libraryA_version.txt在后续测试中使用?

或者,我应该以完全不同的方式进行这个过程吗?

bla*_*ops 0

您正在寻找的功能是“按分支构建”,在我看来,它应该通过适合用途的插件来相应地实现。

  • 分支是在 git 中完成的。

  • Jenkins 必须复制构建或构建管道作业以适合分支并能够构建和测试分支。

  • 重新集成后,git 必须通知 Jenkins,而 Jenkins 必须关闭作业。

我找到了这个插件:

https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin

这个插件/教程:

http://entagen.github.io/jenkins-build-per-branch/

实施很大程度上取决于您的场景,因此我无法更具体。我只是说挑战是:

  • 构建可以并发且独立运行的 Jenkins 作业。

  • 使用 Jenkins 作业的模板。

  • 处理 Jenkins 和 git 之间的事件。

在你的情况下:

  • 将整个流程构建为从前端到后端的交付管道。

  • 如果有人分支一个步骤并实现一个功能,则复制整个管道并运行整个管道。

  • 让它发挥作用然后改进。