Несколько изображений докеров в.gitlab-ci.yml

Вот моя проблема с GitLab и его интегрированным сервисом CI. У меня есть текущий GitLab 8.1. и gitlabci-multi-runner (0.6.2) с поддержкой Docker. После расширения ubuntu: точное изображение, чтобы включить git и build-essentials (теперь называемый точным: 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 чтобы поддержать это?

Ответ 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: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

Ответ 2

Вы можете использовать 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