您可以使用环境变量:PIP_INDEX_URL
[1]。
下面是一个 AWS CodeBuildbuildspec.yml
文件,我们在其中
使用AWS 文档中的这个示例PIP_INDEX_URL
为 CodeArtifact
构建。
buildspec.yml
pre_build:
commands:
- echo Getting CodeArtifact authorization...
- export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain "${CODEARTIFACT_DOMAIN}" --domain-owner "${AWS_ACCOUNT_ID}" --query authorizationToken --output text)
- export PIP_INDEX_URL="https://aws:${CODEARTIFACT_AUTH_TOKEN}@${CODEARTIFACT_DOMAIN}-${AWS_ACCOUNT_ID}.d.codeartifact.${AWS_DEFAULT_REGION}.amazonaws.com/pypi/${CODEARTIFACT_REPO}/simple/"
在您的Dockerfile中,在您的正上方添加ARG PIP_INDEX_URL
一行,RUN pip install -r requirements.txt
以便它可以在构建过程中成为环境变量:
Dockerfile
# this needs to be added before your pip install line!
ARG PIP_INDEX_URL
RUN pip install -r requirements.txt
最后,我们使用PIP_INDEX_URL
build-arg 构建图像。
buildspec.yml
build:
commands:
- echo Building the Docker image...
- docker build -t "${IMAGE_REPO_NAME}" --build-arg PIP_INDEX_URL .
顺便说一句,添加ARG PIP_INDEX_URL
到 Dockerfile 不应破坏任何现有的 CI 或工作流。如果--build-arg PIP_INDEX_URL
在构建图像时省略,pip 仍将使用默认的 PyPI 索引。
指定--build-arg PIP_INDEX_URL=${PIP_INDEX_URL}
是有效的,但没有必要。指定不带值的参数名称将使 Docker 从同名的环境变量[2]中获取其值。
安全说明:如果有人运行docker history ${IMAGE_REPO_NAME}
,他们可以看到${PIP_INDEX_URL}
[3]的值
。该令牌最多只能使用 12 小时,您可以使用[4]--duration-seconds
的参数将其缩短至 15 分钟,所以这可能是可以接受的。如果您的 Dockerfile 是一个多阶段构建,那么如果您没有在目标阶段使用它应该不是问题。CodeBuild 目前似乎不支持。aws codeartifact get-authorization-token
ARG PIP_INDEX_URL
docker build --secret