Gitlab:构建docker容器,然后将其用于编译

时间:2018-10-01 12:09:11

标签: docker gitlab-ci gitlab-ci-runner

这里是我的.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命令时,列出的创建映像将列出。但是第二项工作失败,并显示以下错误:

  

错误:作业失败:来自守护程序的错误响应:拒绝对compilger_image_v0进行拉式访问,存储库不存在或可能需要'docker login'(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 个答案:

答案 0 :(得分:1)

阶段编译尝试提取图像compiler_image_v0。该映像仅临时存在于阶段containerize的docker容器中。您在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

这将覆盖每个构建中的映像。但是您可以添加一些版本控制。