18-bo‘lim
GitLab CI bilan solishtirish
Bir xil quvurning ikki vositadagi ko'rinishi, atamalar mosligi, Jenkins haqida qisqacha va vosita tanlash mezonlari.
Ushbu bo‘lim mundarijasi
GitHub Actions - yagona vosita emas. Tushunchalarni bir marta o'rgansangiz, boshqasiga o'tish bir necha soatlik ish bo'ladi. Buni ko'rsatish uchun bir xil quvurni ikki vositada yozamiz.
Atamalar jadvali #
| Tushuncha | GitHub Actions | GitLab CI |
|---|---|---|
| Sozlama fayli | .github/workflows/*.yml | .gitlab-ci.yml (bitta fayl) |
| Ish bo'lagi | job | job |
| Qadam | step | script qatori |
| Bosqichlar tartibi | needs | stages yoki needs |
| Bajaruvchi | runner | runner |
| Tayyor qadam | uses: action | include yoki extends |
| Sir | Secrets | CI/CD Variables (masked) |
| Artefakt | upload-artifact | artifacts: |
| Kesh | actions/cache | cache: |
| Muhit | environment: | environment: |
| Qo'lda ishga tushirish | workflow_dispatch | when: manual |
Bir xil quvur - ikki fayl #
GitHub Actions:
name: Quvur
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm test
qurish:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- uses: actions/upload-artifact@v4
with:
name: sayt
path: dist/
GitLab CI da xuddi shu narsa:
stages:
- test
- qurish
default:
image: node:22-alpine
cache:
key:
files:
- package-lock.json
paths:
- .npm/
test:
stage: test
script:
- npm ci --cache .npm --prefer-offline
- npm test
rules:
- if: $CI_COMMIT_BRANCH == "main"
qurish:
stage: qurish
script:
- npm ci --cache .npm --prefer-offline
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
Tuzilma bir xil, farqlar tafsilotda.
Asosiy farqlar #
| Jihat | GitHub Actions | GitLab CI |
|---|---|---|
| Fayllar soni | Har quvur - alohida fayl | Odatda bitta .gitlab-ci.yml |
| Muhit | runs-on bilan mashina tanlanadi | image: bilan konteyner tanlanadi |
| Qayta ishlatish | Marketplace'dagi minglab amal | include, extends, shablonlar |
| Tartib | Faqat needs (graf) | stages (bosqichlar) yoki needs |
| Artefaktlar | Alohida amal bilan | Tilning o'zida (artifacts:) |
| Bepul chegara | Ochiq repozitoriyda cheksiz | Bepul rejada oylik daqiqa |
GitHub'da runs-on: ubuntu-latest - bu virtual mashina, unga
kerakli narsani siz o'rnatasiz.
GitLab'da image: node:22-alpine - bu konteyner, ya'ni muhit
allaqachon tayyor. Shuning uchun GitLab quvurlarida setup-node kabi
qadamlar umuman uchramaydi.
Ikkala yondashuv ham to'g'ri - faqat mantiq boshqacha.
Jenkins - eski avlod, hali ham tirik #
Jenkins CI ning klassikasi va hali ham ko'p korxonada ishlaydi. Uning
mantiqi boshqacha: quvur Jenkinsfile da, Groovy tilida yoziladi.
pipeline {
agent { docker { image 'node:22-alpine' } }
stages {
stage('Test') {
steps {
sh 'npm ci'
sh 'npm test'
}
}
stage('Qurish') {
steps {
sh 'npm run build'
archiveArtifacts artifacts: 'dist/**'
}
}
}
}
| Jenkins ustunligi | Jenkins kamchiligi |
|---|---|
| Har qanday narsani qila oladi | Serverni o'zingiz boqasiz |
| Mingdan ortiq plagin | Plaginlar eskiradi va mojaro qiladi |
| To'liq nazorat | Yangilanish og'riqli |
| Internetdan mustaqil | Sozlash ancha vaqt oladi |
Yangi loyihada Jenkins ni tanlash uchun aniq sabab bo'lishi kerak - masalan, internetdan ajratilgan muhit yoki mavjud katta infratuzilma.
Vosita tanlash #
Kod qayerda saqlanadi?
├── GitHub -> GitHub Actions (integratsiya tayyor)
├── GitLab -> GitLab CI (integratsiya tayyor)
└── O'z serveringizda
├── Sodda ehtiyoj -> Gitea Actions yoki Woodpecker
└── Murakkab ehtiyoj -> Jenkins yoki GitLab (o'zida)
Asosiy qoida: kod qayerda bo'lsa, quvur ham o'sha yerda bo'lgani qulay. Alohida CI serverini faqat aniq sabab bo'lganda qo'shing.
Ko'chib o'tish #
Quvurni bir vositadan boshqasiga ko'chirishda tartib shunday bo'ladi:
| Qadam | Nima qilinadi |
|---|---|
| 1 | Joriy quvurdagi har bir qadamni ro'yxatga oling |
| 2 | Tayyor amallar (uses:) o'rniga oddiy buyruqlarni toping |
| 3 | Sirlarni yangi joyga ko'chiring va almashtiring |
| 4 | Ikkala quvurni bir muddat parallel ishlating |
| 5 | Natijalar mos kelganiga ishonch hosil qiling |
| 6 | Eskisini o'chiring |
Uchinchi qadam ko'pincha e'tibordan chetda qoladi: ko'chirish paytida sirlar ikki joyda qoladi va eskisi unutiladi.
uses: bilan yozilgan har bir amal - bu ko'chib o'tishda qayta
yozilishi kerak bo'lgan joy.
Oddiy ishlarni (fayl ko'chirish, arxivlash, curl so'rovi) tayyor amal
bilan emas, oddiy buyruq bilan yozish quvurni ko'chma qiladi. Murakkab
ishlar uchun esa tayyor amal, albatta, oqlanadi.
- Atamalar jadvalini o'z so'zingiz bilan qayta yozing.
- Mavjud GitHub Actions quvuringizni GitLab CI sintaksisida yozing.
- Ikkalasida kesh qanday sozlanishini solishtiring.
- Artefakt saqlashdagi farqni yozing.
- GitLab'da
stagesvaneedsfarqini tushuntiring. - Jenkins uchun bir bosqichli
Jenkinsfileyozib ko'ring. - Uchala vositada sirlar qanday saqlanishini solishtiring.
- O'z loyihangiz uchun vosita tanlab, sababini uch jumlada asoslang.
- Quvuringizdagi qaysi qadamlar
uses:ga bog'langanini sanang. - Ulardan ikkitasini oddiy buyruqqa aylantiring va quvur baribir ishlashini tekshiring.
Xulosa #
- Tushunchalar hamma vositada bir xil: hodisa, job, qadam, artefakt, sir.
- GitHub Actions'da har quvur alohida fayl, GitLab'da odatda bitta
.gitlab-ci.yml. - GitHub'da
runs-onmashina tanlaydi, GitLab'daimage:konteyner tanlaydi. - Shuning uchun GitLab quvurlarida
setup-nodekabi qadamlar uchramaydi. - GitLab'da artefakt va kesh tilning o'zida, GitHub'da esa alohida amallar bilan.
- Jenkins eski avlod: kuchli va mustaqil, lekin serverni o'zingiz boqasiz.
- Yangi loyihada Jenkins tanlash uchun aniq sabab kerak.
- Asosiy qoida: kod qayerda bo'lsa, quvur ham o'sha yerda bo'lsin.
- Ko'chib o'tishda sirlarni faqat ko'chirish emas, almashtirish kerak.
uses:ga kamroq bog'lansangiz, quvuringiz ko'chma bo'ladi.
Keyingi bo'limda quvurning o'zini himoyalashni - ta'minot zanjiri xavfsizligini ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.