【问题标题】:Configuring bitbucket pipelines with Docker to connect to AWS使用 Docker 配置 bitbucket 管道以连接到 AWS
【发布时间】:2017-11-06 21:17:51
【问题描述】:

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

这些说明说明了如何推送到 Docker 中心,但我想将映像推送到亚马逊的映像存储库。我在我的 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

谢谢

【问题讨论】:

  • 这个命令单独返回什么? aws ecr get-login --region $AWS_DEFAULT_REGION
  • @Robert aws ecr get-login --region $AWS_DEFAULT_REGION -> 用法:aws [options] [parameters] aws: error: argument command:无效选择,有效选择是:
  • 啊翻转我看到发生了什么,它使用的是来自 apt-get 的旧版本的 aws cli(没有 ecr,我在 mac 上也遇到了这个问题)。我需要不使用 apt-get 安装!谢谢@罗伯特!!
  • 永远欢迎!

标签: amazon-web-services docker amazon-ecs


【解决方案1】:

试试这个:

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"]

我的时间不多了,所以现在我提供的不仅仅是您问题的答案。但这将是一个足够好的模板来工作。有不明白的地方可以在cmets中提问,我会修改答案。

【讨论】:

  • 顺便说一句,将您的密钥放入 docker 映像中似乎存在重大安全风险
  • 你是绝对正确的。知道我现在所知道的,我永远不会选择这样做。
  • 我目前无法访问 Bitbucket Pipelines。任何人都知道需要更改什么,以便可以通过 docker secrets 和/或直接环境变量传递带有秘密的环境变量?
  • 最好在运行时通过 --env arg 执行此操作,或者让您的脚本/应用程序接口类似于(例如,我不知道您在什么环境中工作)AWS SM Parameter Store或 AWS 机密。但是 SO 不是一个讨论论坛,你应该做一些研究然后提出一个具体的问题。
  • 如果有人想做研究并对这个答案进行修改,请成为我的客人。这不是我目前感兴趣的领域。
【解决方案2】:

我有同样的问题。该错误主要是由于旧版本的 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} )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2020-06-09
    • 2019-03-31
    相关资源
    最近更新 更多