$CI_BUILD_TOKEN doesn't allow to push to container registry if repo name is the same as group name
Having this setup at .gitlab-ci.yml
for repo test
in test
group (please note the same name for repo and group)
image: docker:latest
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- echo "CONTAINER_TEST_IMAGE=$CONTAINER_TEST_IMAGE"
- echo "CONTAINER_RELEASE_IMAGE=$CONTAINER_RELEASE_IMAGE"
variables:
CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_BUILD_REF_NAME
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
stage: prebuild
script:
- docker build --pull -t $CONTAINER_TEST_IMAGE .
- docker push $CONTAINER_TEST_IMAGE
gives the following output:
Running with gitlab-ci-multi-runner 1.4.2 (bcc1794)
Using Docker executor with image docker:latest ...
Pulling docker image docker:latest ...
...
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
Login Succeeded
$ echo "CONTAINER_TEST_IMAGE=$CONTAINER_TEST_IMAGE"
CONTAINER_TEST_IMAGE=registry.example.com/test/test:master
$ echo "CONTAINER_RELEASE_IMAGE=$CONTAINER_RELEASE_IMAGE"
CONTAINER_RELEASE_IMAGE=registry.example.com/test/test:latest
$ docker build --pull -t $CONTAINER_TEST_IMAGE .
...
$ docker push $CONTAINER_TEST_IMAGE
The push refers to a repository [registry.example.com/test/test]
f30166827568: Preparing
...
cb28dbff7968: Waiting
...
unauthorized: authentication required
ERROR: Build failed: exit code 1
Having the same configuration at .gitlab-ci.yml
for repo foo
in test
group gives green output:
Running with gitlab-ci-multi-runner 1.4.2 (bcc1794)
Using Docker executor with image docker:latest ...
Pulling docker image docker:latest ...
...
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
Login Succeeded
$ echo "CONTAINER_TEST_IMAGE=$CONTAINER_TEST_IMAGE"
CONTAINER_TEST_IMAGE=registry.example.com/test/foo:master
$ echo "CONTAINER_RELEASE_IMAGE=$CONTAINER_RELEASE_IMAGE"
CONTAINER_RELEASE_IMAGE=registry.example.com/test/foo:latest
$ docker build --pull -t $CONTAINER_TEST_IMAGE .
...
$ docker push $CONTAINER_TEST_IMAGE
The push refers to a repository [registry.example.com/test/foo]
30f8dd4fbaf4: Preparing
...
ef855ec71179: Waiting
...
30f8dd4fbaf4: Pushed
...
master: digest: sha256:e2d7015247e7b5c689a1eaefdf6fd5952e16602c33fc3d243f3d4dbc63d57624 size: 1575
Build succeeded
When removed docker login
line from .gitlab-ci.yml
and added volumes = ["/root/.docker/config.json:/root/.docker/config.json:ro"]
at /etc/gitlab-runner/config.toml
on successfully logined at GitLab's Container Registry host everything works fine:
Running with gitlab-ci-multi-runner 1.4.2 (bcc1794)
Using Docker executor with image docker:latest ...
Pulling docker image docker:latest ...
...
$ echo "CONTAINER_TEST_IMAGE=$CONTAINER_TEST_IMAGE"
CONTAINER_TEST_IMAGE=registry.example.com/test/test:master
$ echo "CONTAINER_RELEASE_IMAGE=$CONTAINER_RELEASE_IMAGE"
CONTAINER_RELEASE_IMAGE=registry.example.com/test/test:latest
$ docker build --pull -t $CONTAINER_TEST_IMAGE .
...
$ docker push $CONTAINER_TEST_IMAGE
The push refers to a repository [registry.example.com/test/test]
f30166827568: Preparing
...
cb28dbff7968: Waiting
...
f30166827568: Pushed
...
testing: digest: sha256:2e203290df18f47fefc202ccb897a970b528a0b1520c9f11d64bd56bef289e19 size: 3451
Build succeeded
The only reason for this behavior I can see here is the same name for repo and group.
GitLab 8.11.0
GitLab Shell 3.4.0
GitLab Workhorse 0.7.8