【问题标题】:run junit only for specific microservice仅为特定微服务运行 junit
【发布时间】:2021-12-08 04:31:19
【问题描述】:

我们在一个 repo 中有大约 15 个微服务。在创建 PR 时,所有 15 个微服务都在运行它们的 junit。是否可以只运行特定微服务的junit?我们正在使用 gradle 工具和 jenkins 管道。

例如: 微服务:A、B、C、D

仅在 C 中完成的更改,

期望:只有 C 微服务的 junit 可以从 jenkins 运行

不是 A、B 和 D。

【问题讨论】:

  • 不是每个微服务都有自己的 git repo 吗?每个微服务都有不同的詹金斯管道。
  • 遗憾的是没有。所有服务只有一个管道。
  • 好吧,奇怪。您是否尝试过为每个微服务创建一个单独的阶段,并在需要时只执行相关的阶段,就像在上面的案例中只有 C 微服务的阶段一样?
  • 我只想知道如何找到已进行更改的服务以及如何仅执行特定服务?在 jenkins 中看到了一些功能,例如“dir”,但不知道如何进一步进行

标签: jenkins junit jenkins-pipeline microservices


【解决方案1】:

这是一个适合您的解决方案。不知何故,您必须知道哪个微服务发生了哪些更改。这可以通过在特定模板之后命名分支来完成。

isDMicroservice = "${BRANCH_NAME}" ==~ /^feature/D/*/

所以:feature/{microservice}/... 可能是微服务之间不同的模板。

这将允许您通过解析 Git 分支来分离更改。 然后您可以只执行特定的 Jenkins 阶段:

        stage('D Microservice') {
        when {
            return isDMicroservice
          }
        steps {
            script {
               dir("d-microservice") {
                // Go into the folder of D
                // junit ... 
               }
            }
          }
        }

此解决方案有效,但我可能会将微服务拆分为单个存储库,每个存储库都有自己的 Jenkinsfile。我知道这可能不是您想要做的,但这会在以后为您省去很多麻烦。


另一种解决方案是使用when { changeset(...) }

    stage('D Microservice') {
      when {
        changeset "**/D/*.*"
      }

通常该阶段应该只在微服务 D 中的文件更改时执行。

【讨论】:

  • 嘿,谢谢.. 让我试试这个并更新你。我正在寻找单个 repo 和单个 jenkinsfile 解决方案。将及时向大家发布。再次感谢
  • 我更新了答案。也许你对变更集更好。
猜你喜欢
  • 2011-09-25
  • 2019-07-29
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 2018-06-01
  • 2018-07-20
  • 2023-03-13
  • 2021-02-04
相关资源
最近更新 更多