首页 > 解决方案 > 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 过程中。显然,它们不是。

解决这个问题的最佳选择是什么?

标签: dockergocontinuous-integrationgitlab

解决方案


我的回答假设您将 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 文档进行身份验证中了解更多信息。


推荐阅读