GitHub Actions — GitHub repository hodisalari asosida avtomatlashtirilgan workflowlarni ishga tushiradigan CI/CD platformasidir. Workflow YAML faylida trigger, job va steplar bilan tavsiflanadi. Test, lint, build, security scan, release va deployment kabi jarayonlar push, pull request, schedule yoki qo‘lda berilgan signalga javoban bajarilishi mumkin.
Workflow tuzilishi
Workflow fayllari .github/workflows katalogida saqlanadi. on ishga tushish hodisasini, jobs parallel yoki bog‘liq ishlarni, step esa command yoki qayta ishlatiladigan actionni belgilaydi.
name: test
on: [push, pull_request]
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm test
Har job yangi runner muhitida boshlanishi mumkin. Bir jobdagi fayl boshqasiga avtomatik o‘tmaydi; artifact yoki cache orqali uzatiladi.
Runner
GitHub-hosted runner vaqtinchalik virtual muhit bo‘lib, job tugagach yo‘q qilinadi. ubuntu-latest aniq image mazmuni vaqt o‘tishi bilan yangilanishi mumkin; zarur runtime versiyasi setup action orqali aniq belgilanadi.
Self-hosted runner tashkilot infratuzilmasida ishlaydi va maxsus hardware yoki ichki tarmoqqa kirish beradi. Public repositorydagi ishonchsiz pull request kodi self-hosted runnerda secret va ichki tarmoqqa xavf tug‘dirishi mumkin. Runner izolyatsiyasi, label va tasdiq siyosati qat’iy boshqariladi.
Secret va permission
Secret qiymatlar repository, environment yoki organization darajasida saqlanadi. Log maskasi secretni ayrim holatda yashiradi, lekin uni commandga noto‘g‘ri chiqarish xavfsiz emas. Forkdan kelgan pull requestlarga secret odatda berilmaydi.
GITHUB_TOKEN workflow uchun vaqtinchalik token beradi. Uning permissionlari contents: read kabi eng kam huquq bilan belgilanadi. pull_request_target base branch kontekstida yuqori huquq bilan ishlashi mumkin; ishonchsiz PR kodini checkout qilib bajarish supply-chain zaifligi keltiradi.
Action dependency
uses boshqa repositorydagi actionni ishga tushiradi. Faqat mutable tagga tayanish action kodi keyin o‘zgarganda workflow xatti-harakatini almashtirishi mumkin. Muhim pipeline actionni to‘liq commit SHA bilan pin qiladi va yangilanishini nazoratli boshqaradi.
Third-party action runnerdagi token va fayllarga kira oladigan koddir. Uning manbasi, permissioni va dependencylari oddiy package kabi tekshiriladi.
Matrix va bog‘liqlik
Matrix bir jobni bir nechta OS, runtime yoki konfiguratsiyada bajaradi. needs joblar orasidagi dependency va output oqimini belgilaydi. if sharti step yoki jobning qachon bajarilishini boshqaradi. Fail-fast sozlamasi bitta matrix varianti xato qilganda boshqalarini to‘xtatishi mumkin.
Concurrency group bir branch yoki environment uchun eski workflowlarni bekor qilib, parallel deployment to‘qnashuvini kamaytiradi. Environment protection production deploydan oldin reviewer va branch qoidalarini talab qilishi mumkin.
Cache va artifact
Cache dependency downloadini tezlashtiradi, artefakt esa build natijasi yoki test hisobotini joblar va runlar orasida saqlaydi. Cache key lockfile hashiga bog‘lanadi. Ishonchsiz branch cache poisoning xavfi sabab cache scope va restore keylar bilan ehtiyot boshqariladi.
Trigger va concurrency
Workflow push, pull_request, jadval, qo‘lda ishga tushirish yoki boshqa workflow natijasi kabi hodisaga bog‘lanadi. Trigger filtrlari branch va fayl yo‘llari bo‘yicha keraksiz ishlarni kamaytiradi, ammo required check filtri sabab umuman yaratilmasa, pull request kutilayotgan holatda qolishi mumkin. concurrency guruhi bir branch uchun eski runni bekor qilib, faqat eng yangi commitni tekshirishga imkon beradi. Deploy jarayonida esa parallel ishlarni bekor qilish ehtiyotkorlik bilan belgilanadi: yarim bajarilgan chiqarish tashqi tizimda holat qoldirishi mumkin. Eventdan kelgan matn ishonchsiz kirish deb qaraladi va shell buyruqlariga to‘g‘ridan-to‘g‘ri qo‘shilmaydi.
Bog‘liq tushunchalar
CI/CD, workflow, runner, GitHub, artifact, secret, deployment