我有一个pip可安装包,它是使用twine发布到Azure DevOps工件的
在我的构建映像中,我需要下载该包并使用pip
安装它。所以我需要
针对azure工件进行身份验证以获取它。所以我用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
文件,因为我不想把它放在我的存储库中,因为我的令牌是纯文本的
仔细阅读here,我发现有一个加密机密的解决方案,也许这是从我的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
作为GitHub中的docker build命令,请执行以下操作:
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传递秘密以避免暴露它们有什么好处呢
也许我错过了什么
目前没有回答
相关问题 更多 >
编程相关推荐