运行 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
我们有一个集成在本地 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