在项目上运行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.yml 运行的 Windows Docker 容器
无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建