我试图在Jenkins管道中运行Docker构建期间pip安装发布的AWS CodeArtifact包。我大致遵循了AWS here提供的一些示例,在我的本地终端中运行类似的docker构建可以正常工作,但在Jenkins中运行相同的构建失败。示例Dockerfile:
FROM registry.access.redhat.com/ubi9-minimal:9.1.0-1793
ARG PYTHON_VERSION=python39
ARG CODEARTIFACT_TOKEN
RUN microdnf install -y ${PYTHON_VERSION}
WORKDIR /usr/app
RUN python -m venv /usr/app/venv
ENV PATH="/usr/app/venv/bin:$PATH"
RUN pip config set global.extra-index-url "https://aws:$CODEARTIFACT_TOKEN@{xxxxx}.d.codeartifact.{REGION}.amazonaws.com/pypi/{REPO}/simple/"
RUN pip install package_in_repo
在Jenkins管道中,令牌被检索并传递给docker build命令:
authToken = sh(
returnStdout: true,
script: 'aws codeartifact get-authorization-token \
--domain {DOMAIN} \
--domain-owner {OWNER} \
--region {REGION} \
--query authorizationToken \
--output text \
--duration-seconds 900'
).trim()
image = docker.build("{ECR/REPO}:${TAG}", "--build-arg CODEARTIFACT_TOKEN='$authToken' --network host .")
在本地构建Docker镜像是可以的,但是通过Jenkins,它会抱怨找不到包:
#13 [builder 6/8] RUN pip install package_in_repo
#13 0.914 Looking in indexes: https://pypi.org/simple, https://aws:****@{domain}.d.codeartifact.{REGION}.amazonaws.com/pypi/{REPO}/simple/
#13 1.235 ERROR: Could not find a version that satisfies the requirement package_in_repo (from versions: none)
#13 1.236 ERROR: No matching distribution found for package_in_repo
看起来Jenkins可以访问仓库,因为我没有得到401错误,但在那里看不到/找到包
我希望通过Jenkins可以很好地安装这个包。我查了一下:
- 包确实存在于仓库中(同样,可以在本地构建镜像,也可以直接在本地pip安装)
- Jenkins拥有AWS权限(它使用的角色包括AWSCodeArtifactAdminAccess,所以不要认为这是问题所在)
我尝试了不同的认证尝试,e。例如,使用cli登录到docker构建中的CodeArtifact,并从Jenkins传递令牌,已经尝试指定特定的版本号。
1条答案
按热度按时间1zmg4dgp1#
不久后意识到问题-我不清楚只有Repo所有者可以访问repo中的包,我不得不设置CodeArtifact repo策略以允许从Jenkins访问(它在本地为我工作,因为我是repo的所有者)