|
| 1 | +--- |
| 2 | +title: Hiểu về GitHub Actions |
| 3 | +shortTitle: Hiểu về GitHub Actions |
| 4 | +intro: 'Tìm hiểu những kiến thức cơ bản về GitHub Actions, bao gồm các khái niệm cốt lõi và thuật ngữ thiết yếu.' |
| 5 | +redirect_from: |
| 6 | + - /github/automating-your-workflow-with-github-actions/core-concepts-for-github-actions |
| 7 | + - /actions/automating-your-workflow-with-github-actions/core-concepts-for-github-actions |
| 8 | + - /actions/getting-started-with-github-actions/core-concepts-for-github-actions |
| 9 | + - /actions/learn-github-actions/introduction-to-github-actions |
| 10 | + - /actions/learn-github-actions/understanding-github-actions |
| 11 | +versions: |
| 12 | + fpt: '*' |
| 13 | + ghes: '*' |
| 14 | + ghec: '*' |
| 15 | +type: overview |
| 16 | +topics: |
| 17 | + - Fundamentals |
| 18 | +--- |
| 19 | + |
| 20 | +## Tổng quan |
| 21 | + |
| 22 | +{% data reusables.actions.about-actions %} Bạn có thể tạo workflow để build và kiểm thử mỗi pull request vào repository, hoặc triển khai pull request đã merge lên môi trường production. |
| 23 | + |
| 24 | +GitHub Actions không chỉ đơn thuần là DevOps — nó còn cho phép bạn chạy workflow khi có các sự kiện khác xảy ra trong repository. Ví dụ: bạn có thể chạy workflow để tự động thêm nhãn phù hợp mỗi khi có người tạo issue mới trong repository. |
| 25 | + |
| 26 | +GitHub cung cấp máy ảo Linux, Windows và macOS để chạy workflow, hoặc bạn có thể host runner tự quản lý trong trung tâm dữ liệu hoặc hạ tầng đám mây của riêng mình. |
| 27 | + |
| 28 | +## Các thành phần của GitHub Actions |
| 29 | + |
| 30 | +Bạn có thể cấu hình _workflow_ GitHub Actions để kích hoạt khi có _sự kiện_ xảy ra trong repository — ví dụ như mở pull request hoặc tạo issue. Workflow chứa một hoặc nhiều _job_ có thể chạy theo thứ tự tuần tự hoặc song song. Mỗi job sẽ chạy bên trong _runner_ máy ảo riêng của nó, hoặc bên trong container, và có một hoặc nhiều _step_ thực thi script do bạn định nghĩa hoặc chạy _action_ — phần mở rộng có thể tái sử dụng giúp đơn giản hóa workflow. |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | +### Workflow |
| 35 | + |
| 36 | +Workflow là quy trình tự động hóa có thể cấu hình, chạy một hoặc nhiều job. Workflow được định nghĩa bằng file YAML được lưu trong repository và sẽ chạy khi có sự kiện trong repository kích hoạt, hoặc có thể kích hoạt thủ công, hoặc theo lịch đã định. |
| 37 | + |
| 38 | +Workflow được định nghĩa trong thư mục `.github/workflows` của repository. Một repository có thể có nhiều workflow, mỗi workflow thực hiện một tập hợp tác vụ khác nhau. Ví dụ: một workflow build và kiểm thử pull request, workflow khác triển khai ứng dụng mỗi khi có release, và workflow thứ ba thêm nhãn khi có người mở issue. |
| 39 | + |
| 40 | +Bạn có thể tham chiếu một workflow bên trong workflow khác. Để biết thêm thông tin, xem [AUTOTITLE](/actions/using-workflows/reusing-workflows). |
| 41 | + |
| 42 | +Để biết thêm về workflow, xem [AUTOTITLE](/actions/using-workflows). |
| 43 | + |
| 44 | +### Sự kiện (Events) |
| 45 | + |
| 46 | +Sự kiện là hoạt động cụ thể trong repository kích hoạt chạy workflow. Ví dụ: hoạt động có thể bắt nguồn từ GitHub khi có người tạo pull request, mở issue, hoặc push commit vào repository. Bạn cũng có thể kích hoạt workflow chạy theo lịch, bằng cách [POST vào REST API](/rest/repos/repos#create-a-repository-dispatch-event), hoặc thủ công. |
| 47 | + |
| 48 | +Để xem danh sách đầy đủ các sự kiện có thể dùng để kích hoạt workflow, xem [Sự kiện kích hoạt workflow](/actions/reference/events-that-trigger-workflows). |
| 49 | + |
| 50 | +### Job |
| 51 | + |
| 52 | +Job là tập hợp các _step_ trong workflow chạy trên cùng một runner. Mỗi step là script shell sẽ được thực thi, hoặc là một _action_ sẽ được chạy. Các step được thực thi theo thứ tự và phụ thuộc lẫn nhau. Vì mỗi step chạy trên cùng runner, bạn có thể chia sẻ dữ liệu từ step này sang step khác. Ví dụ: một step build ứng dụng và step tiếp theo kiểm thử ứng dụng đã build. |
| 53 | + |
| 54 | +Bạn có thể cấu hình job phụ thuộc vào job khác; theo mặc định, các job không có phụ thuộc chạy song song nhau. Khi một job phụ thuộc job khác, nó sẽ chờ job phụ thuộc hoàn thành trước khi có thể chạy. Ví dụ: bạn có nhiều job build cho các kiến trúc khác nhau không có phụ thuộc, và một job đóng gói phụ thuộc vào các job đó. Các job build sẽ chạy song song nhau, và khi tất cả hoàn thành, job đóng gói mới chạy. |
| 55 | + |
| 56 | +Để biết thêm về job, xem [AUTOTITLE](/actions/using-jobs). |
| 57 | + |
| 58 | +### Action |
| 59 | + |
| 60 | +_Action_ là ứng dụng tùy chỉnh cho nền tảng GitHub Actions thực hiện tác vụ phức tạp thường xuyên lặp lại. Dùng action để giảm lượng code lặp lại trong file workflow. Action có thể pull repository từ GitHub, thiết lập toolchain phù hợp cho môi trường build của bạn, hoặc thiết lập xác thực với nhà cung cấp đám mây. |
| 61 | + |
| 62 | +Bạn có thể viết action của riêng mình, hoặc tìm action dùng trong workflow tại GitHub Marketplace. |
| 63 | + |
| 64 | +{% data reusables.actions.internal-actions-summary %} |
| 65 | + |
| 66 | +Để biết thêm thông tin, xem [AUTOTITLE](/actions/creating-actions). |
| 67 | + |
| 68 | +### Runner |
| 69 | + |
| 70 | +{% data reusables.actions.about-runners %} Mỗi runner có thể chạy một job duy nhất tại một thời điểm. GitHub cung cấp runner Ubuntu Linux, Microsoft Windows và macOS để chạy workflow; mỗi lần chạy workflow sử dụng một máy ảo mới được cung cấp sạch. GitHub cũng cung cấp runner lớn hơn, có sẵn theo các cấu hình khác nhau. Để biết thêm thông tin, xem [AUTOTITLE](/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners). Nếu bạn cần hệ điều hành khác hoặc cần cấu hình phần cứng cụ thể, bạn có thể host runner của riêng mình. Để biết thêm thông tin về runner tự quản lý, xem [AUTOTITLE](/actions/hosting-your-own-runners). |
| 71 | + |
| 72 | +## Tạo workflow ví dụ |
| 73 | + |
| 74 | +GitHub Actions dùng cú pháp YAML để định nghĩa workflow. Mỗi workflow được lưu dưới dạng file YAML riêng trong thư mục `.github/workflows` trong code repository. |
| 75 | + |
| 76 | +Bạn có thể tạo workflow ví dụ trong repository kích hoạt tự động một số lệnh `echo` mỗi khi code được push. Trong ví dụ này, GitHub Actions kiểm tra out (lấy về) code của bạn, cài đặt [bats](https://www.npmjs.com/package/bats) framework kiểm thử, và chạy lệnh bats xuất ra phiên bản phần mềm: `bats -v`. |
| 77 | + |
| 78 | +1. Trong repository, tạo thư mục `.github/workflows/` để lưu file workflow. |
| 79 | +1. Trong thư mục `.github/workflows/`, tạo file mới tên `learn-github-actions.yml` và thêm code sau. |
| 80 | + |
| 81 | + ```yaml |
| 82 | + name: learn-github-actions |
| 83 | + run-name: ${{ github.actor }} is learning GitHub Actions |
| 84 | + on: [push] |
| 85 | + jobs: |
| 86 | + check-bats-version: |
| 87 | + runs-on: ubuntu-latest |
| 88 | + steps: |
| 89 | + - uses: actions/checkout@v4 |
| 90 | + - uses: actions/setup-node@v4 |
| 91 | + with: |
| 92 | + node-version: '20' |
| 93 | + - run: npm install -g bats |
| 94 | + - run: bats -v |
| 95 | + ``` |
| 96 | +
|
| 97 | +1. Commit các thay đổi và push lên repository GitHub. |
| 98 | +
|
| 99 | +File workflow mới của bạn giờ đã được cài đặt trong repository và sẽ tự động chạy mỗi khi có người push thay đổi vào repository. |
| 100 | +
|
| 101 | +Để xem chi tiết lịch sử thực thi của workflow, xem [AUTOTITLE](/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/viewing-workflow-run-history). |
| 102 | +
|
| 103 | +## Hiểu về file workflow |
| 104 | +
|
| 105 | +Để giúp bạn hiểu cách cú pháp YAML được dùng để tạo file workflow, phần này giải thích từng dòng của ví dụ giới thiệu: |
| 106 | +
|
| 107 | +```yaml |
| 108 | +name: learn-github-actions |
| 109 | +``` |
| 110 | +
|
| 111 | +_Tùy chọn_ — Tên của workflow như hiển thị trong tab Actions của repository GitHub. Nếu trường này bị bỏ qua, tên workflow sẽ là đường dẫn tương đối của file workflow tính từ thư mục gốc repository. |
| 112 | +
|
| 113 | +```yaml |
| 114 | +run-name: ${{ github.actor }} is learning GitHub Actions |
| 115 | +``` |
| 116 | +
|
| 117 | +_Tùy chọn_ — Tên cho các lần chạy workflow được tạo từ workflow này, như hiển thị trong danh sách lần chạy workflow trên tab Actions của repository. Ví dụ này dùng biểu thức với context `github` để hiển thị tên tài khoản GitHub của người dùng đã kích hoạt lần chạy workflow. |
| 118 | + |
| 119 | +```yaml |
| 120 | +on: [push] |
| 121 | +``` |
| 122 | + |
| 123 | +Chỉ định trigger cho workflow này. Ví dụ này dùng sự kiện `push`, vì vậy lần chạy workflow được kích hoạt mỗi khi có người push thay đổi vào repository hoặc merge pull request. Đây là trigger dựa trên push vào mọi nhánh; để xem ví dụ về cú pháp chỉ chạy khi push vào nhánh, file, hoặc thẻ cụ thể, xem [AUTOTITLE](/actions/reference/events-that-trigger-workflows). |
| 124 | + |
| 125 | +```yaml |
| 126 | +jobs: |
| 127 | +``` |
| 128 | + |
| 129 | +Nhóm tất cả job chạy trong workflow `learn-github-actions`. |
| 130 | + |
| 131 | +```yaml |
| 132 | + check-bats-version: |
| 133 | +``` |
| 134 | + |
| 135 | +Định nghĩa một job tên `check-bats-version`. Các key con sẽ định nghĩa thuộc tính của job. |
| 136 | + |
| 137 | +```yaml |
| 138 | + runs-on: ubuntu-latest |
| 139 | +``` |
| 140 | + |
| 141 | +Cấu hình job chạy trên phiên bản Ubuntu Linux runner mới nhất. Điều này có nghĩa job sẽ chạy trên máy ảo mới được cung cấp bởi GitHub. |
| 142 | + |
| 143 | +```yaml |
| 144 | + steps: |
| 145 | +``` |
| 146 | + |
| 147 | +Nhóm tất cả các step chạy trong job `check-bats-version`. Mỗi mục được lồng dưới phần này là một action hoặc script shell riêng. |
| 148 | + |
| 149 | +```yaml |
| 150 | + - uses: actions/checkout@v4 |
| 151 | +``` |
| 152 | + |
| 153 | +Từ khóa `uses` chỉ định rằng step này sẽ chạy `v4` của action `actions/checkout`. Đây là action kiểm tra repository của bạn lên runner, cho phép bạn chạy script hoặc action khác trên code của mình (như công cụ build và kiểm thử). Bạn nên dùng action checkout bất cứ khi nào workflow của bạn sẽ chạy trên code của repository. |
| 154 | + |
| 155 | +```yaml |
| 156 | + - uses: actions/setup-node@v4 |
| 157 | + with: |
| 158 | + node-version: '20' |
| 159 | +``` |
| 160 | + |
| 161 | +Step này dùng action `actions/setup-node@v4` để cài đặt phiên bản Node.js được chỉ định trên runner, cho phép bạn truy cập lệnh `npm`. |
| 162 | + |
| 163 | +```yaml |
| 164 | + - run: npm install -g bats |
| 165 | +``` |
| 166 | + |
| 167 | +Từ khóa `run` yêu cầu job thực thi lệnh trên runner. Trong trường hợp này, bạn đang dùng `npm` để cài đặt gói kiểm thử phần mềm `bats`. |
| 168 | + |
| 169 | +```yaml |
| 170 | + - run: bats -v |
| 171 | +``` |
| 172 | + |
| 173 | +Cuối cùng, bạn chạy lệnh `bats` với tham số xuất ra phiên bản phần mềm. |
| 174 | + |
| 175 | +### Trực quan hóa file workflow |
| 176 | + |
| 177 | +Trong sơ đồ này, bạn có thể thấy file workflow vừa tạo và cách các thành phần GitHub Actions được tổ chức theo thứ bậc. Mỗi bước thực thi một action hoặc script shell riêng. Các bước 1 và 2 chạy action, còn các bước 3 và 4 chạy script shell. Để tìm thêm action được xây dựng sẵn cho workflow, xem [AUTOTITLE](/actions/learn-github-actions/finding-and-customizing-actions). |
| 178 | + |
| 179 | + |
| 180 | + |
| 181 | +## Xem hoạt động lần chạy workflow |
| 182 | + |
| 183 | +Khi workflow được kích hoạt, _lần chạy workflow_ thực thi workflow sẽ được tạo. Sau khi lần chạy workflow bắt đầu, bạn có thể xem biểu đồ trực quan về tiến trình chạy và xem hoạt động của từng bước trên GitHub. |
| 184 | + |
| 185 | +{% data reusables.repositories.navigate-to-repo %} |
| 186 | +1. Dưới tên repository, nhấp **Actions**. |
| 187 | + |
| 188 | +  |
| 189 | + |
| 190 | +1. Trong thanh bên trái, nhấp workflow bạn muốn xem. |
| 191 | + |
| 192 | +  |
| 193 | + |
| 194 | +1. Trong "Workflow runs" (Các lần chạy workflow), nhấp tên lần chạy bạn muốn xem. |
| 195 | + |
| 196 | +1. Trong "Jobs", nhấp job `check-bats-version`. |
| 197 | + |
| 198 | +1. Nhật ký hiển thị cách từng step được xử lý. Nhấp vào bất kỳ step nào để mở rộng xem chi tiết. |
| 199 | + |
| 200 | +  |
| 201 | + |
| 202 | +## Các bước tiếp theo |
| 203 | + |
| 204 | +Để tiếp tục học GitHub Actions, xem [AUTOTITLE](/actions/learn-github-actions/finding-and-customizing-actions). |
0 commit comments