> ## 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.

# Releases

> Phân tích một release trước khi phát hành, đọc rủi ro và các bước tiếp theo, rồi ghi lại quyết định Approve hoặc Hold mà cả nhóm đều thấy.

Báo cáo release trả lời một câu hỏi: tập thay đổi này có an toàn để phát hành không? Bạn chọn một release trong repository đã kết nối, CloudThinker đọc diff thực tế so với release trước, và bạn nhận được các rủi ro, các bước cần làm và nơi ghi lại **Approve** hoặc **Hold**.

## Điều kiện tiên quyết

* Một repository được kết nối qua [thiết lập Review](https://docs.cloudthinker.io/vi/guide/code-review/setup.md) trên GitHub, GitLab, Bitbucket, Azure DevOps hoặc AWS CodeCommit.
* Vai trò workspace phù hợp với việc bạn muốn làm. Xem [vai trò](https://docs.cloudthinker.io/vi/guide/security/roles.md).

  | Hành động | Ai có thể làm |
  | - | - |
  | Đọc báo cáo và tải PDF | Admin, Developer, Viewer |
  | Phân tích release, ghi quyết định, xử lý các bước, dùng **Fix with CloudThinker** | Admin |

## Phân tích một release

**1. Mở Analyze release**

Vào **Review → Releases** và nhấn **Analyze release**.

**2. Chọn repository và release**

Chọn **Repository**. Mỗi release là một Git tag. CloudThinker liệt kê các tag mới nhất trước và chọn sẵn **Not released yet** khi nhánh mặc định có thay đổi kể từ release gần nhất. Trên nút phân tích, lựa chọn này được gọi là **unreleased changes**. Dùng ô tìm kiếm để tìm nhánh hoặc tag, hoặc dán một commit ID.

AWS CodeCommit không hỗ trợ tag, nên trên CodeCommit bộ chọn chỉ cung cấp nhánh.

**3. Kiểm tra mốc so sánh**

CloudThinker tự chọn mốc so sánh: release trước đó trên cùng dòng. Dòng release là chuỗi các tag nối tiếp nhau trong lịch sử Git. Các tag trên nhánh mặc định tạo thành một dòng, còn một tag trên nhánh tách ra từ đó, chẳng hạn nhánh hotfix, bắt đầu một dòng riêng. Để so sánh với thứ khác, nhấn **Change** cạnh mốc so sánh và chọn release, nhánh hoặc commit khác.

**4. Bắt đầu phân tích**

Nhấn **Analyze** (nút ghi tên release, ví dụ **Analyze unreleased changes**). Quá trình mất khoảng 5 phút và bạn có thể rời trang. Không có thông báo khi hoàn tất, nên hãy kiểm tra tab **Needs decision**.

**Trạng thái thành công:** release hiển thị **Analyzing**, rồi xuất hiện trong tab **Needs decision** khi báo cáo sẵn sàng.

Nếu release đã có báo cáo, hộp thoại sẽ cung cấp **Open report** và **Analyze again**. Phân tích lại tạo báo cáo mới; báo cáo cũ được đánh dấu **Replaced** và vẫn đọc được, nhưng chỉ báo cáo mới nhất nhận quyết định.

> [!TIP]
>
> Mặc định, phân tích chỉ bắt đầu khi có người nhấn **Analyze release**. Để tạo báo cáo cho mọi tag được push, bật **Analyze new release tags** trong mục **Review** của **Review → Settings**. Cài đặt này chỉ hiển thị khi báo cáo release được bật cho workspace của bạn. Nếu không thấy, hãy liên hệ bộ phận hỗ trợ. Mỗi báo cáo là một lượt chạy agent, nên hãy để tắt nếu bạn tạo tag thường xuyên.

## Đọc báo cáo

Thẻ trên cùng đưa ra kết luận:

| Trường | Ý nghĩa |
| - | - |
| Status | **Hold recommended** khi còn một rủi ro chặn đang mở, ngược lại là **Ready to approve** |
| Review Quality | Điểm review (trên thang 10) của các PR và MR trong release, có trọng số theo mức thay đổi của từng PR/MR. **Not scored** khi không có PR/MR nào được review |
| Impact at risk | Tỷ lệ kích thước release ([Impact](https://docs.cloudthinker.io/vi/guide/code-review/analytics.md#cách-tính-điểm)) nằm trong các PR hoặc MR có rủi ro (xem bên dưới) |

Một PR hoặc MR được tính là có rủi ro khi có bất kỳ điều nào sau đây:

* Có rủi ro chặn nêu đến PR/MR đó.
* PR/MR đó có phát hiện mức high hoặc critical đang mở.
* Review chưa từng review PR/MR đó.

Ví dụ, một release gồm ba PR với Impact 50, 30 và 20, trong đó chỉ PR 30 có phát hiện mức high đang mở, sẽ hiển thị 30% có rủi ro.

Bên dưới là các ô **Commits**, **Lines**, **Reviewed by CloudThinker** và **Pipeline on head**. **Pipeline on head** là trạng thái CI của commit head của release và liên kết đến lượt chạy đó trong [Pipelines](https://docs.cloudthinker.io/vi/guide/code-review/pipelines.md). Ô này hiển thị **No pipeline seen** khi Review không có lượt chạy nào cho commit đó. Tiếp theo là ba mục không bao giờ lặp lại nhau:

| Mục | Câu hỏi được trả lời |
| - | - |
| Risks | Vì sao release này có thể không an toàn. Mỗi rủi ro là **Blocking** hoặc **Watch**, kèm **Evidence** và **Mitigation** |
| Steps | Cần làm gì, được nhóm thành **Before you ship**, **Recommended** và **After rollout** |
| What changed | Những gì được phát hành, mỗi thay đổi được gắn nhãn Feature, Fix, Breaking change, Data change, Dependency change, Infrastructure change hoặc Internal change |

Rủi ro là **Blocking** khi cần có người sửa hoặc chấp nhận rõ ràng trước khi phát hành. Rủi ro là **Watch** khi việc triển khai cần chú ý nhưng bằng chứng chưa đủ để giữ lại. CloudThinker kiểm tra chín lĩnh vực rủi ro trên mọi release và chỉ liệt kê những lĩnh vực quan trọng với release đó:

| Lĩnh vực rủi ro | Câu hỏi đặt ra |
| - | - |
| Security and access | Ranh giới truy cập, danh tính, secret hoặc tin cậy có thể thay đổi không? |
| Payment and entitlements | Tiền, credit, hạn mức hoặc quyền lợi có thể thay đổi không? |
| Data and migrations | Dữ liệu có thể bị mất, bị khóa, bị đọc sai hoặc trở nên không tương thích không? |
| Review assurance | Có commit, test hoặc phát hiện quan trọng nào chưa được giải quyết không? |
| Rollback safety | Thay đổi có thể được dừng, rollback hoặc forward-fix một cách an toàn không? |
| Blast radius | Một lỗi có thể ảnh hưởng đến bao nhiêu người dùng, dịch vụ, region hoặc tenant? |
| Public API contract | Client, consumer sự kiện hoặc hợp đồng đã lưu có thể bị phá vỡ không? |
| Infrastructure and deployment | Thứ tự triển khai, dung lượng, cấu hình hoặc health check có thể thất bại không? |
| Dependency change | Dependency có thêm rủi ro chuỗi cung ứng, tương thích hoặc runtime không? |

Báo cáo cũng liệt kê các PR hoặc MR của release cùng trạng thái review, và một **Quality map** làm nổi bật các thay đổi có chất lượng thấp, chưa được review hoặc có rủi ro chặn. Nếu CloudThinker không đọc được một phần của khoảng thay đổi, ghi chú **Assessment limits** sẽ nói rõ thay vì phỏng đoán.

> [!NOTE]
>
> Các con số là ảnh chụp tại một thời điểm. Nếu bạn sửa một phát hiện đang mở sau khi có báo cáo, báo cáo vẫn hiển thị phát hiện đó. Phân tích lại release để có số liệu hiện tại.

## Xử lý các bước

Mỗi bước đang mở có **Mark resolved** và **Dismiss**. Dismiss yêu cầu lý do, và **Re-open** hoàn tác cả hai. Khi bạn phân tích lại cùng release, các bước đã xử lý được đánh dấu **Carried over** nếu hướng dẫn không đổi, nên bạn không phải làm lại. Đánh dấu một bước đã giải quyết là khẳng định của bạn; chỉ khi phân tích lại mới xác nhận được rủi ro đã hết.

Để được hỗ trợ với các bước đang mở, nhấn **Fix with CloudThinker**:

| Tùy chọn | Điều xảy ra |
| - | - |
| Fix all findings | Dù tên như vậy, tùy chọn này xử lý các bước đang mở của báo cáo. Tùy chọn này mở một cuộc hội thoại Chat, trong đó CloudThinker làm việc trên một nhánh tạo từ commit head của release. CloudThinker thực hiện từng thay đổi, chạy các test liên quan và báo cáo những gì đã thay đổi. Kiểm tra công việc trong cuộc hội thoại trước khi phát hành |
| Analyze in Chat | Mở Chat với báo cáo này làm ngữ cảnh để bạn đặt câu hỏi trước |

Nhấn **Download PDF** để chia sẻ báo cáo bên ngoài CloudThinker.

## Approve hoặc hold

**1. Đưa ra quyết định**

Trên báo cáo, nhấn **Approve** hoặc **Hold**. Khi vẫn còn rủi ro chặn đang mở, nút hiển thị **Approve anyway**.

**2. Thêm ghi chú**

Ghi chú là tùy chọn, với hai ngoại lệ. Approve khi còn rủi ro chặn đang mở sẽ hỏi **Why is it safe to ship?** Hold một release không có rủi ro chặn sẽ hỏi **Why are you holding it?**

**Trạng thái thành công:** báo cáo hiển thị "Approved by" hoặc "Held by" kèm tên và ghi chú của bạn, và release chuyển sang tab **Approved** hoặc **On hold**.

Quyết định chỉ là một bản ghi trong CloudThinker. Quyết định không merge, gắn tag hay deploy, và không có gì được gửi đến Git provider của bạn, nên không bao giờ chặn pipeline. Để đổi sau này, nhấn **Change decision**. Các báo cáo đã bị thay thế giữ nguyên quyết định đã có.

> [!WARNING]
>
> Báo cáo chỉ giữ quyết định và ghi chú mới nhất. **Change decision** ghi đè quyết định trước, và không có lịch sử quyết định. Nếu cần bản ghi audit, nhấn **Download PDF** ngay sau khi quyết định: PDF bao gồm quyết định và ghi chú.

Danh sách **Releases** hoạt động như một hàng đợi quyết định:

| Tab | Nội dung |
| - | - |
| Needs decision | Báo cáo mới nhất của mỗi dòng release chưa có quyết định |
| On hold | Các release đã bị hold |
| Approved | Các release đã được approve |
| All | Tất cả. Dùng các chip trạng thái cho **Analyzing**, **Failed** và **Replaced** |

## Khắc phục sự cố

> **Hộp thoại báo This repository has no releases or unreleased changes to analyze yet**
>
> Không có tag nào để phân tích và nhánh mặc định không có gì mới kể từ release gần nhất. Push một tag, hoặc chọn nhánh hoặc commit bằng ô tìm kiếm.

> **That base was not found**
>
> Mốc so sánh bạn chọn không tồn tại hoặc không phải tổ tiên của release. Nhấn **Change** và chọn mốc khác.

> **Release hiển thị Analysis failed**
>
> Quá trình phân tích dừng trước khi hoàn tất và không có điểm nào được công bố. Bắt đầu phân tích mới từ **Analyze release**.

> **Thiếu số lượng merge request**
>
> AWS CodeCommit không thể liên kết commit với PR, nên báo cáo đánh dấu các số đó là không khả dụng. Phân tích rủi ro vẫn đọc toàn bộ diff.

> **Hai lần phân tích cùng một release cho kết quả khác nhau**
>
> Báo cáo là đánh giá của CloudThinker về diff, nên chi tiết có thể thay đổi giữa các lượt chạy. Hãy coi trạng thái và các rủi ro chặn là tín hiệu, không phải những thay đổi nhỏ về số liệu.

## Bước tiếp theo

> **[Pipelines](https://docs.cloudthinker.io/vi/guide/code-review/pipelines.md)**
>
> Tìm nguyên nhân gốc cho mọi lượt chạy CI thất bại

> **[Review Insights](https://docs.cloudthinker.io/vi/guide/code-review/analytics.md)**
>
> Theo dõi chất lượng review trên các repository theo thời gian

> **[Learnings](https://docs.cloudthinker.io/vi/guide/code-review/convention-rules.md)**
>
> Ngăn các rủi ro cũ quay lại trong những lần review sau

> **[Tổng quan Review](https://docs.cloudthinker.io/vi/guide/code-review/overview.md)**
>
> Xem mọi thứ Review làm trên các repository của bạn


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.