Triển khai NodeJS cho Heroku từ GitHub
Cách đây không lâu, tích hợp liên tục và phân phối liên tục (CI/CD) đã đủ để mở rộng giới hạn của chúng tôi. Họ đã giúp chúng tôi đẩy các tính năng đến với khách hàng một cách nhanh chóng. Nhưng những ngày này nó không đủ. Ngày càng có nhiều nhóm và công ty cải thiện quy trình đó và chuyển sang mô hình triển khai liên tục, trong đó họ nhanh chóng đẩy các thay đổi vào sản xuất, ngay cả trước khi một tính năng hoàn tất Show
Để tận dụng các công cụ chúng ta có ngày nay và theo kịp các đối thủ cạnh tranh, chúng ta nên nhìn xa hơn và xem liệu việc triển khai liên tục có thể cải thiện quá trình phát triển và phân phối của chúng ta hay không Với việc triển khai liên tục, chúng tôi có thể đẩy các thay đổi vào Nút của mình. js một cách nhanh chóng và đưa chúng vào sản xuất sau khi chúng vượt qua các bài kiểm tra tự động. Mặc dù điều đó có vẻ như là một sự kéo dài so với vị trí hiện tại của bạn với quy trình triển khai của mình, nhưng điều đó có thể thực hiện được và có lợi thế hơn so với việc triển khai thủ công mà hầu hết chúng tôi đã làm việc với Trong bài đăng này, chúng ta sẽ xem xét một Node đơn giản. js và xem cách chúng tôi có thể bắt đầu kết hợp CI/CD và các phương pháp triển khai liên tục vào quy trình phát triển của mình Nhưng trước tiên, hãy bắt đầu bằng cách xác định ý nghĩa của việc triển khai liên tục Nền CI/CDĐể hiểu về triển khai liên tục, hãy làm mới hiểu biết của chúng ta về tích hợp liên tục và phân phối liên tục (CI/CD) Khi chúng tôi bắt đầu với CI/CD, chúng tôi đã đạt được những bước tiến bằng cách tự động hóa quá trình xây dựng dự án của mình và thêm các bài kiểm tra tự động. Và chúng tôi đã nỗ lực hợp nhất mã trở lại nhánh chính của mình thường xuyên hơn Chúng tôi bắt đầu sử dụng Jenkins, Circle CI và các công cụ khác. Chúng tôi đã học cách viết bài kiểm tra bằng Jasmine, Mocha, Chai hoặc các thư viện khác. Và chúng tôi đã hợp nhất mã của mình mỗi ngày một lần hoặc ít nhất là cố gắng. Việc triển khai của chúng tôi cũng tốt hơn vì chúng tôi đã cung cấp các triển khai sản xuất bằng nút bấm dễ dàng giúp quy trình có thể lặp lại và dễ dàng khôi phục hơn Mặc dù việc đưa mã của chúng tôi vào sản xuất vẫn yêu cầu can thiệp thủ công, nhưng thao tác đẩy bằng một nút bấm của chúng tôi đã cho phép các nhóm của chúng tôi tăng tốc nhịp độ triển khai của chúng tôi. Các nhóm đang triển khai mỗi quý hoặc mỗi năm một lần đã chuyển sang triển khai mỗi tháng hoặc mỗi tuần một lần Triển khai liên tục trong nút. jsVì vậy, việc triển khai liên tục mang lại cho chúng ta điều gì mà hai bước trước đó trong thang không có? . Và chúng tôi không gộp tất cả các thay đổi của mình vào một bản phát hành. Thay vào đó, với việc triển khai liên tục, chúng tôi sẽ triển khai mọi thay đổi mà chúng tôi đẩy tới chi nhánh chính của mình, miễn là kiểm tra tự động của chúng tôi vượt qua Điều đó nghe có đáng sợ không? Nó có thể cung cấp các triển khai an toàn hơn vì chúng tôi chỉ thay đổi ứng dụng theo những cách nhỏ mỗi khi chúng tôi triển khai. Nếu chúng tôi đưa ra một lỗi, thật dễ dàng để tìm ra triển khai nào và thay đổi mã nào đã gây ra sự cố. Và khách hàng của bạn được trải nghiệm các tính năng sớm hơn. Sau đó, bạn có thể xây dựng dựa trên phản hồi và số liệu bạn có được từ những khách hàng đó để xây dựng thêm các tính năng mà họ muốn Nhưng đến đó sẽ mất một số công việc. Các bộ thử nghiệm tự động của bạn cần có phạm vi bảo hiểm hàng đầu và bạn sẽ phải tạo niềm tin trong quy trình với các đối tác kinh doanh của mình. Ngoài ra, bạn cũng sẽ học cách tách biệt việc triển khai mã khỏi các bản phát hành tính năng. Nhưng điều đó có nghĩa gì? Trong vòng đời công nghệ phần mềm truyền thống của chúng tôi, chúng tôi giả định rằng khi một tính năng được triển khai thành sản phẩm, tính năng đó sẽ khả dụng cho khách hàng của chúng tôi ngay lúc đó. Tuy nhiên, với việc triển khai liên tục, chúng tôi cần đảm bảo rằng việc bật và tắt các tính năng có thể được thực hiện độc lập với quá trình triển khai. Chúng tôi cần có khả năng triển khai mã chưa sẵn sàng để khách hàng sử dụng nhưng có thể nằm yên trong quá trình sản xuất để chờ chúng tôi kích hoạt mã đó Nếu bạn chưa sẵn sàng đưa triển khai liên tục vào quy trình của mình, bạn vẫn có thể bắt đầu với các cờ tính năng để giúp kích hoạt triển khai liên tục khi bạn đã sẵn sàng. Và đây là nơi Split có thể giúp Xây dựng một ứng dụng đơn giản trong nút. jsTrong bài đăng này, bạn sẽ xây dựng một Node đơn giản. js và kết hợp CI/CD và Split để tự thiết lập cho việc triển khai liên tục. Bắt đầu nào Điều kiện tiên quyết của không gian làm việcĐể bắt đầu, hãy chắc chắn rằng bạn có Node. js và npm được cài đặt trên máy phát triển của bạn. Nhấp vào liên kết để tải xuống và cài đặt cho hệ điều hành của bạn. Ví dụ: tôi đang làm việc trên MacBook, vì vậy tôi sẽ cài đặt cả hai bằng cách sử dụng lệnh 2 sau, lệnh này sẽ cài đặt cả hai Nút. js và npm
Ngoài ra, hãy đăng ký Split để bạn có thể xem cách sử dụng cờ tính năng có thể giúp bật và tắt các tính năng cho khách hàng của bạn Sau khi thiết lập tối thiểu đó, bạn có thể bắt đầu xây dựng Nút của mình. ứng dụng js Tạo nút của bạn. ứng dụng jsTừ dòng lệnh, tạo một thư mục cho ứng dụng của bạn và sử dụng 3 để bắt đầu
Tiếp theo, thêm Split SDK cho JavaScript, Express, cũng như Nodemon. Đối với Nodemon, bạn sẽ chỉ sử dụng cục bộ đó, vì vậy bạn có thể sử dụng cờ 5 trên lệnh 6. Bạn sẽ chỉ sử dụng nó cục bộ để chạy ứng dụng
Tiếp theo, thêm một vài tập lệnh vào tệp 7. Những dòng này xác định cách khởi động ứng dụng để sản xuất và khởi động ứng dụng để phát triển bằng gật đầu
Và sau đó thêm tệp 8 xác định một điểm cuối GET chính sẽ được sử dụng cho bản trình diễn này
Cuối cùng, bây giờ bạn có thể chạy ứng dụng cục bộ, sử dụng 9. Nếu mọi thứ được thiết lập chính xác, bạn sẽ thấy đầu ra sau Để xác minh rằng bạn đã hoàn tất, hãy truy cập 0 bằng trình duyệt của bạn và bạn sẽ thấy thông tin sau Ngoài ra, bạn cũng có thể xác minh API của mình từ dòng lệnh nếu bạn đã cài đặt cURL
Bây giờ bạn đã thiết lập và chạy cục bộ, hãy thêm thử nghiệm tự động nhanh Thêm kiểm thử tự độngĐể hoàn thành nhiệm vụ tích hợp liên tục của bạn và đảm bảo rằng bạn đang đưa ra mã được kiểm tra kỹ lưỡng, bạn sẽ muốn thêm một thử nghiệm tự động để xác thực chức năng của ứng dụng của mình. Rất may, vì ứng dụng của bạn chỉ chứa một điểm cuối nên hiện tại bạn chỉ cần một lần kiểm tra Để bắt đầu, hãy thêm Mocha và SuperTest vào ứng dụng của chúng tôi thông qua dòng lệnh
Tiếp theo, tạo một thư mục thử nghiệm trong thư mục nút-api đơn giản của bạn và thêm một thử nghiệm nhỏ. js với nội dung sau
Thử nghiệm này sẽ gọi điểm cuối GET của bạn và xác minh rằng thông báo dự kiến sẽ trả về Trước khi bạn có thể chạy thử nghiệm của mình, bạn cũng cần sửa đổi gói của mình. json để bao gồm thư mục thử nghiệm mới
Bây giờ khi bạn chạy thử nghiệm, bạn sẽ thấy đầu ra sau chúc mừng. Bạn đang trên đường tích hợp liên tục Thiết lập CI/CD trong Node. jsTrước khi chúng tôi bắt đầu triển khai liên tục, bạn sẽ cần tiến hành thông qua tích hợp liên tục (CI) và phân phối liên tục (CD) Vì vậy, hãy đặt một số nền tảng bằng cách tạo một quy trình xây dựng triển khai ứng dụng cho Heroku Đầu tiên, tạo một kho lưu trữ trong tài khoản GitHub của bạn có tên là nút đơn giản-api. Sau khi tạo kho lưu trữ, bạn sẽ muốn liên kết nó với ứng dụng cục bộ của mình bằng cách sử dụng các lệnh bên dưới trong dòng lệnh cục bộ của bạn, điều này sẽ giúp mọi thứ được đồng bộ hóa
Bây giờ dự án của bạn đã có trong GitHub, bạn sẽ có thể bắt đầu thiết lập đường dẫn CI/CD của mình Thiết lập tích hợp liên tụcCó rất nhiều lựa chọn để tích hợp liên tục. Chúng bao gồm TravisCI, CircleCI và Jenkins, để kể tên một số. GitHub Actions cung cấp một cách rất dễ dàng, miễn phí và rất linh hoạt để thiết lập tích hợp liên tục và đó là những gì tôi sử dụng trong bài đăng này. Điều hướng đến dự án 1 của bạn trong GitHub và nhấp vào Hành động. Nhấp vào Quy trình làm việc mới. Có một mẫu tích hợp cho Node. js, để dễ dàng bắt đầu. Nhấp vào Thiết lập quy trình công việc này trong Nút. js Điều tiếp theo bạn nhìn thấy là một tệp có tên 2. Nếu để ý kỹ, bạn sẽ nhận thấy rằng tệp này đang được tạo trong repo GitHub của bạn. Đây là tệp YAML trông như thế nào 0 Những điều quan trọng cần chỉ ra vào thời điểm này là
Nhấp vào Bắt đầu cam kết và Cam kết tệp mới. Điều này sẽ cam kết định nghĩa CI và khởi động lần chạy đầu tiên. Nếu bạn nhấp vào Hành động một lần nữa, bạn có thể thấy kết quả của Hành động GitHub
Hãy phá vỡ bản dựng, chỉ để xem nó trông như thế nào. Chỉnh sửa tệp 8 và thay thế từ 5 bằng 6 1 Cam kết và thúc đẩy thay đổi này. Quay lại tab Hành động trong GitHub và bạn sẽ nhận thấy rằng quá trình xây dựng không thành công Điều này là do thử nghiệm của chúng tôi hiện không thành công. Bạn có thể xác minh điều này cục bộ bằng cách chạy lại 7. Hoàn nguyên các thay đổi và đẩy lên GitHub một lần nữa và bạn sẽ thấy rằng bản dựng đang hoạt động trở lại Thiết lập phân phối liên tụcVí dụ này mình sẽ dùng Heroku để triển khai app. Heroku là một nền tảng lưu trữ dễ sử dụng với bậc miễn phí hỗ trợ nhiều ngôn ngữ, bao gồm cả Node. js. Tôi cũng thường xuyên sử dụng Heroku CLI và tôi khuyến khích bạn cũng vậy Để bắt đầu, hãy đăng ký Heroku. Nhấp vào ảnh hồ sơ của bạn ở phía trên bên phải và chọn Cài đặt tài khoản. Cuộn xuống phần Khóa API. Nhấp vào Reveal và sau đó sao chép khóa Quay lại GitHub, nhấp vào Cài đặt cho repo 1. Bấm bí mật. Nhấp vào Bí mật kho lưu trữ mới. Trong trường Tên, gõ. 9. Trong trường Giá trị, dán Khóa API Heroku mà bạn đã sao chép. Nhấp vào Thêm bí mật Đây là bước thiết lập một lần mà chúng tôi sẽ sử dụng sau một thời gian ngắn. Trước tiên, hãy đảm bảo rằng chúng tôi có thể triển khai ứng dụng lên Heroku theo cách thủ công Triển khai cho Heroku theo cách thủ côngTin vui ở đây là ứng dụng đã sẵn sàng để triển khai cho Heroku nguyên trạng. Sử dụng Heroku CLI, thực hiện như sau 2
Lệnh đầu tiên tạo một ứng dụng trong Heroku được đính kèm với tài khoản của bạn. Nó cũng tự động thêm một điều khiển từ xa mới vào dự án của bạn. Lệnh thứ hai sử dụng điều khiển từ xa mới này để triển khai dự án của bạn lên Heroku. Khá dễ dàng, phải không? Sau khi triển khai xong, ứng dụng của bạn hiện có sẵn công khai và bạn sẽ có thể sử dụng ứng dụng đó 3 Tự động triển khai lên HerokuGiờ chúng ta đã biết ứng dụng của mình có thể triển khai cho Heroku, hãy thiết lập ứng dụng để triển khai tự động. Ngoài ra, chúng tôi muốn đảm bảo rằng việc triển khai CHỈ xảy ra NẾU các bài kiểm tra vượt qua Mở nút. js. tệp yml trong dự án của bạn. Chúng tôi đã có một công việc được gọi là 2. Bây giờ chúng ta sẽ thêm một công việc có tên là 3 (LƯU Ý. khoảng trắng quan trọng với YAML. Phần triển khai phải ở cùng một khoảng thụt đầu dòng như phần 2) 4 Dòng có 5 chỉ ra rằng công việc này phụ thuộc vào công việc 2. Nếu công việc 2 không thành công, công việc 3 sẽ không thực thi Công việc này sử dụng akhileshns/heroku-deploy@v3. 12. 12 hành động được tạo chỉ để triển khai lên Heroku Bạn có nhớ khi bạn sao chép khóa API Heroku của mình và lưu trữ nó dưới dạng bí mật trong repo GitHub của bạn ở đầu phần này không? . Đây là cơ chế mà GitHub cung cấp để đảm bảo rằng chúng tôi không xuất bản trực tiếp các bí mật trong kho lưu trữ của mình Gửi các thay đổi tới 2 và đẩy nó lên repo GitHub của bạn. Nhấp vào tab Hành động một lần nữa. Bạn có thể nhấp vào công việc quy trình công việc mới được khởi chạy để xem tiến trình của nó. Bạn sẽ nhận thấy rằng công việc 3 được chạy và hoàn tất thành công Với mọi thứ được kết nối với nhau, giờ đây bạn sẽ có thể xem mã mới nhất của mình triển khai ra phiên bản Heroku bằng cách chỉ cần đẩy mã mới nhất của bạn vào chính Tuy nhiên, bạn muốn đảm bảo rằng bất kỳ mã mới nào cũng không làm mất lòng khách hàng của bạn. Do đó, bạn sẽ muốn ẩn các tính năng mới và đang xử lý sau cờ tính năng để đảm bảo các tính năng của bạn kích hoạt khi bạn muốn. Và đây là lúc Split xuất hiện Đã đến lúc chia nhỏ mọi thứ, với cờ tính năngBây giờ, hãy thêm một chút vào tệp 8 của bạn để chúng tôi có thể thấy các phương pháp xử lý Phân tách của chúng tôi đang hoạt động và cách bạn có thể sử dụng chúng trong sản xuất để kích hoạt các triển khai khác nhau cho khách hàng của mình. Thay mã trong 8 bằng mã sau 5 Nếu bạn nhìn vào tệp ở trên, ứng dụng đơn giản vẫn không có quá nhiều thứ đang diễn ra. Tuy nhiên, tùy thuộc vào việc xử lý Split của bạn bật, tắt hay kiểm soát, bạn có thể thay đổi mã thực thi Và bạn không phải lo lắng rằng việc xử lý Chia tách của chúng tôi chưa được thiết lập. Theo mặc định, các phương pháp điều trị trở lại dưới dạng kiểm soát, vì vậy bạn không phải lo lắng về việc thiết lập phương pháp xử lý hoàn chỉnh trước khi thêm mã của mình nếu bạn có kế hoạch phù hợp Tại thời điểm này, chúng tôi đã phá vỡ bài kiểm tra của mình. Hãy thử chạy 7 và bạn sẽ thấy điều tôi muốn nói. Cập nhật tệp 5 của bạn thành tệp sau 6 Chạy lại 7 và thử nghiệm sẽ vượt qua một lần nữa (điều này chứng tỏ rằng mã của bạn vẫn hoạt động mặc dù nó chưa kết nối với Split) Đi tới bảng điều khiển Split của bạn để tạo điều trị. Như thường lệ, bạn có thể giữ nó khá đơn giản và chỉ cần tạo một cách xử lý mặc định Và sau khi tạo điều trị của bạn, hãy thêm quy tắc mặc định. Để lại cách xử lý mặc định là 7 và 8. Nhấp vào Lưu thay đổi rồi Xác nhận Lưu ý ở dòng 9, có một tham chiếu đến 9. Chúng tôi cần đặt giá trị này trong môi trường của ứng dụng Heroku của bạn. May mắn thay, điều này là siêu dễ dàng để làm. Trong bảng điều khiển dành cho quản trị viên Split, bạn cần tìm khóa API của mình. Nhấp vào ô vuông ở phía trên bên trái. Sau đó nhấp vào Cài đặt quản trị. Nhấp vào khóa API. Bạn muốn sao chép đúng khóa API phía Máy chủ. Trong trường hợp của tôi, tôi đã thiết lập phần tách của mình trong môi trường 0. Nhấp vào Sao chép bên cạnh Khóa chính xác. Từ cửa sổ đầu cuối của bạn, thực hiện 7 Bây giờ, hãy đẩy các thay đổi mới nhất của bạn lên GitHub và để đường dẫn CI/CD của bạn tiếp quản
Khi ứng dụng được triển khai, cuộn tròn đến điểm cuối một lần nữa 8 Bạn sẽ nhận được phản hồi 9 Khi bạn đã sẵn sàng bật công tắc, hãy quay lại bảng điều khiển Split và chuyển cách xử lý mặc định của bạn thành 7. Sau khi nó được bật, hãy chuyển sang dòng lệnh của bạn và thực hiện cuộn tròn một lần nữa 8 Bạn sẽ nhận được phản hồi 1 Như bạn có thể thấy, tôi đã bật phương pháp điều trị của mình. Bây giờ, nó mang lại cho tôi kết quả mong đợi dựa trên chỉ mục. triển khai js Cấu hình Split đơn giản nhất ở đây. Bạn có thể tạo quy tắc nhắm mục tiêu sao cho chỉ những người dùng cụ thể mới thấy tính năng mới Bạn đã làm rất tốt. Bạn đã làm được. Bây giờ, bạn đang ở trong lãnh thổ triển khai liên tục. Bạn không chỉ có thể triển khai theo ý muốn thông qua quy trình CI/CD mà còn có thể phát hành các tính năng chưa sẵn sàng hoàn toàn và thử nghiệm chúng trong sản xuất mà không ảnh hưởng đến trải nghiệm của những người dùng khác Tìm hiểu thêm về nút. js, Triển khai liên tục và Cờ tính năngHãy xem lại tất cả công việc khó khăn của bạn. Khi bạn theo dõi bài đăng này, bạn đã tạo một Nút nhỏ. js, đã triển khai nó cho Heroku bằng GitHub Actions và triển khai đường dẫn CI/CD. Và với Split được thêm vào, giờ đây bạn có thể thêm mã và chức năng mới vào ứng dụng của mình một cách dễ dàng và an toàn, chỉ bằng cách đặt tất cả sau một cờ tính năng. Bạn cũng có thể bật và tắt phương pháp điều trị nếu cần Bạn đang trên con đường triển khai liên tục Tất cả mã từ bài đăng này có thể được tìm thấy trên repo GitHub splitio-examples/simple-nodejs-cicd-example. Bạn thậm chí có thể xem các công việc xây dựng và triển khai từ tab 3 Quan tâm đến việc tìm hiểu sâu hơn về thử nghiệm và thử nghiệm A/B? Như mọi khi, nếu bạn đang tìm kiếm thêm nội dung tuyệt vời như thế này, chúng tôi rất muốn bạn theo dõi chúng tôi trên Twitter @splitsoftware và đăng ký kênh YouTube của chúng tôi Làm cách nào để triển khai nút js trong Heroku?Triển khai nút. . điều kiện tiên quyết Tổng quan Khai báo phụ thuộc ứng dụng Chỉ định phiên bản của nút Chỉ định một tập lệnh bắt đầu Xây dựng ứng dụng của bạn và chạy nó cục bộ Làm cách nào để giữ các tạo phẩm xây dựng ra khỏi git Triển khai ứng dụng của bạn lên Heroku Làm cách nào để triển khai nút js trên GitHub?Đã đến lúc bắt đầu. . Bước 1. Tạo mẫu quy trình công việc. . Bước 2. Tùy chỉnh cấu hình quy trình công việc cơ bản. . Bước 3. Định cấu hình các bước của công việc. . Bước 4. Cam kết tệp quy trình làm việc. . Bước 5. Thiết lập người chạy. . Bước 6. Bắt đầu ứng dụng NodeJS. . Bước 7. Thêm lệnh khởi động lại GitHub có thể lưu trữ một trang web NodeJS không?Không, GitHub chỉ cho phép lưu trữ các trang web tĩnh (chỉ có HTML, CSS, javascript). Không thể lưu trữ các trang web động (có cơ sở dữ liệu, máy chủ và tất cả) dưới dạng trang Github. Và nút. js là một trang web dựa trên máy chủ, chúng tôi không thể lưu trữ nó trên Github.
Heroku có thể chạy NodeJS không?Gói hàng. tệp json xác định cả phiên bản của Nút. js sẽ được sử dụng để chạy ứng dụng của bạn trên Heroku , cũng như các phần phụ thuộc sẽ được cài đặt cùng với ứng dụng của bạn. Khi các phụ thuộc được cài đặt, bạn sẽ sẵn sàng chạy ứng dụng của mình cục bộ. |