Gitlab: собрать докерский контейнер, затем использовать его для компиляции

Вот мой.gitlab-ci.yml

stages:
   - containerize
   - compile

build_image:
  image: docker
  stage: containerize
  script:
    - docker build -t compiler_image_v0 .

compile:
  image: compiler_image_v0
  stage: compile
  script:
    - make
  artifacts:
    when: on_success
    paths:
      - output/
    expire_in: 1 day

build_image работает правильно, созданное изображение отображается в списке при использовании docker images Команда на машине с бегунами. Но вторая работа терпит неудачу с ошибкой:

ОШИБКА: задание не выполнено: ответ от демона: отказано в доступе по запросу для compiler_image_v0, хранилище не существует или может потребоваться "вход в докер" (executor_docker.go:168:1s)

В чем дело?

Это мое Dockerfile

FROM ubuntu:18.04

WORKDIR /app

# Ubuntu packages
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install apt-utils subversion g++ make cmake unzip
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install libgtk2.*common libpango-1* libasound2* xserver-xorg
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install cpio
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install bash
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install autoconf automake perl m4

# Intel Fortran compiler
RUN mkdir /intel
COPY parallel_studio_xe_2018_3_pro_for_docker.zip  /intel
RUN cd /intel && unzip /intel/parallel_studio_xe_2018_3_pro_for_docker.zip
RUN cd /intel/parallel_studio_xe_2018_3_pro_for_docker && ./install.sh --silent=custom_silent.cfg
RUN rm -rf /intel

1 ответ

Решение

Этап компиляции пытается вытащить изображение compiler_image_v0, Это изображение существует только временно в контейнере докера сцены containerize, В вашем репозитории gitlab есть реестр контейнеров, и вы можете поместить встроенный образ в containerize этап, а затем потяните его в compile этап. Более того: вы должны предоставить полное имя вашего личного реестра gitlab. Я думаю, что dockerhub используется по умолчанию.

Вы можете изменить свой .gitlab.ci.yaml чтобы добавить команду push и использовать полностью именованное изображение:

stages:
   - containerize
   - compile

build_image:
  image: docker
  stage: containerize
  script:
    - docker build -t compiler_image_v0 .
    - docker push registry.gitlab.com/group-name/repo-name:compiler_image_v0

compile:
  image: registry.gitlab.com/group-name/repo-name:compiler_image_v0
  stage: compile
  script:
    - make
  artifacts:
    when: on_success
    paths:
      - output/
    expire_in: 1 day

Это перезаписывает изображение при каждой сборке. Но вы можете добавить некоторые версии.

Другие вопросы по тегам