Gitlab CI试图找到最新的'来自公共码头中心的图像

时间:2018-01-22 12:11:04

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

我有一个elixir项目的.gitlab-ci.yml任务:

image: docker:latest
services:
    - docker:dind

stages:
  - build
  - test
  - release
  - deploy

variables:
  TEMP_IMAGE: registry.gitlab.com/farmmix/homepage/farmmix_homepage:$CI_COMMIT_SHA

before_script:
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com 

build:
  stage: build
  script:
    - cd src
    - docker build --pull -t $TEMP_IMAGE .
    - docker push $TEMP_IMAGE

test:
  stage: test
  variables:
    DB_DATABASE: test
    DB_USERNAME: postgres
    DB_PASSWORD: postgres
    DB_URL: postgres
  script:
    - echo $TEMP_IMAGE
    - docker pull $TEMP_IMAGE
    - docker pull postgres:9.5-alpine
    - docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine
    - docker run --link postgres $TEMP_IMAGE ecto.create ecto.migrate test

$TEMP_IMAGE是在之前的build任务中创建的现有图片。

如果我使用gitlab-runner exec docker --docker-privileged test在本地运行它,它可以正常工作。

然而,gitlab runner给了我以下内容:

... AFTER INITIALIZATION ...
Skipping Git submodules setup
$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
$ echo $TEMP_IMAGE 
registry.gitlab.com/farmmix/homepage/farmmix_homepage:b0c30097a320933f7d5390d7037960e34d2ef7d
$ docker pull $TEMP_IMAGE
b0c30097a320933f7d5390d7037960e34d2ef7d0: Pulling from farmmix/homepage/farmmix_homepage
605ce1bd3f31: Pulling fs layer
...
e0c7f5df971a: Pull complete
Digest: sha256:ce7a1bf2378628902e171a22ee386af6c79e8d2340b6241ab70e83173e32ce28
Status: Downloaded newer image for registry.gitlab.com/farmmix/homepage/farmmix_homepage:b0c30097a320933f7d5390d7037960e34d2ef7d0
$ docker pull postgres:9.5-alpine
9.5-alpine: Pulling from library/postgres
550fe1bea624: Pulling fs layer
04bf519c70df: Pulling fs layer
...
0dca1c6b5036: Pull complete
Digest: sha256:fc3b8fcc8ba568492ce89fd8723a949f586e2919d7884b9b1d8064237ba105d7
Status: Downloaded newer image for postgres:9.5-alpine
$ docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine
Unable to find image 'of:latest' locally
docker: Error response from daemon: pull access denied for of, repository does not exist or may require 'docker login'.
See 'docker run --help'.
ERROR: Job failed: exit code 125

我甚至无法在互联网上找到此'of:latest'错误的任何内容。我尝试在没有docker run参数的情况下运行-e命令,但是出现了同样的错误,这并不是因为env vars造成了任何麻烦。

我的想法已经不多了。你们中的任何一个人都怀疑解决方案可能是什么?

编辑:添加了完整的.gitlab-ci.yml内容

EDIT2:添加了echo和作业输出

1 个答案:

答案 0 :(得分:1)

$ docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine
Unable to find image 'of:latest' locally
docker: Error response from daemon: pull access denied for of, repository does not exist or may require 'docker login'.

你的一个变量几乎肯定包含字符串“of”。您可以通过添加一行来测试:

echo docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine

首先看看它正在尝试运行什么。对于变量,引用它们是一种很好的做法,以避免出现特殊字符或空格的任何问题:

docker run --name postgres -e "POSTGRES_DB=$DB_DATABASE" -e "POSTGRES_USER=$DB_USERNAME" -e "POSTGRES_PASSWORD=$DB_PASSWORD" -d postgres:9.5-alpine