Mengotomatisasi Penerapan Node.js dengan server CI/CD khusus

 – Beragampengetahuan
6 mins read

Mengotomatisasi Penerapan Node.js dengan server CI/CD khusus – Beragampengetahuan

Ketika proyek tumbuh, mengelola dan menggunakan aplikasi Node.js dapat menjadi hambatan. Memiliki pipa integrasi kontinu dan penyebaran kontinu (CI/CD) yang dirancang dengan baik dapat membantu mengurangi beban pembaruan yang sering, menyederhanakan manajemen ketergantungan, dan menghilangkan kebutuhan untuk proses restart manual, menghindari kemacetan ini.

Dalam tutorial ini, kami akan membuat server CI/CD khusus yang mendengarkan acara Github Webhook dan menyebarkan menggunakan tindakan GitHub, PM2 dan skrip shell. Ini memungkinkan kita untuk:

  1. Setelah pembaruan dibuat, dapatkan perubahan terbaru dari repositori GitHub.
  2. Hanya menentukan perubahan ketergantungan dan instal NPM jika ada perubahan.
  3. Saat ada pembaruan, silakan gunakan PM2 untuk berhenti dan restart aplikasi.
  4. Mengelola berbagai proyek yang berbeda dari satu server CI/CD.

Setelah menyelesaikan tutorial ini, Anda akan memiliki pipa penyebaran yang difokuskan pada diri sendiri yang dapat digunakan dalam berbagai proyek di Almalinux (atau server Linux mana pun). Pendekatan ini sangat berguna bagi pengembang yang menginginkan lebih banyak kontrol atas proses penyebaran, dan apa yang dapat mereka capai dibandingkan dengan tindakan github atau layanan CI/CD pihak ketiga yang serupa.

Contents

Apa yang kita bangun

Tujuan kami adalah mengembangkan simpul yang ringan. Server JSCI/CD:

  1. Dengarkan acara GitHub Webhook berdasarkan pengiriman yang didorong ke cabang tertentu.
  2. Verifikasi muatan untuk mengonfirmasi bahwa permintaan tersebut dari GitHub.
  3. Jalankan skrip shell (decloy.sh):
  • Ubah direktori ke proyek yang benar
  • Tarik keluar repositori
  • Periksa dan pasang dependensi yang hilang
  • Mulai ulang proyek dengan PM2
  1. Kirim status penempatan ke GitHub untuk login.

Tutorial ini akan memandu Anda melalui dasar -dasar skrip Node.js, Github, dan skrip shell Linux. Jika Anda baru mengenal Webhooks PM2 atau Github, jangan khawatir, kami akan menjelaskan semua orang secara detail.

Mari Siapkan Server CI/CD kami

Mari kita konfigurasikan server CI \ CD menurut Node.js, yang akan mengotomatiskan penyebaran dengan memantau webhook github dan meluncurkan proses penyebaran menggunakan skrip PM2 dan shell.

Prasyarat

Sebelum Anda mulai, pastikan Anda menginstal berikut di server Anda;

1. node.js (Versi 16 atau lebih baru): Anda dapat mengunduhnya menggunakan vim atau mengunduhnya langsung dari manajer paket.

2. PM2: Untuk mengelola aplikasi Node.js secara efektif, Anda dapat menginstal PM2 di seluruh dunia dengan mengikuti langkah -langkah di bawah ini;

npm install -g pm2

3. git: Diperlukan diperlukan untuk mengeluarkan kode terbaru. Diinstal melalui:

sudo dnf install git -y

4. Nginx atau Apache (Opsional): Jika Anda ingin mengekspos server CI/CD melalui domain.

5. Pengaturan GitHub: Pastikan proyek Anda di -host di GitHub dan Anda memiliki izin yang diperlukan untuk mengonfigurasi webhook.

Buat server CI/CD

Langkah 1: Inisialisasi proyek Node.js

Pertama, buat direktori baru untuk server CI/CD, dan kemudian inisialisasi proyek Node.js:

mkdir ~/cicd-server && cd ~/cicd-server 

npm init -y

Ketergantungan yang diperlukan untuk pemasangan:

npm install express body-parser crypto

Langkah 2: Bangun pendengar webhook

Buat file bernama index.js Dan isi dengan kode berikut:

const express = require("express");

const bodyParser = require("body-parser");

const crypto = require("crypto");

const  exec  = require("child_process");



const app = express();

const PORT = 4000;

const GITHUB_SECRET = process.env.GITHUB_SECRET || "your-secret-key";



app.use(bodyParser.json());



app.post("/webhook", (req, res) => 

  const signature = `sha256=$crypto

    .createHmac("sha256", GITHUB_SECRET)

    .update(JSON.stringify(req.body))

    .digest("hex")`;



  if (req.headers["x-hub-signature-256"] !== signature) 

    return res.status(401).json( message: "Invalid signature" );

  



  const repoName = req.body.repository.name;

  console.log(`Received update for: $repoName`);



  exec(`bash ./deploy.sh $repoName`, (error, stdout, stderr) => 

    if (error) 

      console.error(`Deployment failed: $stderr`);

      return res.status(500).json( message: "Deployment failed", error: stderr );

    

    console.log(`Deployment successful: $stdout`);

    res.json( message: "Deployment successful", output: stdout );

  );

);



app.listen(PORT, () => console.log(`CI/CD server running on port $PORT`));

Langkah 3: Tulis skrip penempatan

Sekarang, buat file Decloy.sh di direktori yang sama:

REPO_NAME=$1

BASE_DIR="/var/www/projects"

PROJECT_DIR="$BASE_DIR/$REPO_NAME"


echo "Starting deployment for $REPO_NAME..."


if [ ! -d "$PROJECT_DIR" ]; then

  echo "Error: Directory $PROJECT_DIR does not exist."

  exit 1

fi


cd "$PROJECT_DIR"

echo "Pulling latest changes..."

git pull origin main


CHANGES=$(git diff --name-only HEAD@1 HEAD)


if [[ $CHANGES == *"package.json"* ]]; then

  echo "Detected dependency changes. Running npm install..."

  npm install

fi


echo "Restarting application..."

pm2 restart $REPO_NAME


echo "Deployment completed."


Make it executable:

chmod +x deploy.sh

3. Konfigurasikan GitHub Webhooks

  • Pergi ke GitHub → Repositori Anda → Pengaturan → Cooks Web.
  • Klik Tambahkan Webhook.
  • Atur URL Payload ke: http: // server-ip: 4000/webhook
    (Jika Anda menggunakan Nginx atau Apache, ganti dengan domain. Sebagai contoh.com)
  • Atur tipe konten ke “Aplikasi/JSON”.
  • Tambahkan rahasia dengan nilai yang sama GITHUB_SECRET Di Anda index.js dokumen.
  • Pilih acara Push dan klik Tambahkan Webhook.

4. Menjalankan server CI/CD

Mulai server CI/CD menggunakan PM2:

pm2 start index.js --name cicd-server 

pm2 save

5. Tambahkan Nginx atau Proxy Reverse Apache

Jika Anda ingin mengekspos server CI/CD melalui domain, siapkan proxy reverse Nginx atau Apache.

Konfigurasi nginx

Buat file konfigurasi nginx:

sudo nano /etc/nginx/conf.d/cicd.conf

isi:

server 

    listen 80;

    server_name example.com;



    location / 

        proxy_pass 

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    

Muat ulang nginx:

sudo nginx -t 

sudo systemctl reload nginx

Konfigurasi Apache

Buat konfigurasi host virtual:

sudo nano /etc/httpd/conf.d/cicd.conf

isi:

<VirtualHost *:80>

    ServerName example.com

    ProxyPass / 

    ProxyPassReverse / 

    ErrorLog /var/log/httpd/cicd-error.log

    CustomLog /var/log/httpd/cicd-access.log combined

</VirtualHost>

Restart Apache:
sudo systemctl restart httpd

6. Penempatan Tes

Dorong pembaruan ke repositori Anda dan periksa apakah:

  • Webhook memicu server CI/CD.
  • Skrip menarik perubahan dan menginstal dependensi saat dibutuhkan.
  • PM2 memulai kembali aplikasi.

Meringkaskan

Kami telah berhasil membuat pipa CI/CD yang diselenggarakan sendiri untuk penempatan Node.js menggunakan aksi GitHub, PM2 dan skrip shell. Solusinya ringan dan hemat biaya dan dapat dengan mudah diskalakan agar sesuai dengan banyak proyek.

rencana pengembangan website



metode pengembangan website

jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website

#Mengotomatisasi #Penerapan #Node.js #dengan #server #CICD #khusus

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *