GitLab
在 GitLab issues 和合并请求中使用 OpenCode。
OpenCode 通过你的 GitLab CI/CD 流水线或 GitLab Duo 与你的 GitLab 工作流集成。
在这两种情况下,OpenCode 都会在你的 GitLab runners 上运行。
# GitLab CI#
OpenCode 可以在常规的 GitLab 流水线中工作。你可以将它作为 CI 组件↗ 构建到流水线中。
这里我们使用一个社区创建的 OpenCode CI/CD 组件 — nagyv/gitlab-opencode↗。
## 功能#
- 每个任务使用自定义配置:使用自定义配置目录配置 OpenCode,例如
./config/#custom-directory,以便为每个 OpenCode 调用启用或禁用功能。 - 最小化设置:CI 组件在后台设置 OpenCode,你只需要创建 OpenCode 配置和初始提示。
- 灵活:CI 组件支持多个输入参数来自定义其行为。
## 设置#
-
将你的 OpenCode 认证 JSON 作为文件类型的 CI 环境变量存储在 Settings > CI/CD > Variables 下。确保将它们标记为 "Masked and hidden"。
-
将以下内容添加到你的
.gitlab-ci.yml文件中。yaml1# .gitlab-ci.yml 2include: 3 - component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2 4 inputs: 5 config_dir: ${CI_PROJECT_DIR}/opencode-config 6 auth_json: $OPENCODE_AUTH_JSON # OpenCode 认证 JSON 的变量名 7 command: optional-custom-command 8 message: "Your prompt here"
有关更多输入参数和用例,请查看此组件的文档↗。
# GitLab Duo#
OpenCode 与你的 GitLab 工作流集成。在评论中提及 @opencode,OpenCode 将在你的 GitLab CI 流水线中执行任务。
## 功能#
- 问题分类:让 OpenCode 查看问题并向你解释。
- 修复和实现:让 OpenCode 修复问题或实现功能。它会创建一个新分支并提交带有更改的合并请求。
- 安全:OpenCode 在你的 GitLab runners 上运行。
## 设置#
OpenCode 在你的 GitLab CI/CD 流水线中运行,以下是设置所需的内容:
提示:查看 GitLab 文档↗ 获取最新说明。
-
配置你的 GitLab 环境
-
设置 CI/CD
-
获取 AI 模型提供商 API 密钥
-
创建服务账户
-
配置 CI/CD 变量
-
创建流程配置文件,这是一个示例:
yaml1# Flow configuration 2image: node:22-slim 3commands: 4 - echo "Installing opencode" 5 - npm install --global opencode-ai 6 - echo "Installing glab" 7 - export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE 8 - apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/* 9 - curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash 10 - apt-get install --yes glab 11 - echo "Configuring glab" 12 - echo $GITLAB_HOST 13 - echo "Creating OpenCode auth configuration" 14 - mkdir --parents ~/.local/share/opencode 15 - | 16 cat > ~/.local/share/opencode/auth.json << EOF 17 { 18 "anthropic": { 19 "type": "api", 20 "key": "$ANTHROPIC_API_KEY" 21 } 22 } 23 EOF 24 - echo "Configuring git" 25 - git config --global user.email "[email protected]" 26 - git config --global user.name "OpenCode" 27 - echo "Testing glab" 28 - glab issue list 29 - echo "Running OpenCode" 30 - | 31 opencode run " 32 You are an AI assistant helping with GitLab operations. 33 34 Context: $AI_FLOW_CONTEXT 35 Task: $AI_FLOW_INPUT 36 Event: $AI_FLOW_EVENT 37 38 Please execute the requested task using the available GitLab tools. 39 Be thorough in your analysis and provide clear explanations. 40 41 <important> 42 Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands. 43 44 If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it. 45 You don't need to commit or push up changes, those will be done automatically based on the file changes you make. 46 </important> 47 " 48 - git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF 49 - echo "Checking for git changes and pushing if any exist" 50 - | 51 if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then 52 echo "Git changes detected, adding and pushing..." 53 git add . 54 if git diff --cached --quiet; then 55 echo "No staged changes to commit" 56 else 57 echo "Committing changes to branch: $CI_WORKLOAD_REF" 58 git commit --message "Codex changes" 59 echo "Pushing changes up to $CI_WORKLOAD_REF" 60 git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF 61 echo "Changes successfully pushed" 62 fi 63 else 64 echo "No git changes detected, skipping push" 65 fi 66variables: 67 - ANTHROPIC_API_KEY 68 - GITLAB_TOKEN_OPENCODE 69 - GITLAB_HOST
你可以参考 GitLab CLI agents 文档↗ 获取详细说明。
## 示例#
以下是在 GitLab 中使用 OpenCode 的一些示例。
提示:你可以配置使用不同于
@opencode的触发短语。
-
解释问题
在 GitLab issue 中添加此评论:
@opencode explain this issueOpenCode 将阅读问题并回复清晰的解释。
-
修复问题
在 GitLab issue 中说:
@opencode fix thisOpenCode 将创建一个新分支,实现更改,并打开一个带有更改的合并请求。
-
审查合并请求
在 GitLab 合并请求上留下以下评论:
@opencode review this merge requestOpenCode 将审查合并请求并提供反馈。