繁体   English   中英

使用 Docker 配置 bitbucket 管道以连接到 AWS

[英]Configuring bitbucket pipelines with Docker to connect to AWS

我正在尝试设置 Bitbucket 管道以部署到 ECS,如下所示: https ://confluence.atlassian.com/bitbucket/deploy-to-amazon-ecs-892623902.html

这些说明说明了如何推送到 Docker 集线器,但我想将映像推送到 Amazon 的映像存储库。 我在我的 Bitbucket 参数列表中设置了 AWS_SECRET_ACCESS_KEY 和 AWS_ACCESS_KEY_ID,我可以毫无问题地在本地运行这些命令(在 ~/.aws/credentials 中定义的密钥)。 但是,我不断收到错误“没有基本的身份验证凭据”。 我想知道它是否以某种方式无法识别变量。 这里的文档:http: //docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html说:

AWS CLI 使用提供程序链在多个不同位置查找 AWS 凭证,包括系统或用户环境变量和本地 AWS 配置文件。 所以我不确定为什么它不起作用。 我的 bitbucket 管道配置是这样的(我没有包含任何不必要的内容):

      - export IMAGE_NAME=$AWS_REPO_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/my/repo-name:$BITBUCKET_COMMIT
      # build the Docker image (this will use the Dockerfile in the root of the repo)
      - docker build -t $IMAGE_NAME .
      # authenticate with the AWS repo (this gets and runs the docker login command)
      - eval $(aws ecr get-login --region $AWS_DEFAULT_REGION)
      # push the new Docker image to the repo
      - docker push $IMAGE_NAME

有没有办法指定 aws ecr get-login 使用的凭据? 我什至试过这个,但它不起作用:

      - mkdir -p ~/.aws
      - echo -e "[default]\n" > ~/.aws/credentials
      - echo -e "aws_access_key_id = $AWS_ACCESS_KEY_ID\n" >> ~/.aws/credentials
      - echo -e "aws_secret_access_key = $AWS_SECRET_ACCESS_KEY\n" >> ~/.aws/credentials

谢谢

我使用另一种方法来构建 Docker 映像并将其推送到不需要环境变量的 AWS ECR:

image: amazon/aws-cli
options:
  docker: true
oidc: true
aws:
  oidc-role: arn:aws:iam::123456789012:role/BitBucket-ECR-Access

pipelines:
  default:
    - step:
        name: Build and push to ECR
        script:
          - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
          - docker build -t 123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage:0.0.1 .
          - docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage:0.0.1

您需要更新角色 ARN 以匹配您在 AWS IAM 控制台中创建的具有足够权限的角色。

尝试这个:

bitbucket-pipeline.yml

pipelines:
  custom:
    example-image-builder:
      - step:
          image: python:3
          script:
            - export CLONE_ROOT=${BITBUCKET_CLONE_DIR}/../example
            - export IMAGE_LOCATION=<ENTER IMAGE LOCATION HERE>
            - export BUILD_CONTEXT=${BITBUCKET_CLONE_DIR}/build/example-image-builder/dockerfile
            - pip install awscli
            - aws s3 cp s3://example-deployment-bucket/deploy-keys/bitbucket-read-key .
            - chmod 0400 bitbucket-read-key
            - ssh-agent bash -c 'ssh-add bitbucket-read-key; git clone --depth 1 git@bitbucket.org:example.git -b master ${CLONE_ROOT}'
            - cp ${CLONE_ROOT}/requirements.txt ${BUILD_CONTEXT}/requirements.txt
            - eval $(aws ecr get-login --region us-east-1 --no-include-email)
            - docker build --no-cache --file=${BUILD_CONTEXT}/dockerfile --build-arg AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} --build-arg AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} --tag=${IMAGE_LOCATION} ${BUILD_CONTEXT}
            - docker push ${IMAGE_LOCATION}

options:
  docker: true

dockerfile

FROM python:3
MAINTAINER Me <me@me.me>
COPY requirements.txt requirements.txt
ENV DEBIAN_FRONTEND noninteractive
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
RUN apt-get update && apt-get -y install stuff
ENTRYPOINT ["/bin/bash"]

我的时间不多了,所以现在我提供的不仅仅是你问题的答案。 但这将是一个足够好的模板来工作。 如果有任何您不明白的行,请在评论中提出问题,我将编辑答案。

我遇到过同样的问题。 该错误主要是由于旧版本的 awscli。 您需要将 docker 映像与更新的 awscli 一起使用。 对于我的项目,我使用linkmobility/maven-awscli

  1. 您需要在 Bitbucket 中设置环境变量

  2. 对管道的小改动

图片:Docker-Image-With-awscli

  • eval $(aws ecr get-login --no-include-email --region ${AWS_DEFAULT_REGION} )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM