summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/zh-tw/gitlab.mdx
blob: a96618fd1c040c0a02270ec82ea3da522d7b07dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
---
title: GitLab
description: 在 GitLab 問題和合併請求中使用 opencode。
---

opencode 透過 GitLab CI/CD 管線或與 GitLab Duo 與您的 GitLab 工作流程整合。

在這兩種情況下,opencode 都將在您的 GitLab Runner 上執行。

---

## GitLab

opencode 在常規 GitLab 管線中工作。您可以將其構建為管線作為 [CI 組件](https://docs.gitlab.com/ee/ci/components/)

在這裡,我們使用社群建立的 opencode CI/CD 組件 — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode)。

---

### 功能

- **每個作業使用自定義設定**:使用自定義設定目錄設定 opencode,例如 `./config/#custom-directory` 以啟用或禁用每個 opencode 呼叫的功能。
- **無狀態**:opencode 的狀態(訊息歷史記錄等)儲存在合併請求評論線程中,使其完全無狀態。
- **靈活**:CI 組件支援多種輸入來自定義其行為

---

### 設定

1. 將 opencode 身分驗證 JSON 作為檔案類型 CI 環境變數儲存在 **Settings** > **CI/CD** > **Variables** 下。確保將它們標記為「Masked and hidden」。
2. 將以下內容新增到您的 `.gitlab-ci.yml` 檔案中。

   ```yaml title=".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 # The variable name for your OpenCode authentication JSON
         command: optional-custom-command
         message: "Your prompt here"
   ```

有關此組件的更多輸入和使用案例[查看文件](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode)。

---

## GitLab Duo

opencode 與您的 GitLab 工作流程整合。
在評論中提及 `@opencode`,opencode 將在您的 GitLab CI 管線中執行任務。

---

### 功能

- **分類問題**:要求 opencode 調查問題並向您解釋。
- **修復和實作**:要求 opencode 修復問題或實作功能。
  它將建立一個新分支並提出包含變更的合併請求。
- **安全**:opencode 在您的 GitLab Runner 上執行。

---

### 設定

opencode 在您的 GitLab CI/CD 管線中執行,您需要進行以下設定:

:::tip
查看 [**GitLab 文件**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) 以獲取最新說明。
:::

1.  設定您的 GitLab 環境
2.  設定 CI/CD
3.  取得 AI 模型供應商 API 金鑰
4.  建立服務帳號
5.  設定 CI/CD 變數
6.  建立一個流程設定檔,這是一個範例:

        <details>

    <summary>Flow configuration</summary>

    ```yaml
    image: node:22-slim
    commands:
      - echo "Installing opencode"
      - npm install --global opencode-ai
      - echo "Installing 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 "Configuring glab"
      - echo $GITLAB_HOST
      - echo "Creating OpenCode auth configuration"
      - mkdir --parents ~/.local/share/opencode
      - |
        cat > ~/.local/share/opencode/auth.json << EOF
        {
          "anthropic": {
            "type": "api",
            "key": "$ANTHROPIC_API_KEY"
          }
        }
        EOF
      - echo "Configuring git"
      - git config --global user.email "[email protected]"
      - git config --global user.name "OpenCode"
      - echo "Testing glab"
      - glab issue list
      - echo "Running OpenCode"
      - |
        opencode run "
        You are an AI assistant helping with GitLab operations.

        Context: $AI_FLOW_CONTEXT
        Task: $AI_FLOW_INPUT
        Event: $AI_FLOW_EVENT

        Please execute the requested task using the available GitLab tools.
        Be thorough in your analysis and provide clear explanations.

        <important>
        Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.

        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.
        You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
        </important>
        "
      - git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
      - echo "Checking for git changes and pushing if any exist"
      - |
        if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
          echo "Git changes detected, adding and pushing..."
          git add .
          if git diff --cached --quiet; then
            echo "No staged changes to commit"
          else
            echo "Committing changes to branch: $CI_WORKLOAD_REF"
            git commit --message "Codex changes"
            echo "Pushing changes up to $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 "Changes successfully pushed"
          fi
        else
          echo "No git changes detected, skipping push"
        fi
    variables:
      - ANTHROPIC_API_KEY
      - GITLAB_TOKEN_OPENCODE
      - GITLAB_HOST
    ```

        </details>

詳細說明可以參考 [GitLab CLI 代理文件](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)。

---

### 範例

以下是如何在 GitLab 中使用 opencode 的一些範例。

:::tip
您可以設定使用與 `@opencode` 不同的觸發短語。
:::

- **解釋一個問題**

  在 GitLab 問題中添加此評論。

  ```
  @opencode explain this issue
  ```

  opencode 將閱讀該問題並回覆並提供清晰的解釋。

- **解決問題**

  在 GitLab 問題中,說:

  ```
  @opencode fix this
  ```

  opencode 將建立一個新分支,實作變更,並打開包含變更的合併請求。

- **審閱合併請求**

  對 GitLab 合併請求留下以下評論。

  ```
  @opencode review this merge request
  ```

  opencode 將審閱合併請求並提供回饋。