无法从Gitlab CI访问私有MySQL Docker镜像

时间:2018-07-29 13:37:27

标签: docker gitlab-ci dockerhub

我一直在尝试从Docker Hub存储库中将私有(自定义)MySQL映像作为服务引入gitlab-ci.yml管道。我添加了一个before_script,尝试使用我的用户名和密码(CI变量)登录dockerhub。失败的构建日志中没有输出提示是否成功登录Docker Hub,但我假设不是因为我的映像提取失败并显示以下消息(编辑:或者甚至从未尝试过,因为gitlab尝试获取服务运行它之前的脚本?):

存储库不存在或可能需要'docker login'(executor_docker.go:168:0s)

我正在使用共享运行器(因为我认为这是使用gitlab.com的唯一选择?) 我已经看到很多关于docker的gitlab ci令牌的提法,但是我没有找到说明如何简化此操作的文档。

我敢肯定,我在搜索中只是忽略了一些东西/不了解或没有找到合适的解决方案,因此如果我没有经验,就在此道歉,并在此先感谢您的帮助。

我的gitlab-ci(Maven变量是因为该项目的构建依赖于私有Maven存储库。数据库和Redis主机变量在运行时注入到我的应用程序中,因此它们知道指向哪个容器)

image: maven:3.5.0-jdk-8

before_script:
  - "docker login -u$DOCKER_USER -p$DOCKER_PASS" #pipeline variables

variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
  DATABASE_HOST: mysql
  REDIS_HOST: redis

services:
  - name: privaterepo/private-mysql-schema
    alias: mysql
  - name: redis:latest
    alias: redis

stages:
  - build

maven-build:
  stage: build
  script: "mvn $MAVEN_CLI_OPTS package -B"
  artifacts:
    paths:
      - target/*.jar

1 个答案:

答案 0 :(得分:9)

第一件事是设置GitLab CI,以便在需要时提供私有Docker注册表的凭据。为此,您应该遵循specific section in docs,以得到完整的答案

  1. 使用docker login获取Docker注册表URL,用户名和密码 或其他方式(我不得不花一些时间来找出注册表 docker hub)
  2. 在GitLab CI变量部分中定义DOCKER_AUTH_CONFIG varialbe,

{ "auths":{ "registry.hub.docker.com":{ "auth":"xxxxxxxxxxxxxxxxxxxxxxxxxxxx" // base 64 encoded username:password } } }

  1. image: registry.hub.docker.com/ruwanka/helloworld:0.1中声明图像/服务.gitlab-ci.yml

这应该完全满足拉取图像的要求。 another section in docs列出了允许服务列表的运行程序要求。如果未指定任何内容,那应该没问题,如果不起作用,您可能需要对其进行调整。

最终Yaml如下图

image: registry.hub.docker.com/ruwanka/helloworld:0.1

build:
  script:
   - echo "hello"
# more steps   
services:
  - registry.hub.docker.com/ruwanka/helloworld:0.1

gitlab作业日志的片段

enter image description here