Jenkins Pipeline:使用docker.withRegistry替代docker login认证失败求助
Jenkins Pipeline docker.withRegistry认证失败修复方案
问题根源
你之前的写法错误在于:
docker.withRegistry的第二个参数需要传入Jenkins凭据ID,而非直接传入token值- 原
docker login中的用户名axhdhcololjk/jenkins未被传入,认证时缺少关键身份信息
正确实现方式
方式1:使用Jenkins预配置凭据(推荐)
在Jenkins凭据管理中创建用户名密码类型凭据:
- 用户名:
axhdhcololjk/jenkins - 密码:你的
OCI_AUTH_TOKEN实际值 - 凭据ID:自定义(比如
oci-registry-creds)
- 用户名:
Pipeline代码改写:
docker.withRegistry("https://jed.ocir.io", "oci-registry-creds") { // 在此代码块内执行需要认证的Docker操作,例如: docker.image("your-image-name").push() }
方式2:动态传递凭据(不推荐,存在安全隐患)
若无需预配置凭据,可通过credentials方法绑定用户名和token:
def registryUrl = "https://jed.ocir.io" def creds = credentials([usernameVariable: 'OCI_USER', passwordVariable: 'OCI_TOKEN']) docker.withRegistry(registryUrl, creds) { // 执行Docker操作 }
注:此方式需确保Jenkins中已存在对应用户名和token的凭据,或通过参数传递这两个值。
官方文档核心内容翻译
docker.withRegistry(url, credentialsId)用于指定Docker仓库地址及认证凭据:
- 第一个参数为仓库完整URL,必须包含协议(如
https://)- 第二个参数为Jenkins中已配置的凭据ID,该凭据必须是用户名密码类型,用于完成仓库认证
- 代码块内的所有Docker操作(拉取、推送镜像等)都会自动使用该凭据完成认证
内容的提问来源于stack exchange,提问作者Zama Ques
相关产品推荐
相关产品推荐

