برنامه نویسی

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 که ما فقط یک لحظه پیش انجام داده ایم.
  • ثالث سرور پس از آن ، درخواست را به عنوان راهی برای دانستن اینکه تغییراتی در شاخه تولید وجود دارد که باید در اسرع وقت اعمال شود ، برای این کار کشش گیت تلاش خواهد شد و سپس آزمایشات و ساختهای جدید و آنچه قرار نیست اجرا شود.
  • بالاخره در نتیجه سرور با کد منبع به روز شده دوباره راه اندازی می شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا