运行 Gitlab-CI 两个不同 Docker 图像的项目

Running Gitlab-CI on project for two different Docker images

我们有一个集成在本地 Gitlab 安装上的小型 C++ 项目。 QA(通过具有预期输出的 shell 脚本进行的本地单元测试)是通过 .gitlab-ci.yml 使用 specific Docker 图像(image: ubuntu:artful ).由于细微的差异,我们希望 运行 也在 image: debian:stretch 上进行相同的测试,这当然需要 CI-config.

中的细微差异

我目前正在做的是用它自己的 .gitlab-ci.yml 维护一个单独的分支,它在 image 部分有所不同,不同阶段的主体(不同的包到apt-get 等)。这意味着我需要经常将 master 变基到该分支,并确保手动将更改合并到 ci-config.

这不太好:在我以前的生活中,我使用了 Jenkins,在那里我可以轻松地在实际 repo 之外维护不同的 CI-设置(我完全明白 GitLab 解决了 CI-在版本控制下配置自身)。

我想我可以解决两个分支之间 gitlab-config 中的所有小差异,变量取决于我所在的分支,docker 图像除外。

我看到了两种不同的解决方案来避免仅为了 CI 目的而维护这两个分支:1) 让 Gitlab 维护人员安装具有所需映像的 VM,并注册一个 specific 附加 运行ner,或 2) 在 master-分支上使用预定管道,我可以在其中将图像名称作为参数传递。

解决方案 1) 对我来说似乎是最干净的,但是我无法控制(并且仍然需要 special-casing/generalisation 到 gitlab-ci 配置中的变量)。有没有另一种方法 运行 multiple gitlab-ci 配置在 single 项目中没有太多麻烦?

好吧,还有第三种选择,但根据您进行的测试的数量,它可能不会更干净。 Yaml 支持 anchors 因此您可以为每个测试定义一个模板,然后执行它的两个实例。优点包括两组测试 运行 在同一个管道中并行,缺点是它可能会变得混乱,如果其中一个失败,管道将停止。

.job_template: &job_definition
  stage: test  
  services:
    - postgres
    - redis
  script:
    - run tests

test_a:
  <<: *job_definition
  image: ubuntu:artful
  variables:
     SOME_VAR: "override variable"

test_s:
  <<: *job_definition 
  image: debian:stretch
  before_script:
    - do some special preparations