You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

流水线内IBM Cloud Container Registry登录失败问题求助

问题描述

尝试通过Tekton任务登录IBM Cloud Container Registry用于Buildah部署,使用以下任务配置:

- name: login1
  taskRef:
    name: ibmcloud
  params:
  - name: ARGS
    value: 
      - "login"
      - "--apikey=$(params.ibmcloud-api-key)"
      - "-g"
      - "production"
      - "-r"
      - "$(params.ibmcloud-region)"

- name: cr-login
  taskRef:
    name: ibmcloud
  params:
  - name: ARGS
    value: 
      - "cr"
      - "login"
  runAfter:
    - login1

执行后login1任务认证成功,但cr-login任务失败,错误输出如下:

[login1 : ibmcloud] API endpoint: https://cloud.ibm.com
[login1 : ibmcloud] Authenticating...
[login1 : ibmcloud] OK
...
[cr-login : ibmcloud] 
[cr-login : ibmcloud] Warning: an error occurred while checking updates for plug-in 'container-registry':
[cr-login : ibmcloud] Could not get plugins from repository: invalid character '<' looking for beginning of value
[cr-login : ibmcloud] Use 'ibmcloud config --check-version=false' to disable update check.
[cr-login : ibmcloud] 
[cr-login : ibmcloud] FAILED
[cr-login : ibmcloud] You are not logged in to IBM Cloud.
[cr-login : ibmcloud] Log in by running the 'ibmcloud login' command.
解决方案

1. 解决跨任务会话不共享问题

Tekton中每个独立task运行在不同的Pod容器里,IBM Cloud CLI的登录会话默认存储在容器本地的~/.bluemix目录,无法跨任务共享。需要通过共享Workspace保存CLI配置,让多个任务复用登录状态:

步骤1:定义共享Workspace

在Pipeline中添加PersistentVolumeClaim类型的Workspace,用于存储IBM Cloud CLI配置:

workspaces:
  - name: ibmcloud-config
    persistentVolumeClaim:
      claimName: your-pvc-name  # 替换为你的PVC名称

步骤2:修改任务挂载Workspace

确保每个ibmcloud任务都挂载该Workspace到CLI配置目录(默认/root/.bluemix):

- name: login1
  taskRef:
    name: ibmcloud
  workspaces:
    - name: config
      workspace: ibmcloud-config
  params:
  - name: ARGS
    value: 
      - "login"
      - "--apikey=$(params.ibmcloud-api-key)"
      - "-g"
      - "production"
      - "-r"
      - "$(params.ibmcloud-region)"

- name: cr-login
  taskRef:
    name: ibmcloud
  workspaces:
    - name: config
      workspace: ibmcloud-config
  params:
  - name: ARGS
    value: 
      - "cr"
      - "login"
  runAfter:
    - login1

步骤3:确保IBM Cloud任务支持Workspace挂载

检查ibmcloud任务的定义,确认已配置Workspace挂载到/root/.bluemix:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: ibmcloud
spec:
  workspaces:
    - name: config
      description: 存储IBM Cloud CLI配置的Workspace
      mountPath: /root/.bluemix
  params:
    - name: ARGS
      type: array
      description: IBM Cloud CLI命令参数
  steps:
    - name: ibmcloud
      image: ibmcom/ibmcloud-cli:latest  # 使用官方IBM Cloud CLI镜像
      command: ["ibmcloud"]
      args: $(params.ARGS)

2. 禁用插件版本检查解决警告错误

插件更新检查的错误会干扰CLI执行,直接全局禁用版本检查即可:

添加禁用版本检查的任务

在login1之后、cr-login之前新增一个任务:

- name: disable-version-check
  taskRef:
    name: ibmcloud
  workspaces:
    - name: config
      workspace: ibmcloud-config
  params:
  - name: ARGS
    value: 
      - "config"
      - "--check-version=false"
  runAfter:
    - login1

然后修改cr-login的runAfter依赖:

- name: cr-login
  taskRef:
    name: ibmcloud
  workspaces:
    - name: config
      workspace: ibmcloud-config
  params:
  - name: ARGS
    value: 
      - "cr"
      - "login"
  runAfter:
    - disable-version-check

3. 备选方案:合并命令到同一任务

如果不想配置Workspace,可以将登录和CR登录命令合并到同一个任务中(同一容器内执行,会话自然共享):

- name: ibmcloud-full-login
  taskRef:
    name: ibmcloud-shell  # 需要一个支持shell执行的任务
  params:
  - name: COMMAND
    value: |
      ibmcloud login --apikey=$(params.ibmcloud-api-key) -g production -r $(params.ibmcloud-region) && \
      ibmcloud config --check-version=false && \
      ibmcloud cr login

对应的ibmcloud-shell任务定义示例:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: ibmcloud-shell
spec:
  params:
    - name: COMMAND
      type: string
      description: 要执行的shell命令
  steps:
    - name: run-command
      image: ibmcom/ibmcloud-cli:latest
      command: ["sh"]
      args: ["-c", "$(params.COMMAND)"]

内容的提问来源于stack exchange,提问作者Yahya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:32:03