Sobes.tech
Middle

GitLab kodu indirdikten sonra ne oluyor?

sobes.tech yapay zeka

AI'dan gelen yanıt

GitLab, kodu çalışma dizinine indirdikten sonra, .gitlab-ci.yml dosyasında tanımlanan CI/CD boru hattının yürütülmesine başlar.

  1. .gitlab-ci.yml Dosyasının Analizi: GitLab Runner (veya yerleşik CI kullanılıyorsa GitLab) .gitlab-ci.yml dosyasından yapılandırmayı okur. Bu dosya, boru hattının aşamalarını (stages) ve görevlerini (jobs) tanımlar.
  2. Runner'ın Başlatılması: Boru hattını çalıştırmak üzere kullanılabilir bir GitLab Runner atanır. Runner, depo, commit, dal ve .gitlab-ci.yml yapılandırması hakkında bilgi alır.
  3. Çalıştırma Ortamının Oluşturulması: Runner, görevleri yürütmek için bir ortam hazırlar. Bu ortam şunlar olabilir:
    • Sanal makine
    • Konteyner (Docker, Kubernetes)
    • Ayrı bir sunucu
    • Shell
  4. Aşamaların (stages) Yürütülmesi: Boru hattı, .gitlab-ci.yml dosyasında tanımlanan aşamalar sırasıyla yürütülür. Aynı aşamadaki görevler paralel olarak çalıştırılabilir.
  5. Görevlerin (jobs) Yürütülmesi: Her aşama içinde, yapılandırılmış görevler yürütülür. Bir görev şunları içerir:
    • Bir imaj veya yürütücü (executor) tanımı, eğer boru hattı veya variables bölümünde belirtilmemişse.
    • Depoyu klonlama (GitLab tarafından zaten yapıldı, ancak Runner git fetch veya git checkout yapabilir, ihtiyaç duyulan duruma göre).
    • Önbelleğin geri yüklenmesi (varsa), derlemeyi hızlandırmak için (örneğin, bağımlılıkların yüklenmesi).
    • Betiklerin (script) yürütülmesi: Bu, derleme, test, analiz veya dağıtım komutlarının yürütüldüğü ana içeriktir.
    • Artefaktların yüklenmesi (varsa): Görevin sonuçları (örneğin, derlenmiş ikili dosyalar, raporlar) daha sonra kullanılmak veya indirmek üzere saklanır.
    • Önbelleğin kaydedilmesi (varsa), gelecekteki çalışmaları hızlandırmak için.
  6. Durum Raporu: Runner, her görevin durumunu (başarılı, hata, iptal) GitLab'a geri gönderir. Kullanıcı, ilerlemeyi ve sonuçları boru hattı sayfasında görür.
  7. Sonraki Aşamaya Geçiş: Eğer mevcut aşamadaki tüm görevler başarıyla tamamlandıysa (veya allow_failure ayarlandıysa), bir sonraki aşama başlar. Bir görev hata ile sona ererse ve allow_failure ayarlanmadıysa, tüm boru hattı durdurulur.
  8. Boru Hattının Sonlandırılması: Tüm aşamalar tamamlandıktan sonra (veya hata durumunda), boru hattı sona erer. Sonuçlar ve artefaktlar, GitLab'ın web arayüzü üzerinden erişilebilir.

Örnek .gitlab-ci.yml yapısı:

// Boru hattı aşamalarını tanımlar
stages:
  - build
  - test
  - deploy

// build aşamasındaki derleme görevi
build_job:
  stage: build
  image: docker:latest // Docker imajı kullanılır
  script:
    - echo "Uygulamayı derliyoruz..."
    - docker build -t myapp:$CI_COMMIT_SHORT_SHA . // Docker imajını oluştur
  artifacts:
    paths:
      - myapp.tar // Derleme artefaktını kaydet

// test aşamasındaki test görevi
test_job:
  stage: test
  image: python:3.9 // Python imajı kullanılır
  script:
    - echo "Testleri çalıştırıyor..."
    - pip install -r requirements.txt
    - pytest // Testleri gerçekleştir
  needs: ["build_job"] // build_job'un başarılı tamamlanmasına bağlı

// deploy aşamasındaki dağıtım görevi
deploy_job:
  stage: deploy
  image: ubuntu:latest // Ubuntu imajı kullanılır
  script:
    - echo "Uygulamayı dağıtıyor..."
    - echo "Buraya dağıtım betiği gelecek..." // Dağıtım betiği
  only: // Sadece master veya etiketlerde çalıştırılır
    - master
    - tags
  needs: ["test_job"] // test_job'un başarılı tamamlanmasına bağlı

Dolayısıyla, kodun indirilmesi sadece ilk adımdır ve ardından .gitlab-ci.yml yapılandırmasına dayanan karmaşık otomatik derleme, test ve dağıtım süreci gelir.