Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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脚本,在实际工作中的脚本覆盖锚中的脚本之前。现在接受这个答案,因为我学到了解决我问题的两个相关的东西:锚,我实际上可以有几个图像标签(抖动)。非常感谢。