6

我正在使用 AWS ECR 托管私有 Dockerfile 映像,并且我想在 GitLab CI 中使用它。

根据文档,我需要设置 docker-credential-ecr-login 来获取私有图像,但我不知道如何做。那是我的 .gitlab-ci 文件:

image: 0222822883.dkr.ecr.us-east-1.amazonaws.com/api-build:latest

tests:
  stage: test
  before_script:
    - echo "before_script"
    - apt install amazon-ecr-credential-helper
    - apk add --no-cache curl jq python py-pip
    - pip install awscli
  script:
    - echo "script"
    - bundle install
    - bundle exec rspec
  allow_failure: true # for now as we do not have tests

谢谢你。

4

5 回答 5

3
于 2020-01-11T00:00:32.457 回答
0

我认为您在此案中存在某种逻辑错误。image在构建配置中是 CI 脚本运行器映像,而不是您构建和部署的映像。

我认为您在任何情况下都不必使用它,因为它只是一个具有实用程序和与 GitLab CI 等的连接的图像。该图像通常不应该与您的项目有任何依赖关系。

请检查像这样的示例https://gist.github.com/jlis/4bc528041b9661ae6594c63cd2ef673c以更清楚地了解如何以正确的方式进行操作。

于 2020-01-06T19:03:16.417 回答
0

我们有一个类似的设置,我们需要基于 ECR 上托管的图像运行 CI 作业。要遵循的步骤:-

  • 在此处遵循本指南>> https://github.com/awslabs/amazon-ecr-credential-helper

  • 如果您使用的是“Amazon Linux 2”,则上述链接的要点是

    sudo amazon-linux-extras 启用 docker

    sudo yum install amazon-ecr-credential-helper

  • 在 VI 编辑器中打开 gitlab 运行器上的 ~/.docker/config.json

  • 将此代码粘贴到 ~/.docker/config.json

    {“credHelpers”:{“aws_account_id.dkr.ecr.region.amazonaws.com”:“ecr-login”}}

  • 源〜/ .bashrc

  • systemctl 重启泊坞窗

  • 还从您的 GitLab>>CI/CD>> 变量中删除 DOCKER_AUTH_CONFIG 的任何引用

而已

于 2020-11-02T18:58:06.263 回答
0

来自 GitLab 文档。为了与您的 AWS 账户交互,GitLab CI/CD 管道需要在您的 GitLab 设置中的 Settings > CI/CD > Variables 下定义 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。然后添加到您的之前脚本:

image: 0222822883.dkr.ecr.us-east-1.amazonaws.com/api-build:latest

tests:
  stage: test
  before_script:
    - echo "before_script"
    - apt install amazon-ecr-credential-helper
    - apk add --no-cache curl jq python py-pip
    - pip install awscli
    - $( aws ecr get-login --no-include-email )
  script:
    - echo "script"
    - bundle install
    - bundle exec rspec
  allow_failure: true # for now as we do not have tests

此外,您的错字是awscli,而不是awsclir。然后添加构建、测试并相应地推送。

于 2020-01-06T18:40:19.320 回答
0

我使用 gitlab runner 的 docker executor 模式遇到了同样的问题。

SSH 到 EC2 实例显示docker-credential-ecr-login存在于/usr/bin/. 要将它传递给容器,我必须将此包安装到 gitlab runner 容器。

gitlab-runner register -n \
--url '${gitlab_url}' \
--registration-token '${registration_token}' \
--template-config /tmp/gitlab_runner.template.toml \
--executor docker \
--tag-list '${runner_name}' \
--description 'gitlab runner for ${runner_name}' \
--docker-privileged \
--docker-image "alpine" \
--docker-disable-cache=true \
--docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
--docker-volumes "/cache" \
--docker-volumes "/usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login" \
--docker-volumes "/home/gitlab-runner/.docker:/root/.docker"

有关此线程的更多信息:https ://gitlab.com/gitlab-org/gitlab-runner/-/issues/1583#note_375018948

于 2020-07-07T13:40:26.347 回答