Docker + GitLab CI - 成功测试后将图像标记为“最新”

NoM*_*Mad 1 gitlab docker gitlab-ci

我正在尝试在 GitLab-CI 中的我的私有注册表上标记自动构建的 Docker 映像,但“发布”作业失败并显示: Error response from daemon: No such image: dev.skibapro.de:5050/dransfeld/dockerci-test:v0.4

这是我的.gitlab-ci.yml,构建和测试作业运行没有错误,并且在管道运行后我的注册表中出现了 docerci-test:v0.4。

image: docker:stable
variables:
  DOCKER_DRIVER: overlay2
  IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME

services:
  - docker:dind

stages:
  - build
  - test
  - release

before_script:
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

build:
  only:
    - tags
  stage: build
  script:
  - docker build -t $IMAGE_TAG -f docker/Dockerfile .
  - docker push $IMAGE_TAG

test:
  only:
    - tags
  stage: test
  script:
  - docker run $IMAGE_TAG /usr/local/bin/test.sh

release:
  only:
    - tags
  stage: release
  script:
  - docker tag $IMAGE_TAG "$CI_REGISTRY_IMAGE:latest"
Run Code Online (Sandbox Code Playgroud)

这是我在作业日志中遇到的错误:

$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
$ docker tag $IMAGE_TAG "$CI_REGISTRY_IMAGE:latest"
Error response from daemon: No such image: dev.skibapro.de:5050/dransfeld/dockerci-test:v0.4
ERROR: Job failed: exit code 1
Run Code Online (Sandbox Code Playgroud)

我不知道当“发布”阶段运行时图像还不存在,或者如果我要求 docker 做一些它不能做的事情......我希望最新的标签只在测试阶段成功完成。

NoM*_*Mad 5

尽管 Docker 似乎支持在远程注册表中标记镜像(将远程标记添加到 docker 镜像),但 GitLab 需要先从远程注册表中拉取镜像。来自 GitLab 的博客 ( https://about.gitlab.com/2016/05/23/gitlab-container-registry/ )

release-image:
  stage: release
  script:
    - docker pull $CONTAINER_TEST_IMAGE
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
    - docker push $CONTAINER_RELEASE_IMAGE
Run Code Online (Sandbox Code Playgroud)