Continuous integration 在项目上为两个不同的Docker映像运行Gitlab CI 我们有一个集成在本地GITLAB安装的小型C++项目。QA(通过具有预期输出的shell脚本自行开发的单元测试)通过.gitlab ci.yml和特定的Docker映像(映像:ubuntu:artful)完成。由于细微的差异,我们还希望在image:debian:stretch上运行相同的测试,这当然需要CI配置中的细微差异
我目前正在做的是用自己的Continuous integration 在项目上为两个不同的Docker映像运行Gitlab CI 我们有一个集成在本地GITLAB安装的小型C++项目。QA(通过具有预期输出的shell脚本自行开发的单元测试)通过.gitlab ci.yml和特定的Docker映像(映像:ubuntu:artful)完成。由于细微的差异,我们还希望在image:debian:stretch上运行相同的测试,这当然需要CI配置中的细微差异,continuous-integration,gitlab-ci,gitlab-ci-runner,Continuous Integration,Gitlab Ci,Gitlab Ci Runner,我目前正在做的是用自己的.gitlab ci.yml维护一个单独的分支,它在图像-部分有所不同,在不同阶段的主体中也有细微差异(不同的包要获得等等)。这意味着我需要经常将master重设到该分支中,并确保手动合并对ci配置的更改 这并不好:在我以前的生活中,我使用了Jenkins,在那里我可以轻松地在实际的repo之外维护不同的CI设置(我完全明白GitLab解决了CI配置本身在版本控制下的问题) 我想我可以解决gitlab配置中两个分支之间的所有小差异,变量取决于我所在的分支,docker映像
.gitlab ci.yml
维护一个单独的分支,它在图像
-部分有所不同,在不同阶段的主体中也有细微差异(不同的包要获得
等等)。这意味着我需要经常将master
重设到该分支中,并确保手动合并对ci配置的更改
这并不好:在我以前的生活中,我使用了Jenkins,在那里我可以轻松地在实际的repo之外维护不同的CI设置(我完全明白GitLab解决了CI配置本身在版本控制下的问题)
我想我可以解决gitlab配置中两个分支之间的所有小差异,变量取决于我所在的分支,docker映像除外
我看到了两种不同的解决方案来避免仅出于CI目的而维护这两个分支:1)让Gitlab维护人员安装一个具有所需映像的VM,并注册一个特定的附加运行程序,或者2)在主分支上使用一个调度管道,我可以将映像名称作为参数传入
解决方案1)对我来说似乎是最干净的,但我无能为力(仍然需要对gitlab ci配置中的变量进行特殊的大小写/泛化)。有没有其他方法可以在一个项目中运行多个gitlab ci配置而无需太多麻烦?嗯,还有第三种选择,但取决于测试的数量,它可能不会更干净。Yaml支持为每个测试定义一个模板,然后执行两个实例。优点包括两组测试在同一个管道中并行运行,缺点是可能会变得混乱,如果其中一个失败,管道将停止
.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
.job\u模板:&job\u定义
阶段:测试
服务:
-博士后
-雷迪斯
脚本:
-运行测试
测试a:
嗯,还有第三种选择,但根据您进行的测试数量,它可能不会更干净。Yaml支持为每个测试定义一个模板,然后执行两个实例。优点包括两组测试在同一个管道中并行运行,缺点是可能会变得混乱,如果其中一个失败,管道将停止
.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
.job\u模板:&job\u定义
阶段:测试
服务:
-博士后
-雷迪斯
脚本:
-运行测试
测试a:
谢谢你,雅库布,我会尽力把这一点讲清楚的。第一个障碍已经是,我不能真正拥有两个不同的before\u脚本
,这是你传统的apt
等,但我认为我可以解决它。@ShiDoiSi你可以拥有两个不同的before\u脚本,在实际工作中的脚本覆盖锚中的脚本之前。现在接受这个答案,因为我学到了解决我问题的两个相关的东西:锚,我实际上可以有几个图像标签(抖动)。非常感谢。谢谢你,雅库布,我会尽力把这一点讲清楚的。第一个障碍已经是,我不能真正拥有两个不同的before\u脚本
,这是你传统的apt
等,但我认为我可以解决它。@ShiDoiSi你可以拥有两个不同的before\u脚本,在实际工作中的脚本覆盖锚中的脚本之前。现在接受这个答案,因为我学到了解决我问题的两个相关的东西:锚,我实际上可以有几个图像标签(抖动)。非常感谢。