> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Thiết lập Code Review

> Kết nối kho GitHub, GitLab, Bitbucket hoặc Azure DevOps để tự động review code bằng AI

Kết nối một Git provider một lần và mọi pull request mới trong các kho được chọn sẽ tự động nhận AI review. Mới với Code Review? Hãy đọc [tổng quan](/vi/guide/code-review/overview) trước.

## Yêu cầu

* Tài khoản GitHub, GitLab, Bitbucket hoặc Azure DevOps với quyền truy cập kho
* Quyền cài đặt ứng dụng hoặc tạo access token cho tổ chức của bạn
* Một workspace CloudThinker

## Kết nối kho

<Steps>
  <Step title="Mở Code Review">
    Vào **Code Review** từ menu điều hướng.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_1_onboarding.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=83c99952b3e1487b3fd17bbfa020a6c0" alt="Khởi động Code Review" width="2516" height="1714" data-path="images/code-review/setup_step_1_onboarding.png" />
    </Frame>
  </Step>

  <Step title="Bắt đầu thiết lập">
    Nhấp **Get Started with Code Review** để mở trình hướng dẫn thiết lập.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/eiDPB1agMNoCjinj/images/code-review/setup_step_1_setuprovider.png?fit=max&auto=format&n=eiDPB1agMNoCjinj&q=85&s=aa3386c115e30a917d25184c0bca137e" alt="Thiết lập Code Review - Chọn Provider" width="1914" height="952" data-path="images/code-review/setup_step_1_setuprovider.png" />
    </Frame>
  </Step>

  <Step title="Chọn provider">
    Chọn **GitHub**, **GitLab**, **Bitbucket** hoặc **Azure DevOps** làm Git provider của bạn.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_1_connectprovider.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=80d3229aa3254ac1d2a3aaf70b44cb1c" alt="Chọn Git Provider" width="3024" height="1714" data-path="images/code-review/setup_step_1_connectprovider.png" />
    </Frame>
  </Step>

  <Step title="Xác thực">
    <Tabs>
      <Tab title="GitHub">
        Nhấp **Install GitHub App** để bắt đầu cài đặt GitHub App.

        GitHub chuyển hướng bạn để chọn tổ chức và cấp quyền truy cập kho. Sau khi bạn ủy quyền, trình hướng dẫn tự động tiếp tục. Webhook được đăng ký bởi GitHub App — không cần cấu hình webhook thủ công.

        <Warning>
          Cài đặt CloudThinker cho tổ chức GitHub yêu cầu quyền **Organization Owner**. Nếu bạn không phải owner, hãy nhờ owner cài đặt app.
        </Warning>
      </Tab>

      <Tab title="GitLab (OAuth)">
        Nhấp **Connect to GitLab** để xác thực qua OAuth. Đây là tùy chọn đơn giản nhất cho người dùng GitLab.com.

        Sau khi kết nối, [cấu hình webhook thủ công](#configure-webhooks).
      </Tab>

      <Tab title="GitLab (Access Token)">
        Sử dụng **Project Access Token** hoặc **Group Access Token** cho các instance GitLab tự host hoặc nếu bạn muốn quản lý token thủ công. Bình luận khi đó xuất hiện từ tài khoản bot, token được giới hạn phạm vi cho các dự án hoặc nhóm cụ thể, và quyền truy cập dễ dàng thu hồi. CloudThinker hỗ trợ GitLab tự host **phiên bản 12.0 trở lên**.

        **Chi tiết kết nối:**

        1. **GitLab URL**: Nhập `https://gitlab.com` cho GitLab.com, hoặc URL instance tự host của bạn (ví dụ: `https://gitlab.example.com`)
        2. **Token Type**: Chọn **Project Access Token** (một dự án) hoặc **Group Access Token** (tất cả dự án trong một nhóm)
        3. **Access Token**: Dán token đã tạo

        <Accordion title="Cách tạo Project Access Token">
          1) Vào dự án → **Settings** → **Access Tokens**
          2) Nhấp **Add new token**
          3) Đặt vai trò là `Developer` hoặc cao hơn
          4) Chọn phạm vi: `api`
          5) Đặt ngày hết hạn (khuyến nghị)
          6) Sao chép token đã tạo
        </Accordion>

        <Accordion title="Cách tạo Group Access Token">
          1. Vào nhóm → **Settings** → **Access Tokens**
          2. Nhấp **Add new token**
          3. Đặt vai trò là `Developer` hoặc cao hơn
          4. Chọn phạm vi: `api`
          5. Đặt ngày hết hạn (khuyến nghị)
          6. Sao chép token đã tạo
        </Accordion>

        <Warning>
          Token phải có vai trò **Developer** hoặc cao hơn để đăng bình luận code review. Vai trò Guest và Reporter không thể bình luận trên merge request.
        </Warning>

        Sau khi kết nối, [cấu hình webhook thủ công](#configure-webhooks).
      </Tab>

      <Tab title="Bitbucket (OAuth)">
        Nhấp **Connect to Bitbucket** để xác thực qua OAuth. Bitbucket chuyển hướng bạn để ủy quyền truy cập workspace.

        Webhook được đăng ký tự động — không cần cấu hình webhook thủ công.
      </Tab>

      <Tab title="Bitbucket (Access Token)">
        Kết nối bằng Bitbucket access token. Chọn loại token phù hợp với cấp độ truy cập của bạn:

        | Loại Token                  | Phạm vi                        | Gói yêu cầu |
        | --------------------------- | ------------------------------ | ----------- |
        | **Workspace Access Token**  | Tất cả kho trong một workspace | Premium     |
        | **Project Access Token**    | Tất cả kho trong một dự án     | Premium     |
        | **Repository Access Token** | Chỉ một kho duy nhất           | Free        |

        **Chi tiết kết nối:**

        1. **Token Type**: Chọn phạm vi token từ dropdown
        2. **Bitbucket Workspace**: Nhập workspace slug của bạn (từ URL: `bitbucket.org/<workspace>/repo`)
        3. **Repository Slug** (chỉ cho Repository token): Nhập repository slug
        4. **Access Token**: Dán token đã tạo

        Nhấp **Validate Token** trước để xác minh quyền truy cập, sau đó nhấp **Connect** để hoàn tất.

        **Quyền token cần thiết:**

        * Account: Read
        * Repositories: Read, Write
        * Pull requests: Read, Write
        * Webhooks: Read and write
        * Pipelines: Read, Write

        <Accordion title="Cách tạo Workspace Access Token">
          1. Vào **Workspace** → **Settings** → **Access tokens**
          2. Nhấp **Create workspace access token**
          3. Bật các quyền cần thiết được liệt kê ở trên
          4. Đặt ngày hết hạn (khuyến nghị)
          5. Sao chép token đã tạo
        </Accordion>

        <Accordion title="Cách tạo Project Access Token">
          1. Vào **Project** → **Project settings** → **Access tokens**
          2. Nhấp **Create project access token**
          3. Bật các quyền cần thiết được liệt kê ở trên
          4. Đặt ngày hết hạn (khuyến nghị)
          5. Sao chép token đã tạo
        </Accordion>

        <Accordion title="Cách tạo Repository Access Token">
          1. Vào **Repository** → **Repository settings** → **Access tokens**
          2. Nhấp **Create Repository Access Token**
          3. Bật các quyền cần thiết được liệt kê ở trên
          4. Đặt ngày hết hạn (khuyến nghị)
          5. Sao chép token đã tạo
        </Accordion>

        Webhook được đăng ký tự động — không cần cấu hình webhook thủ công.
      </Tab>

      <Tab title="Azure DevOps">
        Azure DevOps sử dụng **Personal Access Token (PAT)** để xác thực.

        **Chi tiết kết nối:**

        1. **Organization URL**: Nhập URL tổ chức Azure DevOps của bạn (ví dụ: `https://dev.azure.com/your-org` hoặc `https://your-org.visualstudio.com`)
        2. **Project**: Nhập tên dự án chứa các kho của bạn
        3. **Personal Access Token**: Dán PAT đã tạo

        Nhấp **Validate PAT** trước để xác minh quyền truy cập, sau đó nhấp **Connect** để hoàn tất.

        **Phạm vi PAT cần thiết:**

        * `Build` — Read
        * `Code` — Read & Write
        * `Pull Request Threads` — Read & Write

        <Accordion title="Cách tạo PAT">
          1. Vào **Azure DevOps** → **User Settings** (góc trên bên phải) → **Personal Access Tokens**
          2. Nhấp **New Token**
          3. Đặt tổ chức và ngày hết hạn
          4. Chọn các phạm vi được liệt kê ở trên
          5. Nhấp **Create** và sao chép token đã tạo
        </Accordion>

        PAT hết hạn vào ngày bạn đặt khi tạo. Xoay vòng PAT trước khi hết hạn để tránh gián đoạn review.

        Sau khi kết nối, [cấu hình webhook thủ công](#configure-webhooks).
      </Tab>
    </Tabs>
  </Step>

  <Step title="Chọn kho">
    Chọn các kho bạn muốn bật cho code review và nhấp **Complete** để hoàn tất thiết lập.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_1_select_repo.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=d92652e03344c67c9bddf81b2a039a88" alt="Chọn Kho" width="3024" height="1714" data-path="images/code-review/setup_step_1_select_repo.png" />
    </Frame>

    Sau khi thiết lập, mở cài đặt kho để điều chỉnh auto-review, [chế độ review](#review-modes), [giám sát pipeline](#pipeline-monitoring) và [bộ lọc](#filter-configuration) theo từng kho.

    **Trạng thái thành công:** Các kho của bạn xuất hiện trong dashboard Code Review — CloudThinker hiện đang giám sát pull request và merge request của chúng.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_1_complete_setup.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=af497e327fc84660e2878e419ab251a3" alt="Thiết lập thành công" width="3024" height="1714" data-path="images/code-review/setup_step_1_complete_setup.png" />
    </Frame>
  </Step>
</Steps>

## Cấu hình webhook

GitHub và Bitbucket đăng ký webhook tự động — không cần thao tác gì. GitLab và Azure DevOps yêu cầu cấu hình webhook thủ công:

<Tabs>
  <Tab title="GitLab">
    Sau khi kết nối tài khoản GitLab, cấu hình webhook trong dự án hoặc nhóm GitLab của bạn:

    1. Vào dự án/nhóm → **Settings** → **Webhooks**
    2. Dán URL webhook được hiển thị trong trình hướng dẫn thiết lập
    3. Nhập secret token được cung cấp
    4. Bật các trigger sau:
       * **Merge request events**
       * **Comments**
       * **Pipeline events**
    5. Nhấp **Add webhook**
  </Tab>

  <Tab title="Azure DevOps">
    Sau khi kết nối dự án Azure DevOps, tạo **4 service hook riêng biệt** trong Azure DevOps:

    1. Vào **Project Settings** → **Service hooks**
    2. Nhấp **Create subscription** và chọn **Web Hooks**
    3. Tạo một hook cho mỗi sự kiện sau:
       * **Pull request created**
       * **Pull request updated**
       * **Pull request commented on**
       * **Build completed**
    4. Với mỗi hook, dán URL webhook được hiển thị trong trình hướng dẫn thiết lập
    5. Sử dụng **Basic authentication** với secret token làm mật khẩu (để trống username)
  </Tab>
</Tabs>

## Tạo pull request

<Steps>
  <Step title="Mở kho của bạn">
    Điều hướng đến kho được kết nối trên GitHub, GitLab, Bitbucket hoặc Azure DevOps.
  </Step>

  <Step title="Tạo pull request">
    Tạo pull request mới với các thay đổi code của bạn. CloudThinker phát hiện PR, phân tích diff và đăng bình luận tóm tắt cộng với bình luận nội tuyến — thường trong vòng 1–2 phút, không cần kích hoạt thủ công.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_2_create_pr.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=db576aa427acdff338394404cb24ae4a" alt="Tạo Pull Request" width="3024" height="1714" data-path="images/code-review/setup_step_2_create_pr.png" />
    </Frame>

    Các phát hiện bao gồm phát hiện lỗi (lỗi logic, tham chiếu null, race condition), lỗ hổng bảo mật (rủi ro injection, secret được mã hóa cứng), chất lượng code (đặt tên, độ phức tạp, trùng lặp) và hiệu suất (truy vấn kém hiệu quả, mẫu N+1).
  </Step>
</Steps>

## Xem xét phát hiện

<Steps>
  <Step title="Kiểm tra trạng thái trong CloudThinker">
    Xem trạng thái review cho tất cả pull request của bạn trong dashboard CloudThinker.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_3_code_review_status.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=18d31bb9489ef5419dc34e93f08c85cc" alt="Trạng thái Code Review" width="3024" height="1714" data-path="images/code-review/setup_step_3_code_review_status.png" />
    </Frame>
  </Step>

  <Step title="Xem phát hiện trên Git provider">
    Mở pull request để xem bản tóm tắt do AI tạo và bình luận code nội tuyến. Mỗi bình luận bao gồm mức độ nghiêm trọng (Critical, High, Medium, Low), giải thích vấn đề và đề xuất bản vá.

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_3_view_summary.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=578f0dd82456c64c68c8785c04403f14" alt="Xem Tóm tắt" width="3024" height="1714" data-path="images/code-review/setup_step_3_view_summary.png" />
    </Frame>

    <Frame>
      <img src="https://mintcdn.com/cloudthinker/qPO13J0Sg_1q5VB1/images/code-review/setup_step_3_view_findings.png?fit=max&auto=format&n=qPO13J0Sg_1q5VB1&q=85&s=b11c30f154836e21ec5523361a36f786" alt="Xem Phát hiện" width="3024" height="1714" data-path="images/code-review/setup_step_3_view_findings.png" />
    </Frame>

    Trả lời `@cloudthinker-ai` trên PR để đặt câu hỏi, yêu cầu review lại hoặc bỏ qua review — xem [mention commands](/vi/guide/code-review/mention-commands).
  </Step>
</Steps>

## Chế độ review

Cấu hình chế độ review theo từng kho và chuyển đổi bất cứ lúc nào trong cài đặt kho:

| Chế độ       | Mô tả                                                                                                                           |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| **Fast**     | Phân tích nhanh, chi phí thấp hơn. Lý tưởng cho PR nhỏ và phản hồi nhanh.                                                       |
| **Advanced** | Phân tích sâu được chia cho các agent chuyên biệt về bảo mật, hiệu suất, tính đúng đắn và mẫu. Tốt nhất cho các kho quan trọng. |

## Giám sát pipeline

CloudThinker giám sát pipeline CI/CD của bạn để phát hiện lỗi. Khi pipeline thất bại, CloudThinker:

1. Phát hiện lần chạy pipeline thất bại
2. Lấy và phân tích nhật ký job thất bại
3. Đăng phát hiện và đề xuất bản vá trực tiếp trên PR

Giám sát pipeline có thể bật/tắt theo workspace và **được bật theo mặc định**. Với Azure DevOps, CloudThinker giám sát sự kiện `build.complete` cùng với sự kiện pull request (`git.pullrequest.created`, `git.pullrequest.updated`).

## Cấu hình bộ lọc

Kiểm soát những PR và MR nào CloudThinker review bằng bộ lọc theo từng kho:

* **Bộ lọc nhãn**: Bao gồm hoặc loại trừ PR có nhãn cụ thể
* **Bộ lọc tác giả**: Bao gồm hoặc loại trừ tác giả cụ thể (hữu ích để loại trừ tác giả bot)
* **Bộ lọc nhánh**: Bao gồm hoặc loại trừ nhánh khớp với mẫu cụ thể (lọc theo nhánh đích — nhánh đang được merge vào)

Bộ lọc **Loại trừ** được kiểm tra trước. Tất cả bộ lọc **Bao gồm** phải vượt qua. PR khớp với bộ lọc loại trừ được đánh dấu là **FILTERED** và bỏ qua hoàn toàn.

## Review tăng dần

Khi bạn đẩy commit mới vào PR đang mở, CloudThinker thực hiện **review tăng dần** — chỉ các thay đổi mới được phân tích, không phải toàn bộ PR. Điều này giữ cho review nhanh và tập trung vào những gì thực sự thay đổi.

## Bước tiếp theo

<CardGroup cols={2}>
  <Card title="Mention commands" icon="at" href="/vi/guide/code-review/mention-commands">
    Tương tác với bot review từ bình luận PR — review lại, đặt câu hỏi hoặc bỏ qua review
  </Card>

  <Card title="Leaderboard" icon="trophy" href="/vi/guide/code-review/leaderboard">
    Theo dõi hoạt động review của nhóm và đo lường cải thiện chất lượng code theo thời gian
  </Card>

  <Card title="Convention rules" icon="list-check" href="/vi/guide/code-review/convention-rules">
    Dạy review quy ước lập trình của nhóm bạn bằng các file đã có trong kho
  </Card>

  <Card title="Thông báo" icon="bell" href="/vi/guide/notifications">
    Cấu hình nơi nhận phát hiện code review
  </Card>
</CardGroup>
