我有一个 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”文件夹中。
我在这里尝试了几件事:
有人可以指出我正确的文档吗?我尝试查找,但找不到适合我的用例的帖子。
我能够像这样实现这一目标:
将密钥存储在 AWS Secrets Manager 中。
将此行添加到 Docker(确保您的存储库在根级别没有配置文件夹 - 或考虑它并相应地更改代码)
COPY config/ .
在管道中使用 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 客户端需要的级别。