Azure DevOps Pipeline镜像上传失败:客户端ID或密钥无效
Azure DevOps Pipeline推送Docker镜像至Azure容器注册表(ACR)认证失败问题
错误信息
##[error]unauthorized: Invalid clientid or client secret.
##[error]The process '/usr/bin/docker' failed with exit code 1
此前该Pipeline操作可正常执行,当前需完成Docker镜像在ACR中的部署,相关K8s配置文件如下:
deployment.yaml
apiVersion : apps/v1 kind: Deployment metadata: name: otmcarga spec: replicas: 1 selector: matchLabels: app: otmcarga template: metadata: labels: app: otmcarga spec: containers: - name: otmcarga image: acrotmdev.azurecr.io/otmcarga ports: - containerPort: 80 env: - name: SPRING_PROFILES_ACTIVE value: "dev" livenessProbe: httpGet: path: /actuator/health port: 8080 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 60
services.yaml
apiVersion: v1 kind: Service metadata: name: otmcarga spec: type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 8080 selector: app: otmcarga
排查与解决步骤
1. 检查Azure DevOps服务连接凭据
- 进入Azure DevOps项目的项目设置→服务连接,找到对应ACR的服务连接
- 验证服务主体(Service Principal)的有效性:
- 登录Azure门户,在Azure AD→应用注册中找到该服务主体,确认Client ID未变更
- 检查Client Secret是否过期,若过期则生成新密钥并更新到服务连接中
- 确保该服务主体拥有ACR的AcrPush权限,权限缺失需重新添加
2. 核对Pipeline任务配置
- 若使用
Docker或AzureCLI任务登录ACR,确认任务引用的服务连接正确,未被误修改 - 若脚本中手动执行
docker login,检查硬编码的Client ID、Client Secret、ACR地址是否正确,排除凭据过期或输入错误
3. 验证ACR访问规则
- 检查ACR防火墙设置,确认Azure DevOps代理所在网络(自托管代理需核对IP)被允许访问
- 若使用Azure托管代理,确保ACR允许
AzureCloud服务标签访问,或开启“允许所有网络”
4. 本地测试登录ACR
- 在本地终端执行以下命令测试凭据有效性:
本地登录失败则说明凭据本身有问题,需重新生成服务主体;登录成功则排查Azure DevOps代理的网络或服务连接配置docker login acrotmdev.azurecr.io -u <ClientID> -p <ClientSecret>
内容的提问来源于stack exchange,提问作者Josias Martins Caitano
相关产品推荐
相关产品推荐

