Junior
Ի՞նչ են վեբհուկները CI/CD գործընթացում։
sobes.tech AI
Պատասխան AI-ից
CI/CD-թվարկային համակարգերում webhooks-ները ավտոմատացված HTTP POST-հարցումներ են, որոնք ուղարկվում են մեկ հավելվածից մյուսին որոշակի իրադարձության առաջացման դեպքում:
Կոնտեքստում CI/CD-ների, դրանք գործառույթներ են կատարում որպես հրահրողներ: Օրինակ, Git-պահոցում push-իրադարձության դեպքում, webhook-ը ուղարկում է ծանուցում CI/CD համակարգին (Jenkins, GitLab CI, GitHub Actions և այլն): Այս համակարգը, ստանալով ծանուցումը, ավտոմատ կերպով սկսում է պայպլայնը (կառուցում, փորձարկում, տեղադրում):
Հիմնական բաղադրիչներ՝
- Իրադարձության աղբյուր: Համակարգ, որտեղ տեղի է ունենում իրադարձությունը (օրինակ՝ Git-պահոց):
- Webhook- ի URI: URL հասցե, որտեղ ուղարկվում է HTTP POST հարցումը: Այս հասցեն պատկանում է ընդունող համակարգին (CI/CD):
- Payload: Իրադարձության տվյալները, որոնք փոխանցվում են HTTP POST հարցման մարմնում (օրինակ՝ կոմմիտի, ճյուղի մասին տեղեկություններ):
- Ընդունող համակարգ: CI/CD համակարգը, որը մշակվում է webhook-ը և սկսում գործողությունները:
Օգտագործման առավելությունները՝
- Ավтоматացում: Հեռացնում է ձեռքով գործարկման անհրաժեշտությունը:
- Պատասխանատվություն: Պայպլայնը սկսվում է անմիջապես իրադարձությունից հետո, ինչը ապահովում է ավելի արագ արձագանք:
- Նվազեցված բեռ: Ընդունող համակարգը չի պահանջում մշտական հարցում աղբյուրին (polling):
GitHub Actions- ի գործառնական օրինակ՝
- GitHub-ի պահոցում ավելացվում է webhook, որը ցույց է տալիս GitHub Actions-ի endpoint-ը:
- Դիզայներիչը կատարում է
git push: - GitHub-ը, հայտնաբերելով
pushիրադարձությունը, ուղարկում է HTTP POST հարցում (webhook) նշված endpoint-ին: - GitHub Actions-ը ստանում է webhook-ը, վերլուծում payload-ը և սկսում համապատասխան workflow-ը:
# GitHub Actions-ում օրինակ workflow, որը հրահրվում է push-ով
name: CI Pipeline
on:
push:
branches:
- main # Սկսվում է push-ով main ճյուղում
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2 # Պահոցը կլոնավորում է
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test