Hướng dẫn deploy nodejs lên heroku bằng Travis CI

Vào 1 ngày đẹp trời, bạn hí hửng vì vừa code xong 1 cái web, nhưng bạn không biết deploy nó vô đâu, bạn nhanh tay nhanh chân vô bác google hỏi, bác ấy gợi ý cho bạn nào là GitHub pages, Google Cloud Engine, Heroku, Azure, AWS.. rồi vps.. nhưng tài chính của bạn thì không đủ để duy trì. Bạn đang buồn…
Thì 1 anh hùng xuất hiện. Đúng như tên gọi của anh ta “heroku”. Với lòng tốt sẵn có của anh ta, anh ấy cho bạn để code free ở nhà anh ta, nhà anh ta thì rất hịn, có thể cho bạn để được rất nhiều loại code của bạn như: Java, Node.js, Scala, Clojure, Python, PHP, và Go. Ưu điểm là vậy nhưng nhược điểm là anh ta có trí nhớ rất kém nên anh ta luôn cho web của bạn ngủ sau 30 phút nếu không hoạt động. Đúng vậy thôi, bạn để nhờ miễn phí ở nhà anh ta cơ mà. Bạn thử cho anh ta tiền xem, anh ta cho web bạn mất ngủ luôn. =)))

Đó, anh ta đồng ý cho bạn để nhờ rồi đó. Nhưng để nhờ thì bạn cũng phải có chìa khóa, địa chỉ, lối vào và các quy định để vô được nhà anh ta. Vậy là anh ta cho bạn cái key và các thông tin liên quan đến đường ra lối vào nhà anh ta.

Bài viết này mình chủ yếu tập trung vào việc sử dụng Travis CI, còn anh hùng heroku kia chỉ là example để mình sử dụng Travis CI.

Phần 1 của bài viết này mình sẽ hướng dẫn deploy mà không có Travis CI

1 ứng dụng node thì chắc hẳn các bạn đã biết, mình vô đề luôn là bạn đã có sẵn node app rồi nhé. còn nếu chưa biết thì bạn có thể vô docs đọc, ở đây mình dùng Express

Heroku có 3 cách tiếp cận về việc deploy, thông qua heroku cli, github connect, và container registry (sử dụng docker)

Deploy ngay từ local thì ngay trên heroku mục deploy cũng có hướng dẫn rồi. Nó sẽ ở tab Deploy như trong ảnh dưới

cd vô folder code của bạn rồi rồi thực hiện các bước giống như heroku hướng dẫn. Nhưng đầu tiên bạn phải cài heroku CLI rồi mới type các command nhé.

Cách tiếp cận thứ 2 đó là dùng github để heroku auto deploy.

Việc authen account github là điều dĩ nhiên nhé.
Khi bạn đã connect với github thì trên giao diện của heroku sẽ như sau:

ở mục nhập repo-name, bạn ghi repo trên github mà b muốn heroku deploy.

chú ý đến việc bạn cần phải cho heroku biết rằng câu lệnh để start node. ở dòng 7 nhé.

{
  "name": "cee-travis",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  }
}

Mỗi commit được push lên master, nó sẽ build cho bạn và hiển thị activity feed cho bạn xem.

Thật dễ dàng phải không, nhưng bạn thấy đấy, thường các bạn sẽ lưu trữ code trên github, gitlab,…git nói chung. Nếu muốn nó tự build và deploy thì các bạn dùng connect github trên heroku. Nhưng nếu 1 sau này bạn có join vô 1 công ty khác, thì chưa chắc công ty của bạn đã không dùng heroku, vì họ có $ mà, họ muốn dùng các dịch vụ tốt hơn chẳng hạn như amazon web service, … thì các bạn nghĩ sao?, nó sẽ không có auto deploy thông qua connect github. Mà lúc đó không chỉ deploy thông thường nữa mà nó còn phải tùy biến build rất nhiều, như env, build docker, … Vậy là rất nhiều các continuous integration service ra đời. Có thể kể đến các cái tên như Travis CI, Circle CI, CodeShip,…

Bài viết này mình sẽ dùng Travis CI để auto deploy node code của bạn.

Phần 2 setup travis ci

Cũng giống như các service khác, hầu hết các service đều mất phí. Với Travis CI cũng vậy, họ có 2 domain đó là https://travis-ci.org/https://travis-ci.com, nhưng nếu dùng cho open source thì sẽ luôn free và được dùng ở trang .org trên. và nếu bạn muốn dùng nó cho các project mà đã private trên github thì dĩ nhiên bạn phải trả phí để được dùng rồi.

Đầu tiên, bạn vào trang https://travis-ci.org/ rồi tạo tài khoản. Bạn connect tới github của bạn. Ở đường dẫn này: https://travis-ci.org/account/repositories bạn sẽ thấy các repo github của bạn. Bạn kiếm cái repo mà bạn muốn tích hợp auto deploy thì bạn ấn toggle button của repo đó.

Hoặc bạn cũng có thể vô setting của project để bật nó và xem các thông tin chi tiết hơn.

Nhưng kể cả khi bạn bật auto build và deploy trong travis web này thì nó cũng không tự build được đâu, nó cần phải có 1 file .travis.yml trong code của bạn. Vậy nên chúng ta sẽ tạo 1 file .travis.yml để nó có thể dựa vào các thông tin trong file yml này build.

Đầu tiên bạn cd vào folder code login lại vào heroku bằng lệnh

# login to heroku using heroku cli
heroku login

Giờ chúng ta sẽ tạo file config cho travis ci bằng lệnh:

# create file config .travis.yml
travis setup heroku

File .travis.yml sẽ có dạng như sau:

language: node_js
node_js: node
deploy:
  provider: heroku
  api_key:
    secure: <encryped api key>
  app: cee-travis
  on:
    repo: hungdev/cee-travis-example

Bạn cũng có thể thêm các thuộc tính để custom build như thêm script để thực thi bash shell,…

Có thể bạn đang thắc mắc rằng làm sao thằng travis ci nó hoạt động ra sao thì bạn có thể xem hình dưới đây để hiểu về cách hoạt động của nó:

Khi user đẩy code lên github, nó sẽ kiểm tra có pull request rồi nó sẽ thực thi các dòng lệnh yml mà các bạn tạo rồi nó sẽ đẩy phần build lên heroku.

Và tất cả đã xong. Thật đơn giản đúng không. Bây giờ bạn chỉ cần push 1 commit lên thôi, là nó sẽ tự build và deploy cho bạn.

Kết luận:

Với mỗi 1 cloud providers thì cách build nó sẽ khác nhau, bạn cần tìm hiểu qua docs của travis ci

bài viết này , các bạn sẽ hiểu được cách hoạt động của 1 continuous integration service.

Code đã available  trên github ở link: https://github.com/hungdev/cee-travis-example

Bạn có thể xem active link heroku của mình: https://cee-travis.herokuapp.com

—Cee—

Leave a Reply

Your email address will not be published. Required fields are marked *