在项目上运行Gitlab-CI以获取两个不同的Docker镜像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在项目上运行Gitlab-CI以获取两个不同的Docker镜像相关的知识,希望对你有一定的参考价值。

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

我目前正在做的是维持一个单独的分支,它有自己的.gitlab-ci.yml,它在image-section中有所不同,而且不同阶段的身体有很小的差异(apt-get等不同的包装)。这意味着我需要经常将master重新绑定到该分支,并确保手动将更改合并到ci-config。

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

我想我可以解决两个分支之间的gitlab-config中的所有细微差别,这些差异取决于我所在的分支,除了docker镜像。

我看到两种不同的解决方案,以避免仅为CI目的维护这两个分支:1)让Gitlab维护者安装一个带有所需图像的VM,并注册一个特定的额外运行器,或2)使用master上的预定管道-branch我可以将图像名称作为参数传递。

解决方案1)对我来说似乎是最干净的,但是不在我的手中(并且仍然需要对gitlab-ci配置中的变量进行特殊的外壳/概括)。还有另一种方法可以在一个项目中运行多个gitlab-ci配置而不会有太多麻烦吗?

答案

嗯,还有第三种选择,但根据您的测试次数,它可能不是更清洁。 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-CI以获取两个不同的Docker镜像的主要内容,如果未能解决你的问题,请参考以下文章

gitlab-ci配置疑难备忘

获取使用 .gitlab-ci.yml 运行的 Windows Docker 容器

GitLab-CI 在管道中获取 pom 版本

无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建

如何从 .net 项目文件中获取 gitlab-ci.yml 文件中的项目版本?

Gitlab-CI/CD