使用 bitbucket-pipelines.yml 将文件复制到构建的 Docker 映像中?

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

我有一个 bitbucket-pipelines.yml,如下所示:

definitions:
  steps:
  - step: &docker_build
    name: "Docker Build"
    services:
      - docker
    caches:
      - pip
    script:
      - cd .
      - export IMAGE_NAME_EXTENSION="latest"
      - VERSION=$(<version.txt)
      - docker build -t $IMAGE_NAME .
      - docker save --output tmp-image.docker $IMAGE_NAME
    artifacts:
      - tmp-image.docker


pipelines:
  branches:
   master:
   - step: *docker_build

我的 Dockerfile 如下所示:

FROM python:3.8-slim

RUN apt-get -y update && apt-get install -y --no-install-recommends \
     libgl1-mesa-glx \
     libglib2.0-0 \
     wget \
     git \
     python3 \
     ca-certificates \
     gcc \
     libc6-dev \
&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY src/some_code/ .
COPY config/ .
CMD ["python3","./abc.py"]

在我的代码中,我使用 Paho MQTT 客户端。我的问题是,当前 MQTT 客户端的证书当前是通过“config”文件夹内我的存储库根级别的代码签入的。 Paho MQTT 客户端自动从那里读取它们。我想将这些证书从我的存储库中移出。我在 AWS Secrets Manager 中复制了我的证书,并且可以在 bitbucket-pipelines.yml 运行时获取它们。但是,现在我想将这些证书复制到我已经构建的 Docker 映像的“config”文件夹中。

我在这里尝试了几件事:

  1. 我尝试在 bitbucket-pipelines.yml 中构建 Docker 映像后运行它,然后尝试使用 Python Shutil 复制文件 - 问题:一旦在 bitbucket-pipelines.yml 中完成该步骤,Docker 映像就会崩溃
  2. 尝试使用Python运行它。问题:我在 bitbucket-pipelines 中没有容器名称。

有人可以指出我正确的文档吗?我尝试查找,但找不到适合我的用例的帖子。

docker bitbucket bitbucket-pipelines
1个回答
0
投票

我能够像这样实现这一目标:

  1. 将密钥存储在 AWS Secrets Manager 中。

  2. 将此行添加到 Docker(确保您的存储库在根级别没有配置文件夹 - 或考虑它并相应地更改代码)

    COPY config/ .
    
  3. 在管道中使用 AWS CLI 获取它们并构建 Docker:

    - SECRET_ROOT_CA=$(aws secretsmanager get-secret-value --secret-id root-CA --region us-west-1)
    - echo "$SECRET_ROOT_CA" | jq -r '.SecretString' > config/root-CA.pem
    - SECRET_KEYFILE=$(aws secretsmanager get-secret-value --secret-id keyfile --region us-west-1)
    - echo "$SECRET_KEYFILE" | jq -r '.SecretString' > config/results.pem.key
    - SECRET_CERTFILE=$(aws secretsmanager get-secret-value --secret-id certfile --region us-west-1)
    - echo "$SECRET_CERTFILE" | jq -r '.SecretString'> config/bt2-results.pem.crt
    
    # Building Docker
    - cd .
    - export IMAGE_NAME_EXTENSION="latest"
    - VERSION=$(<version.txt)
    - docker build -t $IMAGE_NAME .
    - docker save --output tmp-image.docker $IMAGE_NAME
    
    artifacts:
      - config/**
      - tmp-image.docker
    

执行此操作会获取 MQTT 所需的证书和所有机密,然后将其置于 paho_mqtt 客户端需要的级别。

© www.soinside.com 2019 - 2024. All rights reserved.