Skip to content

GitLab

在 GitLab issues 和 merge requests 中使用 OpenCode。

OpenCode 通过你的 GitLab CI/CD 流水线或 GitLab Duo 与你的 GitLab 工作流集成。

在这两种情况下,OpenCode 都将在你的 GitLab runner 上运行。


GitLab CI

OpenCode 可以在常规的 GitLab 流水线中工作。你可以将其作为一个 CI 组件 构建到流水线中。

这里我们使用的是一个社区创建的 OpenCode CI/CD 组件 —— nagyv/gitlab-opencode


功能

  • 每个作业使用自定义配置: 为 OpenCode 配置自定义配置目录(例如 ./config/#custom-directory),以便在每次调用 OpenCode 时启用或禁用特定功能。
  • 极简设置: CI 组件会在后台设置 OpenCode,你只需创建 OpenCode 配置和初始提示词。
  • 灵活: CI 组件支持多个输入项,用于自定义其行为。

设置

  1. 将你的 OpenCode 认证 JSON 作为文件类型的 CI 环境变量存储在 Settings > CI/CD > Variables 下。确保将它们标记为 “Masked and hidden”(掩码且隐藏)。

  2. 将以下内容添加到你的 .gitlab-ci.yml 文件中。

    .gitlab-ci.yml
    include:
    - component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
    inputs:
    config_dir: ${CI_PROJECT_DIR}/opencode-config
    auth_json: $OPENCODE_AUTH_JSON # 你的 OpenCode 认证 JSON 变量名
    command: optional-custom-command
    message: "你的提示词"

有关此组件的更多输入项和使用案例,请 查看文档


GitLab Duo

OpenCode 与你的 GitLab 工作流集成。 在评论中提及 @opencode,OpenCode 就会在你的 GitLab CI 流水线中执行任务。


功能

  • 分拣 Issue: 让 OpenCode 调查某个 Issue 并向你解释。
  • 修复与实现: 让 OpenCode 修复 Bug 或实现功能。它将创建一个新分支,并针对这些更改发起合并请求 (Merge Request)。
  • 安全: OpenCode 在你的 GitLab runner 上运行。

设置

OpenCode 在你的 GitLab CI/CD 流水线中运行,以下是设置所需的步骤:

  1. 配置你的 GitLab 环境

  2. 设置 CI/CD

  3. 获取 AI 模型提供商的 API 密钥

  4. 创建服务账号

  5. 配置 CI/CD 变量

  6. 创建一个流程配置文件,示例如下:

    流程配置
    image: node:22-slim
    commands:
    - echo "正在安装 opencode"
    - npm install --global opencode-ai
    - echo "正在安装 glab"
    - export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
    - apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
    - curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
    - apt-get install --yes glab
    - echo "正在配置 glab"
    - echo $GITLAB_HOST
    - echo "正在创建 OpenCode 认证配置"
    - mkdir --parents ~/.local/share/opencode
    - |
    cat > ~/.local/share/opencode/auth.json << EOF
    {
    "anthropic": {
    "type": "api",
    "key": "$ANTHROPIC_API_KEY"
    }
    }
    EOF
    - echo "正在配置 git"
    - git config --global user.email "opencode@gitlab.com"
    - git config --global user.name "OpenCode"
    - echo "正在测试 glab"
    - glab issue list
    - echo "正在运行 OpenCode"
    - |
    opencode run "
    你是一个帮助处理 GitLab 操作的 AI 助手。
    上下文: $AI_FLOW_CONTEXT
    任务: $AI_FLOW_INPUT
    事件: $AI_FLOW_EVENT
    请使用可用的 GitLab 工具执行请求的任务。
    分析要透彻,并提供清晰的解释。
    <important>
    请使用 glab CLI 访问 GitLab 中的数据。glab CLI 已经过身份验证。你可以运行相应的命令。
    如果要求你总结 MR 或 Issue,或者要求你提供更多信息,请在 MR/Issue 中回复一条注释,以便用户查看。
    你不需要提交或推送更改,这些将根据你所做的文件更改自动完成。
    </important>
    "
    - git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
    - echo "正在检查 git 更改,如果存在则推送"
    - |
    if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
    echo "检测到 Git 更改,正在添加并推送..."
    git add .
    if git diff --cached --quiet; then
    echo "没有待提交的暂存更改"
    else
    echo "正在将更改提交到分支: $CI_WORKLOAD_REF"
    git commit --message "Codex changes"
    echo "正在将更改推送到 $CI_WORKLOAD_REF"
    git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
    echo "更改推送成功"
    fi
    else
    echo "未检测到 git 更改,跳过推送"
    fi
    variables:
    - ANTHROPIC_API_KEY
    - GITLAB_TOKEN_OPENCODE
    - GITLAB_HOST

你可以参考 GitLab CLI agents 文档 获取详细说明。


示例

以下是关于如何在 GitLab 中使用 OpenCode 的一些示例。

  • 解释 Issue

    在 GitLab issue 中添加此评论。

    @opencode 解释这个 issue

    OpenCode 将读取该 issue 并回复清晰的解释。

  • 修复 Issue

    在 GitLab issue 中输入:

    @opencode 修复这个

    OpenCode 将创建一个新分支,实现更改,并针对这些更改发起合并请求。

  • 审查合并请求 (Merge Request)

    在 GitLab 合并请求中留下以下评论。

    @opencode 审查此合并请求

    OpenCode 将审查该合并请求并提供反馈。