Quá trình deploy được thực hiện trên Jenkins thông qua 2 sever UAT và Staging. Cụ thể từng bước như sau

I: Xây dựng quá trình deploy

Bước 1: Tạo Job Jenkins

Dùng tài khoản Jenkins đã được cung cấp, vào Jenkins, bấm vào mục New Item để tiến hành tạo job. Tại đây, chúng ta đặt tên cho job, chọn type là pipeline, ở mục “Copy from” có thể điền tên của các job đang chạy như: svg_editor, octokit-web… Việc dùng Copy from sẽ clone toàn bộ setting của job được chọn vào job đang tạo. Cuối cùng là bấm “OK” để hoàn tất quá trình tạo.

Bước 2: Chỉnh lại Job Jenkins

Sau khi tạo xong, Jenkins sẽ đưa người dùng tới trang chỉnh sửa. Kéo xuống phần “github project” và chỉnh lại url ứng với git muốn deploy, tương tự với mục repository url trong phần pipeline.

Ở mục “Branches to build” chọn branch muốn dùng để deploy (thường đặt tên là deploy”

Bước 3: Tạo git webhook và branch

Truy cập vào repository muốn deploy bằng tài khoản có quyền admin, vào “Setting” -> “Webhooks”. Bấm “Add webhook”, ở mục Payload URL, điền url của trang Jenkins và thêm hậu tố “/github-webhook/”, type là application/json, bật Active và hoàn tất

Sau đó tạo branch dùng để deploy, CHÚ Ý: branch deploy phải có tên giống tên đã đặt trong mục “Branches to build” trên Jenkins.

Bước 4: Tạo Jenkinsfile

Để tiết kiệm thời gian, mọi người truy cập vào svg_editor hoặc octokit-web, nhánh deploy, tìm file Jenkinsfile ở thư mục ngoài và tải xuống.

Mở Jenkinsfile lên và thực hiện các bước chỉnh sửa tùy theo dự án deploy, ở đây deploy Octokit gồm 2 source code khác nhau nên sẽ có 2 đường dẫn trong mỗi sever. Đối với các dự án có nhiều hoặc ít code hơn thì cần phải chỉnh lại logic, nhưng không quá phức tạp. Không cần phải tạo thư mục sẵn trên sever hoặc S3 vì nó sẽ tự tạo. Ngoài ra, mọi người có thể add email của mình vào các mục emailext để mỗi khi deploy, success, failed đều sẽ gửi email về.

Upload Jenskinfile vào nhánh dùng để deploy, lúc này nếu Jenkins sẽ tự động chạy.

Trong trường hợp Jenkins không chạy thì chúng ta truy cập lại Job đó trên Jenkins, xem nguyên nhân lỗi và bấm chạy lại.

Bước 5: Chỉnh Nginx

Truy cập vào sever staging, tạo file config và hướng vào folder chạy file build.

Reset Nginx và chạy.

II: Chi tiết quá trình deploy

Mỗi khi có commit được đẩy lên, git sẽ gửi webhook tới Jenkins, Jenkins sẽ kiểm tra xem job nào chạy repository tương ứng, job kiểm tra xem nhánh deploy có commit mới không, nếu có thì sẽ tiến hành chạy job.

Quá trình job chạy sẽ dựa hoàn toàn vào Jenkinsfile.

Cụ thể trong Jenkinsfile sẽ chưa 3 stage.

  1. Build

Jenkins sẽ dùng các thông tin được cấp để truy cập vào sever UAT, cd vào thư mục đã được nhập trên Jenskinfile, nếu không có sẽ tự tạo mới. Sau đó git pull code nhánh deploy, nếu chưa có code thì sẽ git clone repo rồi checkout sang nhánh deploy.

Sau đó tiến hành run build với các code frontend, còn laravel thì không cần.

  1. Push lên S3 và đánh Tag

Jenkins zip lại các file build và push lên S3 theo version, bắt đầu từ bản 1.0.1 và tự động tăng dần lên, để tăng thành 1.1.x hoặc 2.x.x thì cần chỉnh trong Jenkinsfile. File push lên S3 gồm các code chứa trong Jenkinsfile, và được lưu trữ chung trong prefix theo version. Nếu đẩy lên thành công thì tiến hành đánh tag cho commit.

  1. Deploy

Jenkins truy cập vào server Staging, tải file code vừa upload, giải nén và chạy các câu lệnh cần thiết để deploy.

Hoàn tất quá trình deploy

III: Đánh Tag cho commit

Mọi commit khi được đẩy lên S3 thành công đều sẽ được đánh tag theo version đã nói ở trên. Việc đánh tag sẽ giúp dễ dàng theo dõi quá trình deploy và thuận tiện trong việc rollback. Nếu project gồm nhiều repo thì việc đánh tag sẽ tiến hành trên tất cả repo đó.

Ví dụ ở bên dưới khi svg_editor deploy sẽ được đánh tag và octokit-web cũng sẽ được đánh tag dù không diễn ra sự thay đổi trong code.

By admin