使用 AWS EB 和 Dockerrun-aws.json 的 Gitlab CI/CD 管道

问题描述 投票:0回答:1

我正在构建一个 gitlab ci/cd 管道,它将图像从我的 gitlab 容器注册表部署到我的 AWS EB。我当前的方法是使用 docker-compose 来拉取映像并构建容器,并使用 Dockerrun-aws.json 向 gitlab 容器注册表验证 AWS EB。 根据 AWS EB 文档,这应该是 Dockerrun-aws.json 的格式

{
 "AWSEBDockerrunVersion": "3",
 "Authentication": {
 "bucket": "DOC-EXAMPLE-BUCKET",
 "key": "mydockercfg"
 }
}   

我关心的是我应该在 mydockercfg 文件中包含什么内容。目前,我正在使用以下 Dockerrun-aws.json 文件,

{
  "AWSEBDockerrunVersion": "3",
  "Authentication": {
  "bucket": "$AWS_S3_BUCKET",
  "key": "auth.json"
  }
}      

和 auth.json 文件

{
  "auths":{
  "$CI_REGISTRY":{
     "auth":"$DEPLOY_TOKEN"
    }
  }
}

这是我的 gitlab-ci.yml 文件,

deploy:
   image:
     name: amazon/aws-cli:latest
     entrypoint: [""]  

 stage: deploy 

 script:
    - echo "Deployment starts"
    - yum install -y gettext

    - export DEPLOY_TOKEN=$(echo $GITLAB_REGISTRY_TOKEN | tr -d "\n" | base64)
    - envsubst < auth.json > aws-auth.json
    - cat aws-auth.json

    - envsubst < Dockerrun.aws.json > aws-Dockerrun.aws.json
    - cat aws-Dockerrun.aws.json

    - aws s3 cp aws-auth.json s3://$AWS_S3_BUCKET/auth.json
    - aws s3 cp docker-compose.yml s3://$AWS_S3_BUCKET/dokcer-compose.yml
    - aws s3 cp aws-Dockerrun.aws.json s3://$AWS_S3_BUCKET/Dockerrun.aws.json
    - aws elasticbeanstalk create-application-version --application-name web-app --version-label $CI_PIPELINE_IID --source-bundle S3Bucket=$AWS_S3_BUCKET,S3Key=dokcer-compose.yml
   -  aws elasticbeanstalk update-environment --application-name web-app --version-label $CI_PIPELINE_IID --environment-name Web-app-env

但是当我运行此作业时,AWS EB 说禁止访问。我应该如何更改结构,以便 EB 可以从 gitlab 容器注册表中提取和部署映像

amazon-web-services docker gitlab
1个回答
0
投票

Elastic Beanstalk 正在尝试使用用户名和令牌访问容器注册表,但您仅发送令牌。

Deploy Token Configuration

需要添加

$GITLAB_REGISTRY_TOKEN
的用户名,然后生成base64编码。按照屏幕截图,该过程将如下所示:

AWS:$GITLAB_REGISTRY_TOKEN
© www.soinside.com 2019 - 2024. All rights reserved.