猿问

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 过程中。显然,事实并非如此。


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


慕森卡
浏览 112回答 1
1回答

临摹微笑

我的回答假设您使用 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是一个临时令牌,仅在您的工作期间有效。
随时随地看视频慕课网APP

相关分类

Go
我要回答