1. Giới thiệu
Trong bối cảnh công nghệ phần mềm không ngừng phát triển, việc tự động hóa quy trình làm việc – từ kiểm thử, xây dựng đến triển khai – đã trở thành một yếu tố không thể thiếu đối với mọi dự án. Các công cụ CI/CD (Continuous Integration/Continuous Deployment) không chỉ giúp tăng tốc quá trình phát triển mà còn đảm bảo chất lượng sản phẩm cao hơn. Trong hành trình đó, GitHub Actions đã nổi lên như một giải pháp mạnh mẽ, tích hợp trực tiếp vào môi trường làm việc của GitHub, giúp đơn giản hóa và tối ưu hóa các công việc thường ngày của các dev. GitHub Actions là một công cụ CI/CD mạnh mẽ, được tích hợp trực tiếp vào GitHub, giúp tự động hóa quy trình phát triển phần mềm. Với khả năng hỗ trợ đa dạng các tác vụ, từ cơ bản đến nâng cao, GitHub Actions giúp tăng tốc quá trình phát triển, đảm bảo chất lượng sản phẩm và đơn giản hóa công việc của nhà phát triển.
Mục đích
Bài viết nhằm giúp mọi người làm quen với GitHub Actions – một công cụ tích hợp mạnh mẽ trong hệ sinh thái GitHub. Qua đó, bài viết cung cấp các kiến thức cơ bản về github actions giúp mọi người có thể làm quen và áp dụng github action vào quá trình làm việc.
Tổng quan
GitHub Actions là một nền tảng tự động hóa được tích hợp trực tiếp trên GitHub, cho phép tạo và quản lý các workflow tự động để thực hiện các tác vụ như test, build, và deploy. Với GitHub Actions, các tác vụ có thể được kích hoạt dựa trên nhiều sự kiện khác nhau xảy ra với các nhánh code. Nền tảng này sử dụng các tệp cấu hình định dạng YAML để định nghĩa các workflow, giúp dễ dàng đọc và chỉnh sửa. Ngoài ra, GitHub Actions cũng hỗ trợ tích hợp với hàng ngàn action có sẵn trên GitHub Marketplace, tạo điều kiện thuận lợi cho việc mở rộng chức năng theo nhu cầu cụ thể của từng dự án.
Lợi ích
GitHub Actions mang lại nhiều lợi ích đáng kể trong việc xây dựng các pipeline CI/CD hiện đại:
- Tự động hóa quy trình phát triển: Giúp tự động hóa các bước test, build và deploy, từ đó giảm thiểu sự can thiệp thủ công và rủi ro do lỗi con người.
- Tích hợp liền mạch: Vì được tích hợp trực tiếp trên GitHub, việc thiết lập và quản lý workflow trở nên dễ dàng, đồng thời giúp tăng cường sự liên kết giữa mã nguồn và quy trình triển khai.
- Khả năng mở rộng và tùy chỉnh cao: Có thể sử dụng các action có sẵn từ cộng đồng hoặc tạo riêng các custom action phù hợp với yêu cầu của dự án.
- Tăng tốc quá trình phát triển: Với việc tự động hóa các công việc tẻ nhạt và lặp đi lặp lại, GitHub Actions giúp giảm thời gian kiểm thử và triển khai, từ đó đẩy nhanh tiến độ phát triển sản phẩm
- Bảo mật và quản lý dễ dàng: Hỗ trợ quản lý secrets, token và các biến môi trường một cách an toàn, giúp bảo vệ thông tin nhạy cảm trong quá trình CI/CD. Nhờ những ưu điểm vượt trội này, GitHub Actions đã trở thành một công cụ không thể thiếu trong các pipeline CI/CD hiện đại, giúp các team lập trình làm việc hiệu quả hơn và tập trung vào việc cải thiện chất lượng sản phẩm.
2. Các khái niệm cơ bản
Định nghĩa
GitHub Actions là một nền tảng tự động hóa tích hợp trực tiếp trong GitHub, cho phép xây dựng các quy trình tự động (workflow) để thực hiện các tác vụ như test, build và deploy ứng dụng. Với GitHub Actions, các sự kiện như push, pull request, hoặc các sự kiện định sẵn theo lịch có thể kích hoạt các workflow, giúp tiết kiệm thời gian và giảm thiểu lỗi do thao tác thủ công của con người.
Cách hoạt động
GitHub Actions hoạt động dựa trên việc định nghĩa các workflow thông qua các tệp cấu hình YAML. Khi một sự kiện được kích hoạt, hệ thống sẽ:
- Đọc tệp YAML tương ứng trong thư mục .github/workflows của repository
- Thực hiện các job được cấu hình trong workflow
- Mỗi job lại được chia thành các step để thực hiện các tác vụ cụ thể, từ đó chạy các action có sẵn hoặc custom theo nhu cầu. Quá trình này cho phép tự động hóa các công việc liên tục (CI) và triển khai liên tục (CD) một cách linh hoạt
Các thành phần chính
- Workflow: Workflow là tập hợp các quy trình tự động được định nghĩa trong tệp YAML. Nó xác định khi nào và làm thế nào các tác vụ sẽ được thực hiện, bao gồm các job và step cần chạy. Mỗi workflow thường được lưu trữ trong thư mục .github/workflows của repository.
- Job: Job là một đơn vị công việc trong workflow, bao gồm một tập hợp các step cần thực hiện. Mỗi job chạy trên một môi trường riêng biệt (runner) và có thể thực hiện song song với các job khác nếu không có sự phụ thuộc lẫn nhau.
jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Install dependencies run: npm install
- Runner: Runner là môi trường (ví dụ: Ubuntu, Windows, macOS) nơi các job được thực thi.
jobs: build: runs-on: ubuntu-latest
- Step: Step là đơn vị nhỏ nhất trong một job, thực hiện một tác vụ cụ thể như chạy một lệnh, thực hiện một script hay gọi một action. Các step được thực hiện tuần tự trong một job, tạo nên quá trình xử lý liên tục của workflow.
steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '14'
- Action: Action là các module có thể tái sử dụng, được thiết kế để thực hiện một tác vụ nhất định. Có thể sử dụng các action có sẵn từ GitHub Marketplace hoặc tạo ra các action tùy chỉnh riêng. Action giúp đơn giản hóa việc xây dựng các workflow phức tạp thông qua việc chia nhỏ các nhiệm vụ thành các thành phần độc lập. Ví dụ một số action: actions/checkout@v2, actions/setup-node@v2. Ngoài ra thì có thể custom action riêng nếu action có sẵn không đáp ứng đủ nhu cầu dự án.
- Event: Events là các sự kiện kích hoạt workflows. GitHub cung cấp nhiều sự kiện khác nhau, chẳng hạn như khi có push, pull request trên nhánh nào đó
on: push: branches: - main pull_request: branches: - main
3. Cách tạo workflow với Github Actions
- Truy cập vào một repository trên github
- Chọn tab Actions
- Chọn New workflow
- Tại đây có thể chọn workflow có sẵn hoặc chọn
set up a workflow yourself
nếu muốn tự viết tạo file workflow từ đầu
Dưới đây là một ví dụ về một workflow về việc kiểm tra (test), xây dựng (build) dự án Node.js mỗi khi có commit hoặc pull request vào nhánh main cùng với comment chi tiết cho từng lệnh:
name: Node.js CI on: push: branches: [ "main" ] # Kích hoạt workflow khi có commit đẩy lên nhánh main pull_request: branches: [ "main" ] # Kích hoạt workflow khi có pull request nhắm tới nhánh main jobs: build: runs-on: ubuntu-latest # Chạy job trên môi trường Ubuntu mới nhất strategy: matrix: node-version: [18.x, 20.x, 22.x] # Chạy job với 3 phiên bản Node.js khác nhau env: # Thiết lập biến môi trường toàn cục cho job # Sử dụng secret (được cấu hình tại Repository Settings > Secrets) để lưu thông tin secret API_KEY: ${{ secrets.API_KEY }} steps: # Bước 1: Checkout mã nguồn từ repository để đảm bảo toàn bộ source code đã sẵn sàng cho các step tiếp theo - uses: actions/checkout@v4 # Bước 2: Cài đặt Node.js theo phiên bản được chỉ định từ matrix, đồng thời kích hoạt cache cho npm - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' # Bước 3: Cài đặt các dependency của dự án - name: Install Dependencies run: npm ci # Bước 4: Build dự án - name: Build Project run: npm run build --if-present # Bước 5: Chạy test cho dự án, có thể sử dụng biến môi trường API_KEY nếu cần - name: Run Tests run: npm test env: API_KEY: ${{ secrets.API_KEY }}
4. Kết luận
Qua bài viết, chúng ta đã cùng khám phá các khái niệm cơ bản như syntax YAML, cách thiết lập các job, runner, steps, và action; cũng như việc áp dụng matrix để kiểm thử trên nhiều phiên bản Node.js và sử dụng secrets để bảo mật thông tin nhạy cảm. Hy vọng rằng bài viết này đã mang lại cho mọi người một cái nhìn tổng quan và những kiến thức cần thiết để bắt đầu hoặc nâng cao việc tự động hóa dự án với GitHub Actions.