I'm trying to build my project locally using gitlab-runner on Linux.
docker-build:
stage: build
image: docker:latest
script:
- docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY # user "gitlab-ci-token" is automatically created by GitLab
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME" target/
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
Unfortunately my attempts end with error about "docker login" not being able to perform interactive login from non-TTY device.
$ gitlab-ci-multi-runner exec docker --docker-privileged docker-build
Running with gitlab-ci-multi-runner 1.11.1 (a67a225)
on ()
Using Docker executor with image docker:latest ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
Waiting for services to be up and running...
Pulling docker image docker:latest ...
Running on runner--project-1-concurrent-0 via vanqyard...
Cloning repository...
Cloning into '/builds/project-1'...
done.
Checking out 70187b2d as docker-basic-conf...
Skipping Git submodules setup
Checking cache for docker-build/docker-basic-conf...
Successfully extracted cache
$ docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY
Error: Cannot perform an interactive login from a non TTY device
ERROR: Job failed: exit code 1
FATAL: exit code 1
My question is has anybody stumbled upon this issue and how to succesfunlly perform build?
Reading how protected variables are working solved it for me. I need to perform this action inside a protected branch since I also protected my variables.
If you are not using a protected branch better remove protected variables and try again.
Although I dint get this error for git-lab, I got it while pulling a different image. The issue was with using git bash on windows, switch to power shell prompt and then try the following :
Try this.
docker login -u Username -p Password
It worked for me.
Most likely you did not specify the variables
$CI_JOB_TOKEN
and$CI_REGISTRY
for the project you are working on. Note that variables are not shared and are only set per project!That's also why you encounter the error message
when you try to do the docker login without the quotes, which is the right way because otherwise
$CI_JOB_TOKEN
is not recognized as a variable, but it is simply a string consisting of two quotes, a dollar sign and the sequence of chars "CI_JOB_TOKEN".Assuming your variables are not set and you try to execute the command
the variables are evaluated and your command essentially looks like that:
The
-p
flag is not followed by a password and for that reason docker tries to initialize an interactive login.You can verify this by trying to output your variables when you include the command
echo $CI_JOB_TOKEN
in your .gitlab-ci.ymlI had the same issue, but for a different cause than those already listed in here.
This is my gitlab-ci command:
My pipeline was running fine on the master branch, but not on other branches. Why? Because I defined the AZURE_ACR_PASSWORD variable via the settings/ci_cd feature, with the "protected" flag. After reading what this protected flag means I understood why my AZURE_ACR_PASSWORD variable could not be seen in the command:
Probably not linked to the problem here, but some people might encounter the exact same message when trying a
docker login
from a Linux like terminal on Windows such as Git bash or Docker quickstart terminal or even Cygwin.The trick here is to use
winpty docker login