Golang和Gitlab持续集成

时间:2019-07-19 14:56:10

标签: docker go continuous-integration gitlab

我即将使用 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流程。显然,它们不是。

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

1 个答案:

答案 0 :(得分:1)

我的答案假设您同时使用CI和注册表的GitLab.com(基于以上示例中的registry.gitlab.com中的.gitlab-ci.yml

您可以利用GitLab CI作业中可用的几个环境变量来对GitLab注册中心进行身份验证:

  • docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

$CI_REGISTRY_PASSWORD是临时令牌,仅在您的工作期间有效。您可以在Authenticating to the Container Registry documentation中了解更多信息。