Triển khai CD cho dự án phát triển Website với Gitlab-CI và AWS S3

by minhnn44
140 views

Article overview

Giả sử chúng ta phát triển một sản phẩm Website với ReactJS và sử dụng Static Website Hosting của AWS S3. Mỗi lần deploy đều cần thực hiện build source và upload manual.
Mục tiêu là triển khai CD để thay thế cho các công việc manual không cần thiết và giảm thiểu các sai sót ngoài ý muốn.

Tổng quan về các công nghệ sử dụng:

  • ReactJS Website
  • Gitlab-CI
  • AWS S3, AWS CLI
  • Môi trường MacOS

Table of contents

Chúng ta cần một số bước sau:

  • Liên kết và khởi tạo Runner với Gitlab repository
  • [Cài đặt và cấu hình môi trường tại thiết bị chạy service runner](## Cài đặt và cấu hình môi trường tại thiết bị chạy service runner)
  • [Cấu hình các job CI/CD với .gitlab-ci.xml và Gitlab-CI](## Cấu hình các job CI/CD với gitlab-ci.xml và Gitlab-CI)

Cài đặt và cấu hình môi trường tại thiết bị chạy service runner

Giả định ở thiết bị MacOS chạy service runner đã build được Website ReactJS, chúng ta sẽ skip qua phần cài đặt cho ReactJS. Đầu tiên, chúng ta cần cài đặt AWS CLI.
Sau khi cài đặt xong, ta thực hiện config với thông tin của AWS User có quyền deploy lên AWS S3 với câu lệnh sau:

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

Cấu hình các job CI/CD với gitlab-ci.xml và Gitlab-CI

Đầu tiên, thay vì upload bằng tay các file trong thư mục build/ chúng ta sẽ sử dụng command aws s3 sync như sau:
aws s3 sync build/ s3://ww95 với ww95 là tên của Bucket đang Host Website.
Sau đó, chúng ta sẽ cài đặt command package.json như sau:

  "scripts": {
    "build": "react-scripts build", // Build source code để deploy
    "deploy": "aws s3 sync build/ s3://ww95" // Thực hiện deploy lên S3
  },

Tiếp đó, ta sẽ cấu hình .gitlab-ci.yml để hệ thống tự động deploy khi có thay đổi trên nhánh master.

stages:
  - Deployment
deploy:
  stage: Deployment
  before_script: []
  only:
      - master
  allow_failure: true
  script:
    - yarn install
    - yarn build
    - yarn deploy

Tuy nhiên, khi chạy thực tế trên Gitlab-CI ta sẽ gặp lỗi sau:

Treating warnings as errors because process.env.CI = true.
Most CI servers set it automatically. 
Failed to compile.

Để giải quyết vấn đề này ta phải setting lại process.env.CI = false bằng hai cách sau:

  • Thay đổi cấu hình .gitlab-ci.yml từ yarn build -> CI=false yarn build.
  • Cài đặt biến môi trường trong Gitlab-CI như ảnh sau

Sau đó merge code vào master, và hưởng thành quả. Từ giờ các bạn không cần phải deploy bằng tay nữa rồi, chúc các bạn may mắn.

Authors

MinhNN44

1 comment

Sam August 4, 2021 - 12:34 PM

Rất tốt, cố gắng hơn nữa nhé em!

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like

%d bloggers like this: