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.
.gitlab-ci.ymlDosyasının Analizi: GitLab Runner (veya yerleşik CI kullanılıyorsa GitLab).gitlab-ci.ymldosyasından yapılandırmayı okur. Bu dosya, boru hattının aşamalarını (stages) ve görevlerini (jobs) tanımlar.- 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.ymlyapılandırması hakkında bilgi alır. - Ç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
- Aşamaların (stages) Yürütülmesi: Boru hattı,
.gitlab-ci.ymldosyasında tanımlanan aşamalar sırasıyla yürütülür. Aynı aşamadaki görevler paralel olarak çalıştırılabilir. - 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
variablesbölümünde belirtilmemişse. - Depoyu klonlama (GitLab tarafından zaten yapıldı, ancak Runner
git fetchveyagit checkoutyapabilir, 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.
- Bir imaj veya yürütücü (executor) tanımı, eğer boru hattı veya
- 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.
- Sonraki Aşamaya Geçiş: Eğer mevcut aşamadaki tüm görevler başarıyla tamamlandıysa (veya
allow_failureayarlandıysa), bir sonraki aşama başlar. Bir görev hata ile sona ererse veallow_failureayarlanmadıysa, tüm boru hattı durdurulur. - 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.