Skip to main content

Setup CI auto deploy.

Giới thiệu

  • Continuous Integration (CI) là một phần trong phát triển phần mềm, nơi các lập trình viên thường xuyên tích hợp (merge) mã nguồn của họ vào nhánh chính của kho lưu trữ. Mỗi lần tích hợp được tự động hóa bởi các bài kiểm tra (tests) và quá trình build, giúp giảm thời gian deploy và phát hiện sớm các lỗi phát sinh.

  • Quy Trình CI Hoạt Động Như Thế Nào?
    • Tích hợp mã nguồn: Lập trình viên đẩy (push) mã nguồn của họ lên kho lưu trữ.
    • Build tự động: Hệ thống CI tự động lấy mã nguồn mới và thực hiện quá trình build để đảm bảo mã có thể biên dịch được.
    • Kiểm tra tự động: Các bài kiểm tra tự động (unit tests, integration tests setup bởi developer) được thực thi để kiểm tra tính đúng đắn của mã nguồn.

Hướng dẫn thiết lập CI cho dự án trên Gitlab:

Dưới đây là hướng dẫn thiết lập Gitlab CI, tự động triển khai ứng dụng lên server test của dự án. (quá trình này sẽ tự động kích hoạt sau mỗi commit, merge tới branch được setup)

  • Summary: Stage duới đây sẽ khởi động một contianer (sử dụng image debian:12.5), tại container này mục before_script sẽ được chạy, mục đích là thiết lập các config cần thiết để kết nối tới server dev mà ta muốn deploy ứng dụng lên đó. Tại mục script, ta kết nối tới server deploy và setup chạy các lệnh cần thiết để deploy ứng dụng.

  • Step 1: Thiết lập các biến môi trường dùng cho kết nối tới server muốn deploy: $SSH_KEY: ssh private key (trước đó hãy đảm bảo đã bỏ public key tương ứng vào file ~/.ssh/authorized_keys tại server deploy) $SSH_IP: IP của server muốn deploy (hãy kiểm tra kỹ firewall của server deploy, đảm bảo port SSH đã được public) $SSH_PORT: Port SSH server của server deploy.

  • Step 2: Đảm bảo server dev có thể pull source code từ https://devops.runsystem.info. Nếu server deploy chưa từng pull source từ Gitlab công ty, có thể setup như sau:

    - Tạo cặp khóa SSH trên giao diện Gitlab.
    - Thêm đoạn duới đây vào file ~/.shh/config tại server deploy:
    ```yml
    Host *
    Compression yes
    LogLevel INFO
    IdentityFile ~/.ssh/id_ed25519
    ForwardAgent yes
    TCPKeepAlive yes
    ServerAliveInterval 60
    ServerAliveCountMax 100
    ```
    File ~/.ssh/id_ed25519 là chứa private-key tạo trên giao diện Gitlab phía trên.
  • Step 3: Tạo mới file .gitlab-ci.yaml tại branch chứa source deploy. Hoặc thêm stage duới đây vào file .gitlab-ci.yaml có sẵn. Sửa các câu lệnh của phần script cho đúng với cấu hình trên server deploy app.

stages:
- deploy

deploy2dev:
stage: deploy

image:
name: debian:12.5
before_script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -yq && apt-get install openssh-client -yq )'
- eval $(ssh-agent -s)
- echo "$SSH_KEY" | tr -d '\r' | ssh-add - >/dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -p $SSH_PORT $SSH_IP >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- ssh -p $SSH_PORT $SSH_USER@$SSH_IP bash -c "
cd /var/www/test-cicd/frontend-web;
git checkout develop;
git pull;
npm install;
exit;
"
  • Step 4: Truy cập vào Build --> Pipelines để theo dõi quá trình chạy.