CI/CD (GitHub Actions)

GitHub Actions asoslari

GitHub Actions'da hamma narsa YAML fayl orqali boshqariladi. Bu fayllarni repoda saqlaysiz, GitHub esa ularni avtomatik o'qib, kerakli paytda ishga tushiradi.

.github/workflows/ papkasi

GitHub Actions faqat bitta joyni qaraydi: repo ildizidagi .github/workflows/ papkasi. Shu papkadagi har bir .yml (yoki .yaml) fayl alohida workflow hisoblanadi.

my-project/
  .github/
    workflows/
      ci.yml          <- birinchi workflow
      deploy.yml      <- ikkinchi workflow
  src/
  package.json
Papka nomi aynan .github/workflows bo'lishi shart. Nuqta bilan boshlanadi va GitHub buni maxsus qabul qiladi. Boshqa papkaga qo'ysangiz, hech narsa ishlamaydi.

Workflow YAML tuzilishi

Har bir workflow uch asosiy qismdan iborat: name (nomi), on (qachon ishga tushadi), jobs (nima qiladi).

name: CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Kodni yuklab olish
        uses: actions/checkout@v4

      - name: Salom aytish
        run: echo "Salom, GitHub Actions!"
YAML'da chekinish (indent) muhim! Faqat probel ishlating, TAB ISHLATMANG. Noto'g'ri chekinish butun faylni buzadi. Odatda 2 probel qatlamlar orasida.

on โ€” hodisa (qachon ishga tushadi)

on kaliti workflow qaysi hodisada ishga tushishini belgilaydi:

# Har qanday push va PR da:
on: [push, pull_request]

# Faqat main shoxchaga push bo'lganda:
on:
  push:
    branches: [ main ]

# Faqat main ga PR ochilganda:
on:
  pull_request:
    branches: [ main ]

# Har kuni soat 00:00 (cron) da:
on:
  schedule:
    - cron: '0 0 * * *'
Boshlash uchun on: [push, pull_request] yetarli โ€” har bir push va har bir Pull Request'da tekshiruv ishga tushadi.

jobs va runner

jobs ichida bir yoki bir nechta job (vazifa) bo'ladi. Har bir job alohida, toza virtual mashinada โ€” runnerda ishga tushadi.

Har bir job toza mashinada boshlanadi: hech qanday oldingi fayl yo'q, hatto sizning kodingiz ham yo'q. Shuning uchun birinchi qadam odatda kodni yuklab olish bo'ladi.

Bir workflow'da bir nechta job bo'lsa, ular parallel (bir vaqtda) ishlaydi. Agar ketma-ketlik kerak bo'lsa, needs: kaliti bilan bog'lanadi.

steps va actions/checkout

Har bir job ichida steps โ€” ketma-ket qadamlar bo'ladi. Qadam ikki xil bo'ladi:

Eng muhim tayyor action โ€” actions/checkout. U repodagi kodni runner mashinasiga yuklab oladi. Deyarli har bir workflow shundan boshlanadi:

steps:
  - name: Kodni yuklab olish
    uses: actions/checkout@v4

  - name: Fayllarni ko'rish
    run: ls -la

  - name: Bir nechta buyruq
    run: |
      echo "Bir necha qatorli buyruq"
      pwd
      node --version

E'tibor bering: @v4 โ€” bu action'ning versiyasi. Versiyani ko'rsatish tavsiya etiladi, chunki keyingi versiyalar o'zgarib ketishi mumkin.

run: | (quvur belgisi) bir nechta qatorli buyruqlarni yozishga imkon beradi. Har bir qator alohida bajariladi.

Birinchi to'liq workflow

Endi hamma qismlarni birlashtiramiz. Quyidagi fayl .github/workflows/ci.yml ga saqlanadi:

name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - name: Kodni yuklab olish
        uses: actions/checkout@v4

      - name: Node versiyasini ko'rsatish
        run: node --version

      - name: Loyiha fayllari
        run: ls -la

Bu faylni repoga qo'shib, git push qilganingizdan so'ng GitHub'da Actions yorlig'iga o'ting โ€” workflow'ning ishga tushganini va har bir qadamning natijasini ko'rasiz.

Natijani qayerda ko'rish

Xulosa