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

Để 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. js

Vì 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. js

Trong 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

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
2 sau, lệnh này sẽ cài đặt cả hai Nút. js và npm

brew update brew install node

Code language: Shell Session (shell)

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 js

Từ dòng lệnh, tạo một thư mục cho ứng dụng của bạn và sử dụng

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
3 để bắt đầu

Mẹo chuyên nghiệp. bạn có thể chạy

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
4, để giữ tất cả các giá trị mặc định

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)

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ờ

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
5 trên lệnh

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
6. Bạn sẽ chỉ sử dụng nó cục bộ để chạy ứng dụng

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)

Tiếp theo, thêm một vài tập lệnh vào tệp

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)

Và sau đó thêm tệp

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
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

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)

Cuối cùng, bây giờ bạn có thể chạy ứng dụng cục bộ, sử dụng

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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

curl -i http://localhost:8000

Code language: Shell Session (shell)

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

npm install mocha supertest --save-dev

Code language: Shell Session (shell)

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

const request = require("supertest"); const app = require("../index"); describe("GET /", () => { it("responds with Hello World!", (done) => { request(app).get("/").expect("Hello World!", done); }) });

Code language: PHP (php)

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

... "scripts": { "test": "mocha ./test/* --exit", // <-- modify this line "dev": "nodemon index.js" }, ...

Code language: JSON / JSON with Comments (json)

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. js

Trướ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

echo node_modules > .gitignore git init git remote add origin [email protected]:/simple-node-api.git git add . git commit -m "initial commit" git push origin master

Code language: Shell Session (shell)

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ục

Có 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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
0

Những điều quan trọng cần chỉ ra vào thời điểm này là

  • các nhánh – cả đối với các yêu cầu đẩy và kéo đối với mảng các nhánh đã chỉ định (chính theo mặc định), định nghĩa CI này sẽ được chạy
  • matrix – định nghĩa CI này sẽ tự động chạy trên các phiên bản Node khác nhau đã chỉ định. js. Điều này đảm bảo rằng bạn có thể hỗ trợ nhiều phiên bản Node. js rất quan trọng với bạn
  • run – Trong phần các bước, mỗi lệnh chạy sẽ thực thi cho từng phiên bản nút được chỉ định trong phần ma trận

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

Mẹo chuyên nghiệp. đảm bảo chạy

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
3 trên máy cục bộ của bạn khi bạn thực hiện các thay đổi đối với repo trên GitHub. Điều này làm cho nó trở lại đồng bộ hóa

Hãy phá vỡ bản dựng, chỉ để xem nó trông như thế nào. Chỉnh sửa tệp

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
8 và thay thế từ

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
5 bằng

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
6

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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ục

Ví 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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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õ.

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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ông

Tin 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

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
2

GHI CHÚ. Tất cả ứng dụng trong Heroku phải có tên duy nhất và

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
1 đã được sử dụng. Trong trường hợp của tôi, tôi đã sử dụng.

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
1. Sử dụng tên phù hợp với bạn

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 đó

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
3

Tự động triển khai lên Heroku

Giờ 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à

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
2. Bây giờ chúng ta sẽ thêm một công việc có tên là

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
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

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
2)

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
4

Dòng có

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
5 chỉ ra rằng công việc này phụ thuộc vào công việc

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
2. Nếu công việc

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
2 không thành công, công việc

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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

const express = require('express'); const port = process.env.port || 8000; const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log('Our App Is Up And Running!'); }); module.exports = app

Code language: JavaScript (javascript)
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ăng

Bây giờ, hãy thêm một chút vào tệp

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
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

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
8 bằng mã sau

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
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

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
7 và bạn sẽ thấy điều tôi muốn nói. Cập nhật tệp

curl -i http://localhost:8000

Code language: Shell Session (shell)
5 của bạn thành tệp sau

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
6

Chạy lại

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", // <-- add this line "dev": "nodemon index.js" // <-- add this line }

Code language: Arduino (arduino)
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à

curl -i http://localhost:8000

Code language: Shell Session (shell)
7 và

curl -i http://localhost:8000

Code language: Shell Session (shell)
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

curl -i http://localhost:8000

Code language: Shell Session (shell)
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

npm install mocha supertest --save-dev

Code language: Shell Session (shell)
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

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
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

Mẹo chuyên nghiệp. Bạn có thể theo dõi tiến trình quy trình của mình trên tab Hành động của kho lưu trữ GitHub của bạn. Bạn cũng có thể xem đầu ra nhật ký của ứng dụng Heroku với.

npm install mocha supertest --save-dev

Code language: Shell Session (shell)
1

Khi ứng dụng được triển khai, cuộn tròn đến điểm cuối một lần nữa

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
8

Bạn sẽ nhận được phản hồi

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
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

curl -i http://localhost:8000

Code language: Shell Session (shell)
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

mkdir simple-node-api cd simple-node-api npm init -y

Code language: Shell Session (shell)
8

Bạn sẽ nhận được phản hồi

npm install --save-dev nodemon npm install --save @splitsoftware/splitio express

Code language: Shell Session (shell)
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ăng

Hã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

npm install mocha supertest --save-dev

Code language: Shell Session (shell)
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?
– Tìm hiểu thêm về thử nghiệm A/B và thử nghiệm A/B/n
– Tìm hiểu sâu hơn về thử nghiệm đa biến
– Kiểm tra tình trạng phân phối tính năng vào năm 2020

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ộ.