【问题标题】:Using GitLab CI/CD with Docker Hub将 GitLab CI/CD 与 Docker Hub 一起使用
【发布时间】:2020-05-20 23:20:50
【问题描述】:

我们正在尝试使用 Docker Hub 来存储我们的 GitLab CI/CD 构建生成和使用的图像,但在使其正常工作时遇到了一些问题。

我已经成功地将 build 阶段中​​构建的映像推送到 Docker Hub,效果很好,但无法为 rspec 阶段再次拉下它。我收到以下错误:

错误:作业失败:来自守护进程的错误响应:foxsoft/zzz 的拉取访问被拒绝,存储库不存在或可能需要“docker login”:拒绝:请求的资源访问被拒绝(executor_docker.go:192:1s )

我假设这与我在尝试拉下图像时未正确获取登录凭据有关,但我不确定。我们将不胜感激您能提供的任何帮助。

这是我的配置:

before_script:
  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"

.ruby_base:
  image: ruby:2.5.5
  before_script:
    - ruby -v

.docker_base:
  image: docker:stable
  services:
    - docker:stable-dind
    - postgres:9.6
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
    CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD

stages:
  - build
  - test

build:images:
  extends: .docker_base
  stage: build
  script:
    - docker build -t $CONTAINER_TEST_IMAGE .
    - docker push $CONTAINER_TEST_IMAGE

test:rspec:
  before_script:
    - echo $CONTAINER_TEST_IMAGE
    - echo $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
  image: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  stage: test
  services:
    - postgres:9.6
  variables:
    POSTGRES_DB: zzz_test
    DB_HOST: postgres
  script:
    - bundle exec rake db:create RAILS_ENV=test
    - bundle exec rake db:schema:load RAILS_ENV=test
    - bundle exec rspec --format html --out rspec/index.html --format documentation

我还设置了以下环境变量

CI_REGISTRY_USER我的 docker hub 用户名 CI_REGISTRY_PASSWORD我的 docker hub 令牌 CI_REGISTRY_IMAGE 设置为 foxsoft/zzz(托管在 here - 虽然作为私人仓库,您将无法看到它)

谢谢。

【问题讨论】:

  • 你在 Gitlab CI/CD 变量上使用protected variable 吗?

标签: docker gitlab-ci dockerhub


【解决方案1】:

我已经通过在 CI/CD 设置中创建 DOCKER_AUTH_CONFIG 变量解决了这个问题(我认为),并将其设置为以下内容:

{
   "auths":{
      "index.docker.io":{
         "auth":"HASHED_USERNAME_AND_PASSWORD"
      }
   }
}

HASHED_USERNAME_AND_PASSWORD 值是通过在我的本地计算机上运行以下命令生成的:

echo -n "docker_hub_username:docker_hub_security_token" | base64

【讨论】:

  • 小心,base64 不是一个哈希,只是一个编码。给定您的base64 编码字符串,您可以轻松检索您的用户名/密码组合。您只需假设初始源编码,但 ASCII/UTF-8(在这种情况下也是如此)将是一个安全的选择。
  • 我认为这正是需要对其进行配置才能使其工作的方式。值得庆幸的是,该值设置为环境变量,因此无论如何它都不能公开访问。
猜你喜欢
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2020-02-02
  • 2021-08-19
  • 2021-12-22
  • 2020-02-02
  • 1970-01-01
相关资源
最近更新 更多