GitHub Webhook CI/CD: راهنمای گام به گام

(این پست وبلاگ بخشی از یک کار مشترک بین است من وت مصطفی ال ادریسی، برای اطلاعات بیشتر با صفحه Devto خود مشورت کنید: https://dev.to/appsbymuss)
CI/CD چیست
CI/CD ، یا ادغام مداوم و تحویل/استقرار مداوم، مجموعه ای از شیوه ها و ابزارهایی است که فرایند توسعه نرم افزار ، آزمایش و انتشار را خودکار می کند. این به توسعه دهندگان کمک می کند تا تغییرات کد را بیشتر ، با خیال راحت و با اطمینان انجام دهند.
-
ادغام مداوم: این یک عمل توسعه است که در آن توسعه دهندگان اغلب تغییرات کد خود را در یک مخزن مشترک ادغام می کنند.
-
تحویل مداوم: این با اتوماسیون کل فرآیند انتشار ، یک قدم جلوتر می رود. هنگامی که کد تمام مراحل آزمایش را پشت سر گذاشت ، به طور خودکار به محیط تولید مستقر می شود.
ابزارهای زیادی وجود دارد که برای انجام آنها استفاده می شود سیخ وت سی دی مانند و محدود به:
- جنکینز
- اقدامات GitHub
- CI/CD/CD
- تراویس سی
با این حال ، این ابزارها معمولاً با محدودیت های استفاده از منابع دنبال می شوند یا نیاز به کمک های پولی دارند که به طور کارآمد مورد استفاده قرار گیرند و در عین حال مبتدیان در شروع کار توسعه نرم افزار خود برای استفاده از چنین ابزارهایی تلاش می کنند.
- با این وجود روشی آسانتر برای بوت و سخت تر برای رسیدن به CI/CD وجود دارد “Webhooks Github”
چگونه می توان GitHub Webhook را تنظیم کرد؟
مرحله 0: یک repo ایجاد کنید
- در صورت داشتن یک پروژه جدید ، باید یک مخزن جدید برای آن ایجاد کنیم تا تغییرات کد خود را ذخیره کنیم (با نام مستعار) ، اما در این حالت برای دستیابی به هدف CI/CD ما نیز مفید خواهد بود.
مرحله 1: مسیری را برای پس از webhook ایجاد کنید
- با فرض اینکه شما در حال حاضر سرور با محیط/چارچوب زمان اجرا مورد نظر خود دارید و روی یک درگاه خاص اجرا می شوید.
- شما همچنین باید یک وب وب ایجاد کنید تا به GitHub اجازه دهید در صورت تغییر جدید به سرور خود دسترسی پیدا کند شعبه اصلی/تولید در repo github شما مانند بنابراین:
require('dotenv').config();
const express = require('express');
const crypto = require('crypto');
const bodyParser = require('body-parser');
const { exec } = require('child_process');
const app = express();
const updatedAt = new Date();
function verifySignature(req, res, buf, encoding) {
const signature = req.headers['x-hub-signature-256']; // GitHub sends the signature here
if (!signature) {
console.log('No signature found on request');
return false;
}
const hmac = crypto.createHmac('sha256', process.env.REPO_WEBHOOK_SECRET);
const digest = 'sha256=' + hmac.update(buf).digest('hex');
if (signature !== digest) {
console.log('Signature does not match');
return false;
}
console.log('Signature is valid');
return true;
}
app.use(bodyParser.json());
app.post('/cicd/github-cicd', (req, res) => {
const buf = JSON.stringify(req.body); // The raw body of the request
// const isValid = verifySignature(req, res, buf);
/* if (!isValid) {
return res.status(401).send('Invalid signature');
}*/
const { ref } = req.body;
if (ref === 'refs/heads/main') {
// PM2 is my instance manager
exec('git pull origin main && pm2 restart cicd_app');
}
res.sendStatus(200);
});
app.get('/cicd/time', (req, res) => {
res.send(`${updatedAt}`);
});
app.listen(80, () => {
console.log("Listening on Port 80...");
});
(کد منبع کامل)
مرحله 2: تنظیمات repo را پیکربندی کنید
-
رفتن به [YourRepo -> Settings -> Webhooks]
-
پس
-
سپس به پانل ایجاد Webhook می رسیم
- [warn] بسته به وضعیت SSL وب سایت شما (اگر فعال شود یا خیر) ، گزینه “تأیید صحت SSL” را بر این اساس انتخاب کنید.
- [warn] در صورتی که می خواهید GitHub یک نشانه “مخفی” برای تأیید اعتبار خود به سرور خود برای اطمینان از این که GitHub است و بازیگر تهدید نیست ، شامل شود ، سپس یک کلمه مخفی قرار دهید ، در غیر این صورت خالی بگذارید.
مرحله 3: آماده!
- بعد از تنظیم وب سایت خود در مورد خود سرور وت صفحه وب GitHub از repo خود ، پس شما اساساً خوب است که بروید.
کلان
- اولی یک توسعه دهنده تعهد خود (تغییر کد) را به GitHub سوق می دهد.
- دوم GitHub یک درخواست پست را به سرور ما ارسال می کند ، و به طور خاص به مسیر Webhook ما با بدن در JSON با اطلاعات مربوط به آن فشار GitHub که ما فقط یک لحظه پیش انجام داده ایم.
- ثالث سرور پس از آن ، درخواست را به عنوان راهی برای دانستن اینکه تغییراتی در شاخه تولید وجود دارد که باید در اسرع وقت اعمال شود ، برای این کار کشش گیت تلاش خواهد شد و سپس آزمایشات و ساختهای جدید و آنچه قرار نیست اجرا شود.
- بالاخره در نتیجه سرور با کد منبع به روز شده دوباره راه اندازی می شود.