18-bo‘lim

GitLab CI bilan solishtirish

Bir xil quvurning ikki vositadagi ko'rinishi, atamalar mosligi, Jenkins haqida qisqacha va vosita tanlash mezonlari.

🕑 7 daqiqa o‘qish 📄 743 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Atamalar jadvali
  2. Bir xil quvur - ikki fayl
  3. Asosiy farqlar
  4. Jenkins - eski avlod, hali ham tirik
  5. Vosita tanlash
  6. Ko'chib o'tish
  7. Xulosa

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 #

TushunchaGitHub ActionsGitLab CI
Sozlama fayli.github/workflows/*.yml.gitlab-ci.yml (bitta fayl)
Ish bo'lagijobjob
Qadamstepscript qatori
Bosqichlar tartibineedsstages yoki needs
Bajaruvchirunnerrunner
Tayyor qadamuses: actioninclude yoki extends
SirSecretsCI/CD Variables (masked)
Artefaktupload-artifactartifacts:
Keshactions/cachecache:
Muhitenvironment:environment:
Qo'lda ishga tushirishworkflow_dispatchwhen: manual

Bir xil quvur - ikki fayl #

GitHub Actions:

YAML
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:

YAML
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 #

JihatGitHub ActionsGitLab CI
Fayllar soniHar quvur - alohida faylOdatda bitta .gitlab-ci.yml
Muhitruns-on bilan mashina tanlanadiimage: bilan konteyner tanlanadi
Qayta ishlatishMarketplace'dagi minglab amalinclude, extends, shablonlar
TartibFaqat needs (graf)stages (bosqichlar) yoki needs
ArtefaktlarAlohida amal bilanTilning o'zida (artifacts:)
Bepul chegaraOchiq repozitoriyda cheksizBepul rejada oylik daqiqa
GitLab da konteyner - asosiy tushuncha

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.

Groovy
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 ustunligiJenkins kamchiligi
Har qanday narsani qila oladiServerni o'zingiz boqasiz
Mingdan ortiq plaginPlaginlar eskiradi va mojaro qiladi
To'liq nazoratYangilanish og'riqli
Internetdan mustaqilSozlash ancha vaqt oladi

Yangi loyihada Jenkins ni tanlash uchun aniq sabab bo'lishi kerak - masalan, internetdan ajratilgan muhit yoki mavjud katta infratuzilma.

Vosita tanlash #

Natija
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.

Uchta vosita - bitta tushuncha GitHub Actions Fayl: .github/workflows/ Muhit: virtual mashina Qayta ishlatish: Marketplace Ochiq loyihada bepul GitLab CI Fayl: .gitlab-ci.yml Muhit: konteyner (image) Qayta ishlatish: include O'z serveringizda ham Jenkins Fayl: Jenkinsfile (Groovy) Muhit: agent Qayta ishlatish: plaginlar To'liq nazorat, ko'p ish Sintaksis boshqacha, tushunchalar bir xil: hodisa, job, qadam, artefakt, sir
Vosita almashtirish - sintaksisni o'rganish; tushunchalar o'zgarmaydi

Ko'chib o'tish #

Quvurni bir vositadan boshqasiga ko'chirishda tartib shunday bo'ladi:

QadamNima qilinadi
1Joriy quvurdagi har bir qadamni ro'yxatga oling
2Tayyor amallar (uses:) o'rniga oddiy buyruqlarni toping
3Sirlarni yangi joyga ko'chiring va almashtiring
4Ikkala quvurni bir muddat parallel ishlating
5Natijalar mos kelganiga ishonch hosil qiling
6Eskisini o'chiring

Uchinchi qadam ko'pincha e'tibordan chetda qoladi: ko'chirish paytida sirlar ikki joyda qoladi va eskisi unutiladi.

Tayyor amallarga haddan tashqari bog'lanmang

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.

Amaliy topshiriq
  1. Atamalar jadvalini o'z so'zingiz bilan qayta yozing.
  2. Mavjud GitHub Actions quvuringizni GitLab CI sintaksisida yozing.
  3. Ikkalasida kesh qanday sozlanishini solishtiring.
  4. Artefakt saqlashdagi farqni yozing.
  5. GitLab'da stages va needs farqini tushuntiring.
  6. Jenkins uchun bir bosqichli Jenkinsfile yozib ko'ring.
  7. Uchala vositada sirlar qanday saqlanishini solishtiring.
  8. O'z loyihangiz uchun vosita tanlab, sababini uch jumlada asoslang.
  9. Quvuringizdagi qaysi qadamlar uses: ga bog'langanini sanang.
  10. 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-on mashina tanlaydi, GitLab'da image: konteyner tanlaydi.
  • Shuning uchun GitLab quvurlarida setup-node kabi 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.

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.