Triển khai CI/CD với gitlab
Trong bài viết này mình sẽ nói về cách triển khai CI/CD một rails app với gitlab và deploy lên heroku.
- CI/CD là gì?
CI/CD là viết tắt của Continuous Integration(CI) và Continuous Delivery(CD), khái niệm này được đưa ra từ năm 1991. Đây là một quy trình hỗ trợ cho việc phát triển phần mềm.
CI là quy trình để build và test tự động. Mỗi một commit khi được push lên sẽ được build các package cần thiết và chạy test. Các lệnh này được định nghĩa từ trước.
CD là quy trình để tự động deploy lên môi trường test, staging hay production.
Qua đây ta có thể thấy tác dụng của CI/CD là tự động hoá việc buil, test, deploy.
2. Triển khai
Cách làm của mình ở phần này sẽ là:
Tạo một rails app -> config gitllab-ci -> deploy lên heroku
Khởi tạo 1 rails app:
Có lưu ý ở phần này là Heroku không allow SQLite nên ta sẽ thay thế bằng PostgreSQL.
Mình dùng macOS nên trước tiên phải cài PostgreSQL thông qua brew:
brew install postgresql
Tạo một app rails:
rails new rails_heroku -d postgresql
Tạo một trang welcome đơn giản:
rails g controller welcome index
Sửa lại trang root:
# config/routes.rb
root 'welcome#index'
Commit và push lên repository trên gitlab.
Config project
Khi push một commit lên gitlab, gitlab sẽ tìm và chạy file .gitlab-ci.yml. Trong bài viết này, mình sẽ tạo 1 file gitlab-ci đơn giản, có 2 stages là test và deploy:
test:
stage: test
script:
- echo "everything OK!"
staging:
stage: deploy
script:
- gem install dpl
- dpl --provider=heroku --app=heroku_app_name --api-key=$HEROKU_STAGING_API_KEY
only:
- master
Trong file này đã định nghĩa 2 stage:
- test: stage này khi chạy sẽ hiển thị ra dòng chữ “everything OK!”
- staging: stage này dùng để deploy app của ta lên heroku. Để thực hiện được bước này ta cần tạo một app trên heroku có tên là heroku_app_name. $HEROKU_STAGING_API_KEY được lấy từ link tại mục API Key. Ta cần add key này vào project trên gitlab theo đường dẫn Settings > CI/CD > Variables.
Tạo một commit
git add .
git commit -m 'add file gitlab-ci'
git push origin master
Kiểm tra trên gitlab
Kết quả:
Truy cập vào đường link được sinh ra khi tạo app trên heroku.