- vừa được xem lúc

Tự động hóa quy trình làm việc trên GitHub cho ứng dụng Python và React

0 0 1

Người đăng: Vinh Phạm

Theo Viblo Asia

Tự động hóa quy trình làm việc là một bước thiết yếu giúp bạn duy trì chất lượng mã trong các ứng dụng của mình, đặc biệt khi làm việc trên cả mã frontend và backend trong một kho lưu trữ duy nhất.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thiết lập quy trình làm việc tự động trên GitHub cho backend Python (sử dụng Flask hoặc Django) và frontend React.

Các quy trình làm việc này giúp kiểm tra và xác thực các thay đổi mã tự động, đảm bảo rằng bất kỳ sự cố nào cũng được phát hiện sớm.

Chúng ta sẽ giả sử:

  • Bạn đã viết các bài kiểm tra đơn vị cho các thành phần React và các route backend của mình.
  • Dự án của bạn được thiết lập dưới dạng monorepo, với các thư mục riêng biệt cho frontend và backend.
  • Bạn đã quen thuộc với GitHub Actions, nền tảng chúng ta sẽ sử dụng để tự động hóa, và bạn đang sử dụng môi trường ubuntu-latest được cung cấp bởi GitHub.

Bước 1: Tạo quy trình làm việc GitHub Actions

Trong bước này, chúng ta sẽ xác định hai quy trình làm việc GitHub Actions, một cho frontend và một cho backend. Các quy trình làm việc này sẽ tự động chạy các bài kiểm tra bất cứ khi nào có thay đổi được đẩy lên nhánh main.

Vậy GitHub Action Workflow là gì?

Một GitHub Action workflow là một tập hợp các hướng dẫn cho GitHub biết cách tự động thực hiện các tác vụ dựa trên các sự kiện nhất định. Ở đây, quy trình làm việc của chúng ta sẽ chạy các bài kiểm tra và triển khai ứng dụng chỉ khi các bài kiểm tra vượt qua. Các quy trình làm việc được kích hoạt bởi các sự kiện, chẳng hạn như một push lên một nhánh, và bao gồm các job xác định các tác vụ mà chúng ta muốn tự động hóa.

Quy trình CI/CD Frontend

Hãy bắt đầu bằng cách tạo một tệp mới trong kho lưu trữ của bạn tại .github/workflows/frontend.yml. Tệp này sẽ thiết lập một quy trình tự động để xử lý việc kiểm tra và triển khai frontend. Sau đó, xác định quy trình làm việc với nội dung sau:

name: Frontend CI/CD Pipeline on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Cache Node.js modules uses: actions/cache@v3 with: path: ./frontend/node_modules key: ${{ runner.os }}-node-${{ hashFiles('./frontend/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '20' - name: Install frontend dependencies run: yarn install working-directory: ./frontend - name: Run frontend tests run: yarn test working-directory: ./frontend

Dưới đây là phân tích chức năng của từng phần:

  • on: push: Điều này kích hoạt quy trình làm việc bất cứ khi nào có thay đổi được đẩy lên nhánh main.
  • Checkout code: Bước này sử dụng GitHub Action để kiểm tra mã kho lưu trữ.
  • Cache Node.js modules: Lưu trữ node_modules để tăng tốc độ thực thi quy trình làm việc trong các lần chạy tiếp theo.
  • Set up Node.js: Thiết lập môi trường Node.js để cài đặt và kiểm tra dependency.
  • Install dependencies and run tests: Cài đặt các gói bằng Yarn và sau đó chạy các bài kiểm tra đã viết sẵn để xác minh rằng frontend hoạt động như mong đợi.

Quy trình CI/CD Backend

Bây giờ, hãy tạo một tệp riêng cho quy trình làm việc backend tại .github/workflows/backend.yml. Tệp này sẽ tự động hóa việc kiểm tra và triển khai cho backend Python.

name: Backend CI/CD Pipeline on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Cache Python packages uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('./backend/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.8' - name: Create Virtual Environment run: python3 -m venv venv working-directory: ./backend - name: Install backend dependencies run: | source venv/bin/activate pip install -r requirements.txt working-directory: ./backend - name: Configure DATABASE_URL securely env: DATABASE_URL: ${{ secrets.DATABASE_URL }} run: | if [ -z "$DATABASE_URL" ]; then echo "DATABASE_URL is missing" >&2 exit 1 fi - name: Run tests with pytest run: | source venv/bin/activate pytest tests/ --doctest-modules -q --disable-warnings working-directory: ./backend - name: Deploy to Production if: ${{ success() }} run: | echo "Deploying to production..." - name: Notify on Failure if: ${{ failure() }} run: | echo "Build failed! Sending notification..."

Dưới đây là những gì quy trình làm việc này thực hiện:

  • Kiểm tra mã và lưu trữ các gói Python để thực thi nhanh hơn trong các lần chạy lặp lại.
  • Thiết lập Python và tạo môi trường ảo để cách ly các dependency.
  • Cài đặt dependency trong môi trường ảo từ requirements.txt.
  • Định cấu hình các biến môi trường một cách an toàn với GitHub Secrets. Trong ví dụ này, chúng ta đang sử dụng URL cơ sở dữ liệu được lưu trữ trong một GitHub secret để truy cập an toàn.
  • Chạy các bài kiểm tra backend với pytest, kiểm tra xem các route và chức năng backend hoạt động chính xác.

Bước 2: Định cấu hình Secrets

Vì lý do bảo mật, hãy thiết lập GitHub Secrets để lưu trữ thông tin nhạy cảm, chẳng hạn như chuỗi kết nối cơ sở dữ liệu.

Đầu tiên, hãy truy cập kho lưu trữ GitHub của bạn và chọn Settings.

Tiếp theo, trong thanh bên, chọn "Secrets and variables", sau đó nhấp vào "Actions".

Cuối cùng, hãy thêm một repository secret mới:

  • Name: DATABASE_URL
  • Value: Chuỗi kết nối cơ sở dữ liệu thực tế của bạn.

Việc sử dụng GitHub Secrets giúp giữ an toàn cho dữ liệu nhạy cảm và ngăn không cho nó xuất hiện trong mã cơ sở của bạn.

Bước 3: Commit và Push các thay đổi

Khi các tệp quy trình làm việc của bạn đã sẵn sàng, hãy commit và push các thay đổi lên nhánh main. Mỗi khi bạn push các thay đổi lên main, GitHub Actions sẽ tự động kích hoạt các quy trình làm việc này, đảm bảo mã của bạn được kiểm tra kỹ lưỡng.

Bước 4: Theo dõi quá trình chạy Workflow

Sau khi push các thay đổi của bạn, hãy điều hướng đến tab Actions trong kho lưu trữ GitHub của bạn để theo dõi quá trình chạy workflow. Dưới đây là những gì bạn sẽ tìm thấy:

  • Workflow runs: Trang này liệt kê mỗi lần workflow được kích hoạt. Bạn có thể thấy liệu workflow đã thành công, thất bại hay đang tiến hành.
  • Logs: Nhấp vào một workflow run cụ thể để xem nhật ký chi tiết. Nhật ký được chia theo các bước, vì vậy bạn có thể thấy chính xác vị trí xảy ra sự cố nếu có sự cố xảy ra.

Xác định sự cố trong nhật ký

Nhật ký của mỗi bước cung cấp thông tin chi tiết về bất kỳ sự cố nào:

  • Nếu dependency không cài đặt được, bạn sẽ thấy thông báo lỗi chỉ rõ gói nào gây ra sự cố.
  • Nếu các bài kiểm tra không thành công, nhật ký sẽ liệt kê các bài kiểm tra cụ thể và lý do thất bại, giúp bạn gỡ lỗi nhanh chóng.
  • Đối với các workflow sử dụng secret, các lỗi liên quan đến secret bị thiếu sẽ xuất hiện trong các bước thiết lập môi trường, cho phép bạn khắc phục bất kỳ sự cố cấu hình nào.

Bằng cách hiểu cách diễn giải các nhật ký này, bạn có thể chủ động giải quyết các sự cố và đảm bảo việc triển khai suôn sẻ, đáng tin cậy.

Kết luận

Bằng cách làm theo các bước này, bạn đã thiết lập quy trình làm việc tự động trên GitHub cho cả frontend và backend của ứng dụng. Thiết lập này đảm bảo các bài kiểm tra của bạn chạy tự động với mỗi lần push lên nhánh main, giúp duy trì chất lượng mã và độ tin cậy cao. Với quy trình làm việc tự động, bạn có thể tập trung hơn vào việc xây dựng các tính năng và ít hơn vào việc kiểm tra mã thủ công, biết rằng quy trình làm việc của bạn sẽ cảnh báo bạn về bất kỳ sự cố nào sớm.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

0 0 63

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

0 0 166

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

0 0 49

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

0 0 63

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 79

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 95