我即将使用Golang软件在Gitlab中实现完整的(无需测试阶段)持续集成。
当我尝试在该docker login
步骤中构建Docker映像时,它失败。
这是我的.gitlab-ci.yml
:
stages:
- build
variables:
REGISTRY: registry.gitlab.com
GO_PROJECT: mysoftware
build_golang_binary:
image: golang:latest
stage: build
before_script:
- mkdir -p ${GOPATH}/src/${GO_PROJECT}
- cp -r ${CI_PROJECT_DIR}/* ${GOPATH}/src/${GO_PROJECT}/
- cd ${GOPATH}/src/${GO_PROJECT}
- go get
script:
- cd ${GOPATH}/src/${GO_PROJECT}
- go build
build_docker_image:
image: docker:latest
stage: build
script:
- docker login $REGISTRY
- docker build --no-cache -t ${REGISTRY}/me/${GO_PROJECT} .
- docker push ${REGISTRY}/me/${GO_PROJECT}
这是我得到的错误: $ docker login $REGISTRY Error: Cannot perform an interactive login from a non TTY device
我认为凭证将提供给此CI流程。显然,它们没有。
解决此问题的最佳选择是什么?
我的回答假设你使用GitLab.com两个CI和注册(根据registry.gitlab.com
你的是.gitlab-ci.yml
上面的例子。
您可以利用GitLab CI作业中可用的几个环境变量来对GitLab注册中心进行身份验证:
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
该$CI_REGISTRY_PASSWORD
是一个短暂的令牌仅适用于你的工作的持续时间。您可以在验证到Container Registry文档中了解更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句