首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gitlab-runner本地构建-从非TTY设备登录

Gitlab-runner本地构建-从非TTY设备登录
EN

Stack Overflow用户
提问于 2017-04-06 15:27:53
回答 12查看 82.3K关注 0票数 67

我正尝试在Linux上使用gitlab-runner在本地构建我的项目。

代码语言:javascript
复制
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"

不幸的是,我的尝试以"docker login“不能从非TTY设备执行交互式登录的错误而结束。

代码语言:javascript
复制
$ 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 

我的问题是,有没有人偶然发现了这个问题,以及如何成功地完成构建?

EN

回答 12

Stack Overflow用户

发布于 2018-04-19 20:12:34

可能与这里的问题没有关联,但一些人可能会遇到完全相同的消息,当尝试从Windows上的Linux类似终端,如Git bashDocker quickstart终端,甚至Cygwindocker login

这里的诀窍是使用winpty docker login

票数 70
EN

Stack Overflow用户

发布于 2017-05-09 23:54:25

很可能您没有为您正在处理的项目指定变量$CI_JOB_TOKEN$CI_REGISTRY。请注意,变量不是共享的,仅针对每个项目进行设置!

这也是您遇到错误消息的原因

“标志需要一个参数:-p中的'p‘”

当您尝试在没有引号的情况下进行docker登录时,是正确的方式,因为否则$CI_JOB_TOKEN不会被识别为变量,而只是由两个引号、一个美元符号和字符序列"CI_JOB_TOKEN“组成的字符串。

假设您没有设置变量,并且您尝试执行以下命令

代码语言:javascript
复制
docker login -u "gitlab-ci-token" -p $CI_JOB_TOKEN $CI_REGISTRY

对变量求值后,您的命令看起来就像这样:

代码语言:javascript
复制
docker login -u "gitlab-ci-token" -p

-p标志后面没有密码,因此docker会尝试初始化交互式登录。

可以通过在.gitlab-ci.yml中包含命令echo $CI_JOB_TOKEN时尝试输出变量来验证这一点

票数 41
EN

Stack Overflow用户

发布于 2018-06-26 20:28:30

我遇到了同样的问题,但原因与这里列出的原因不同。

这是我的gitlab-ci命令:

代码语言:javascript
复制
docker login "${AZURE_ACR_URL}" -u "${AZURE_ACR_ACCOUNT}" -p "${AZURE_ACR_PASSWORD}"

我的管道在主分支上运行得很好,但在其他分支上就不行了。为什么?因为我通过设置/ci_cd特性定义了AZURE_ACR_PASSWORD变量,并带有"protected“标志。在阅读了这个受保护标志的含义之后,我理解了为什么在命令中看不到我的AZURE_ACR_PASSWORD变量:

此变量将仅传递给在受保护分支和标记上运行的管道

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43248455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档