docker - Golang 和 Gitlab 持续集成
问题描述
我接近实现在 Gitlab 中与 Golang 软件的完整(无测试阶段)持续集成。
当我尝试在该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 文档进行身份验证中了解更多信息。
推荐阅读
- c# - 无法访问映射上的变量(C#)
- elisp - 符号的函数定义为 void: after-load'
- javascript - 在 cypress 中使用机会插件
- java - 事务性注释会降低 jpa 实现后的性能
- javascript - 如何使用 JSON.parse() 解析多个对象
- angular - Angler 5:将类添加到选中复选框的特定索引 LI
- react-native - 反应原生中的 BoxShadow
- node.js - 无法读取未定义的属性“标题”
- arrays - 我有一个图像列表,图像形状是 (50,50,3) 。如何转换为形状的 numpy.ndarray (19929,50,50,3)
- javascript - 第一个标志淡出,但第二个标志没有淡入......向下滚动。我错过了什么?