GitHub Actions中从Artifact Registry安装Pip包失败排查
问题分析与解决步骤
核心问题:CI环境中pip访问GCP Artifact Registry时,未完成自动身份认证,触发交互式用户名密码输入,但CI环境是非交互式的,因此抛出EOFError。本地能正常安装是因为本地gcloud已配置认证,pip自动复用了该凭证。
解决配置步骤
1. 为pip注入GCP认证令牌
pip无法直接使用GCP工作负载身份,需显式生成并传递Artifact Registry认证令牌:
# 生成有效期1小时的GCP访问令牌 ARTIFACT_TOKEN=$(gcloud auth print-access-token) # 配置pip使用令牌访问目标仓库 pip config set global.extra-index-url "https://oauth2accesstoken:${ARTIFACT_TOKEN}@europe-west9-python.pkg.dev/path-to/simple/" # 执行安装 pip install PACKAGE
或者直接在install命令中嵌入令牌:
pip install PACKAGE --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@europe-west9-python.pkg.dev/path-to/simple/"
2. 确认CI中工作负载身份已完成认证
确保在pip命令前,工作负载身份已成功登录GCP:
# 根据你的工作负载身份配置,执行对应的登录命令,例如: gcloud auth activate-service-account --key-file=${WORKLOAD_IDENTITY_CRED_FILE} # 验证令牌生成正常 gcloud auth print-access-token
3. 验证IAM权限绑定正确性
检查工作负载身份的IAM角色绑定是否生效:
gcloud artifacts repositories get-iam-policy PACKAGE_NAME --location=europe-west9
确认输出中包含你的工作负载身份主体,且拥有roles/artifactregistry.admin角色。
4. 禁用pip交互式认证提示
在CI中添加--no-input参数,避免pip触发交互式输入:
pip install --no-input --index-url ... PACKAGE
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

