Quy trình triển khai dự án bằng Git

Quy trình triển khai dự án bằng Git

Lưu ý cần backup Database trước khi thay đổi bất kỳ điều gì với Database

Có nhiều cách để đưa source code lên remote server: FTP, SCP.. Cách triển khai bằng cách upload file trực tiếp lên server có ưu điểm là tiện lợi, nhanh gọn nhưng khó khăn nếu như cần rollback lại (lỗi, hoặc trả về 1 tính năng cũ) và tiềm ẩn lỗi nếu như upload thiếu file.

Để giải quyết vấn đề này ta có thể dùng git để quản lý version đồng thời dùng để triển khai source code. Ở đây có 2 trường hợp:

1. Trường hợp triển khai mới

  1. Copy link dạng .git, ví dụ: http://git.codelovers.vn/codelovers-vietnam/vclprocess.git

    Lưu ý là đối với http://git.codelovers.vn thì link dạng git@git.codelovers.vn:codelovers-vietnam/vclprocess.git không hoạt động

  2. SSH đến remote server, cd để vào thư mục cần triển khai

  3. Chạy lệnh git clone để lấy source code từ git server về

    git clone git@git.codelovers.vn:codelovers-vietnam/vclprocess.git folder-name

    Với folder-name là tên folder sẽ được tự động tạo ra và source code sẽ được lưu trong đó.

    Nếu khuyết tham số đó thì 1 folder tên là vclprocess sẽ tự động được tạo ra.

    Trường hợp muốn đưa source code ra ngay tại folder hiện tại, không tạo folder mới thì dùng dấu .

    git clone git@git.codelovers.vn:codelovers-vietnam/vclprocess.git .

    Khuyến khích dùng thêm tham số folder-name để source code được đặt có tính cấu trúc, dễ di chuyển qua lại.

  4. Đối với database, ta thường đặt file .sql chứa cấu trúc database trong thư mục docs/sql. Import file này để dựng database trên server mới.

    Database đặt cùng server source:

    mysql -u dbusername -p databasename < /path/to/backupname.sql

    Database đặt trên server khác:

    mysql -h servername -u dbusername -p databasename < /path/to/backupname.sql

  5. Chỉnh thông tin kết nối trong define.inc (app/define.inc) hoặc settings.dat

  6. Chú ý chỉnh thư mục tmp sao cho server Apache hoặc Nginx có full quyền.

    Lý do: Thư mục tmp là nơi service ghi lại log hoặc cache nên user apache/nginx phải có quyền ghi.

    Đối với server chạy Apache

    chown -R apache path/to/tmp
    

    hoặc đối với server chạy Nginx

    chown -R nginx path/to/tmp
    

    Trường hợp xấu nhất thì đổi quyền 777 cho thư mục tmp

    chmod -R 777 path/to/tmp
    
  7. Cài đặt các crontab chạy ngầm nếu có.

  8. Kiểm tra lại nội dung file README.md của source code, kiểm tra lại nội dung webiste đã hiển thị bình thường chưa.

2. Trường hợp update source code (server đang chạy ổn định)

  1. Chạy lệnh git status kiểm tra branch hiện tại và status của git

    $ git status
    On branch production
    Your branch is up-to-date with 'origin/production'.
    
    nothing to commit, working directory clean
    

    Có thể hiểu là source code đang ở branch production

  2. Nếu git đang ở trạng thái "dirty", tức là có file đã bị thay đổi mà chưa được commit lên thì commit các thay đổi đó lên trước khi pull về

    $ git status
    On branch production
    Your branch is up-to-date with 'origin/production'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   index.php
    
    $ git commit -am "this is a message"
    
  3. Chạy lệnh git reflog để nắm lấy trạng thái hiện tại

    $ git reflog
    cefea3f HEAD@{0}: commit: this is a message
    da0224a HEAD@{1}: pull origin production: Fast-forward
    a771722 HEAD@{2}: pull origin production: Fast-forward
    210e426 HEAD@{3}: pull origin production: Fast-forward
    9ea02b1 HEAD@{4}: pull origin production: Fast-forward
    732de5a HEAD@{5}: pull origin production: Fast-forward
    e9509d1 HEAD@{6}: commit: modify gitignore
    

    Commit cefea3f chính là commit hiện tại mà source code đang nằm.

  4. Chạy lệnh git pull origin production

  5. Kiểm tra xem chương trình có chạy ổn không. Nếu không ngay lập tức chạy lệnh để đưa source code về trạng thái commit cũ

    git reset --hard cefea3f