python - DOCKER_BUILDKIT - 在构建期间从 github 操作传递令牌秘密
问题描述
我有一个使用twine发布到 Azure DevOps 工件的 pip 可安装包。
在我的构建映像中,我需要下载该软件包并使用pip
. 所以我需要对天蓝色的工件进行身份验证才能得到它。所以我正在使用artifacts-keyring来做到这一点
pip 可安装的 URL 是这样的:
https://<token>@pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/pypi/simple/ --no-cache-dir <package-name>
我正在尝试使用Docker BuildKit在构建期间传递令牌。我正在安装秘密并通过cat
命令替换获取它的值来使用它:
# syntax = docker/dockerfile:1.2
ENV ARTIFACTS_KEYRING_NONINTERACTIVE_MODE=true
RUN --mount=type=secret,id=azdevopstoken,dst=/run/secrets/azdevopstoken \
pip install --upgrade pip && \
pip install pyyaml numpy lxml artifacts-keyring && \
echo pip install -i https://"$(cat /run/secrets/azdevopstoken)"@pkgs.dev.azure.com/org>/<project>/_packaging/feed/pypi/simple/ --no-cache-dir package-name
当我运行时,它在我的工作站本地工作:(我的 src 文件,其中令牌是纯文本的,azdevopstoken.txt
在我的本地目录结构项目中)
DOCKER_BUILDKIT=1 docker image build --secret id=azdevopstoken,src=./azdevopstoken.txt --progress plain . -t my-image:tag
现在我从 GitHub 操作管道运行这个构建命令,我得到了这个输出:
Scould not parse secrets: [id=azdevopstoken,src=./azdevopstoken.txt]: failed to stat ./azdevopstoken.txt: stat ./azdevopstoken.txt: no such file or directory
Error: Process completed with exit code 1.
这是我的预期,因为我没有上传azdevopstoken.txt
文件,因为我不想在我的存储库中拥有它,因为我的令牌是纯文本的。
仔细阅读这里,我看到有一种加密秘密的解决方法,也许这可能是从我的 github 操作管道实现 buildkit 的一个很好的解决方案,但我认为这是我工作流程中的一个额外步骤,所以我不确定是否遵循这个选项与否。最重要的是,我已经在以--build-arg
这种方式构建时使用标志以旧方式传递了秘密:
ARG AZ_DEVOPS_TOKEN
ENV AZ_DEVOPS_TOKEN=$AZ_DEVOPS_TOKEN
RUN pip install --upgrade pip && \
pip install pyyaml numpy lxml artifacts-keyring && \
pip install -i https://$AZ_DEVOPS_TOKEN@pkgs.dev.azure.com/ORG/PROJECT/_packaging/feed/pypi/simple/ --no-cache-dir PACKAGE-NAME
作为我的 docker build 命令来自 GitHub 操作的这种方式:
docker image build --build-arg AZ_DEVOPS_TOKEN="${{ secrets.AZ_DEVOPS_TOKEN }}" . -t containerregistry.azurecr.io/my-image:preview
它工作得很好,问题是,我听说--build-arg
传递敏感信息不是一个安全的解决方案。尽管如此,我docker history
还是按照这个命令跑了,我看不到秘密暴露或类似的东西。
> docker history af-fem-uploader:preview-buildarg
IMAGE CREATED CREATED BY SIZE COMMENT
2eff105408c9 34 seconds ago RUN /bin/sh -c pip install pytest && pytest … 5MB buildkit.dockerfile.v0
<missing> 38 seconds ago WORKDIR /home/site/wwwroot/HttpUploadTrigger/ 0B buildkit.dockerfile.v0
<missing> 38 seconds ago ADD . /home/site/wwwroot # buildkit 1.9MB buildkit.dockerfile.v0
那么,如果我必须将包含秘密的文件上传到我的存储库,那么通过 BUILDKIT 传递秘密以便不暴露它们有什么好处呢?
也许我错过了一些东西。
解决方案
推荐阅读
- node.js - Nodemon 和 Jest,仅在异步运行 Babel 时支持
- python-3.x - 我的应用程序的详细信息页面未显示在浏览器中
- python-3.x - 无法使用 OpenCV 连接多个图像
- tensorflow - 如何用新数据预测 TensorFlow 时间序列预测练习的一些模型
- c# - 元素(按钮)模板中定义的 TextBlock 属性的动画
- javascript - 您在特定表格中输入的内容不会被保留
- python - pandas pivot_table Margin=True 的问题没有给我正确的答案
- python - Creating a new column with concatenated values from another column
- sql - Access 查询中的返回值
- javascript - 从 SQL 获取结果时函数乱序