实施具有通用部署和测试阶段的多项目 gitlab 管道

Posted

技术标签:

【中文标题】实施具有通用部署和测试阶段的多项目 gitlab 管道【英文标题】:Implement Multi-project gitlab pipeline with common deploy and test stages 【发布时间】:2021-05-27 09:39:19 【问题描述】:

我的任务是为云 Saas 解决方案实施 gitlab ci/cd 管道。我们的产品由 4 个微服务组成,每个微服务都在一个单独的 git 项目中。我的目标是设置一个管道,在其中提交对服务 A 的更改将构建/单元测试服务,在我们的 CI 环境中部署服务,然后在单独的项目中触发我们的端到端测试。为单个服务的单个提交解决这个问题非常简单。我有一个 POC,在 gitlab yml 中的部署阶段之后,我只使用“触发器”属性来触发 e2e 测试项目中的端到端测试。我的问题是弄清楚如何通过同时对每个项目进行并行提交来管理它。

例如:如果有人提交服务 A 并且它的管道启动(构建 -> 部署到 CI 空间 -> 触发 E2E 测试)。然后,当管道仍在运行时,有人提交到服务 B,触发它的管道(构建 -> 部署到 CI 空间 -> E2E 测试),我如何防止在 E2E 仍然从提交运行时运行提交到服务 B 的部署阶段服务A?基本上,如果在其他管道中运行类似的阶段,我希望部署阶段和 E2E 阶段保持不变。

注意:服务存在于单独的 git 项目中的历史由来已久,因此,如果任何解决方案需要重新组织项目,这将是一个非常令人信服的理由。

【问题讨论】:

您的问题是由于 gitlab c.i 引擎的限制。如果你想使用另一个更灵活的 c.i 引擎,你可以做任何你想做的事情。无论如何,你能在你的 gitlab ci 中运行 shell 代码或一些 nodejs 脚本吗? 【参考方案1】:

您可以为 end2end 管道配置一个单独的运行器,并将此运行器一次限制为 1 个管道

见https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section

另请参阅此功能请求,它请求您正在寻找的功能: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41560

描述了其他几种解决方法。

【讨论】:

以上是关于实施具有通用部署和测试阶段的多项目 gitlab 管道的主要内容,如果未能解决你的问题,请参考以下文章

用于 Maven 部署的 Gitlab CI/CD 的适当阶段是啥?

GitLab,具有依赖性的手动作业

gitlab-ci 运行器中具有不同到期时间的多条路径

在 gitlab 管道中执行 testcontainer 集成测试

功能测试转自动化测试?先从一个通用的自动化测试流程开始

Gitlab:构建后如何在后续作业中使用工件