Gitlab-runner local build – 从非TTY设备login
我试图在Linux上使用gitlab-runner在本地构build项目。
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"
不幸的是,我的尝试结束与“dockerlogin”的错误不能够执行从非TTY设备的交互式login。
$ 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
我的问题是有人偶然发现这个问题,以及如何成功地执行构build?
您很可能没有为您正在处理的项目指定variables$CI_JOB_TOKEN
和$CI_REGISTRY
。 请注意,variables不会共享 ,只能为每个项目设置!
这也是你遇到错误信息的原因
“标志需要一个参数:”p“in -p”
当您尝试执行没有引号的$CI_JOB_TOKEN
login时, 这是正确的方式 ,否则$CI_JOB_TOKEN
不会被识别为variables,但它只是一个由两个引号组成的string,一个美元符号和字符序列“CI_JOB_TOKEN” 。
假设你的variables没有设置,你尝试执行命令
docker login -u "gitlab-ci-token" -p $CI_JOB_TOKEN $CI_REGISTRY
variables被评估,你的命令看起来像这样:
docker login -u "gitlab-ci-token" -p
-p
标志后面没有密码,因此docker试图初始化交互式login。
您可以通过在您的.gitlab-ci.yml echo $CI_JOB_TOKEN
中包含命令echo $CI_JOB_TOKEN
来尝试输出variables来validation这一点