pip install from AWS CodeArtifact在Jenkins pipeline中的docker构建中运行时出现“未找到匹配的分发”错误,但在本地工作

sq1bmfud  于 2023-04-29  发布在  Jenkins
关注(0)|答案(1)|浏览(108)

我试图在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传递令牌,已经尝试指定特定的版本号。

1zmg4dgp

1zmg4dgp1#

不久后意识到问题-我不清楚只有Repo所有者可以访问repo中的包,我不得不设置CodeArtifact repo策略以允许从Jenkins访问(它在本地为我工作,因为我是repo的所有者)

相关问题