.gitlab-ci.yml 中有多个 Docker 图像

Multiple Docker images in .gitlab-ci.yml

这是我使用 GitLab 及其集成的 CI 服务设置的问题。我有一个当前的 GitLab 8.1。以及支持 Docker 的 gitlabci-multi-runner (0.6.2)。在扩展 ubuntu:precise 图像以包括 gitbuild-essentials(现在命名为 precise:base)后,我得到以下 .gitlab-ci.yml 运行:

image: precise:base
before_script:
   - apt-get install --yes cmake libmatio-dev libblas-dev libsqlite3-dev libcurl4-openssl-dev
   - apt-get install --yes libarchive-dev liblzma-dev

build:
  script:
    - mkdir build/
    - cd build
    - cmake -D CMAKE_BUILD_TYPE=Debug ../
    - make

现在我的问题是如何在不同的图像上包含更多作业?因为我需要检查代码是否可以在 Ubuntu Precise、Ubuntu Trusty、CentOS 6、CentOS 7 等不同操作系统上编译(以及之后的工作)。为了减少工作,我认为最好的方法是提供不同的 Docker 图像作为基础。

现在的问题是 .gitlab-ci.yml 必须如何支持它?

你可以define the image to use per job

例如:

before_script:
   - apt-get install --yes cmake libmatio-dev libblas-dev libsqlite3-dev libcurl4-openssl-dev
   - apt-get install --yes libarchive-dev liblzma-dev

build:precise:
  image: precise:base
  script:
    - mkdir build/
    - cd build
    - cmake -D CMAKE_BUILD_TYPE=Debug ../
    - make

build:trusty:
  image: trusty:base
  script:
    - mkdir build/
    - cd build
    - cmake -D CMAKE_BUILD_TYPE=Debug ../
    - make

您可以使用 Anchors 使 .gitlab-ci.yml 更清楚。 (但这需要 GitLab 8.6 和 GitLab Runner v1.1.1。)

像这样:

before_script:
   - apt-get install --yes cmake libmatio-dev libblas-dev libsqlite3-dev libcurl4-openssl-dev
   - apt-get install --yes libarchive-dev liblzma-dev

.build_template: &build_definition
  script:
    - mkdir build/
    - cd build
    - cmake -D CMAKE_BUILD_TYPE=Debug ../
    - make

build:precise:
  image: precise:base
  <<: *build_definition

build:trusty:
  image: trusty:base
  <<: *build_definition