Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Classic Release Pipeline'larından YAML'a Geçiş ve 2023–2026'da Azure Pipelines'ta Değişenler
Classic release pipeline'ları YAML'a dışa aktarılamaz; build'ler Export to YAML ile başlar, release'ler stage, check ve template'lerle elle yeniden kurulur. Bookstore'da task group'u step template'ine, eski release'i yeniden deploy etmeyi pipeline resource'lu bir pipeline'a çeviriyor, classic oluşturmayı kapatıyor ve 2023–2026 arasındaki değişiklikleri, roadmap'i ve Azure DevOps'ta kalma kararını tarihleriyle topluyoruz.
Azure Pipelines Agent'ları ve Güvenlik: Microsoft-Hosted, Self-Hosted, Managed DevOps Pools ve Protected Resource'lar
Microsoft-hosted agent her job için yeni bir makine verir ama ücretsiz katmanda tek parallel job ve 60 dakika sınırı var; daha fazlası için self-hosted agent ya da Managed DevOps Pools gerekir. Bookstore için tek job'lık bir container agent'ı hazırlıyor, image takvimini, job authorization scope'u, protected resource'ları, settableVariables ile değişken kısıtlamayı ve Node.js runner'larının kaldırılma tarihlerini görüyoruz.
Azure Pipelines ile Azure'a Şifresiz Deploy: Workload Identity Federation, App Service Slot'ları ve EF Core Migration Bundle
Workload identity federation ile Azure service connection'ı hiçbir secret saklamadan çalışır: Azure DevOps bir OIDC token'ı üretir, Entra ID onu federated credential ile eşleştirip access token verir. Bookstore'u resource group'a sınırlı connection'larla App Service staging slot'una deploy ediyor, smoke test ve swap yapıyor, migration bundle'ı Key Vault'tan gelen connection string'le çalıştırıyor ve Azure DevOps issuer'ının 2027 emekliliğini görüyoruz.
Environment, Approval ve Check'ler: Deployment Job ile YAML'da Release Süreci
Azure Pipelines'ta approval ve check'ler YAML'da değil, environment gibi resource'ların üzerinde tanımlanır; bu yüzden pipeline dosyasını değiştiren biri onları atlayamaz. Bookstore'a deployment job'lı dev, staging ve production stage'leri ekliyor, release artifact'ını doğruluyor, check'lerin sırasını, production'a yalnızca main'den onayla gitmeyi ve classic release karşılıklarını görüyoruz.
Azure Pipelines ile .NET + Angular CI: UseDotNet, NuGet Cache, Test Sonuçları, Coverage ve Pipeline Artifact
Azure Pipelines'ta .NET ve Angular CI'ı, lock dosyasına bağlı Cache@2, TRX ve JUnit için PublishTestResults@2, Cobertura için PublishCodeCoverageResults@2 ve job'lar arası PublishPipelineArtifact@1 ile kurulur. Bookstore'un template'lerine bunları ekliyor, DotNetCoreCLI@2'nin Microsoft.Testing.Platform'da --report-trx eklemesini, --locked-mode'u ve api ile web çıktısını tek release paketinde birleştiren job'ı görüyoruz.
Azure Pipelines Template'leri: Step, Job, Stage ve extends Template ile Ortak Pipeline Kurmak
Azure Pipelines template'leri step, job, stage ve variable seviyesinde YAML'ı tekrar kullanmayı sağlar; extends template ise pipeline'ın iskeletini merkeze alır ve required template check ile bağlayıcı olur. Bookstore için .NET ve Angular job template'lerini ayrı bir pipeline-templates repository'sine taşıyıp tag'e pin'liyor, each ve koşullu eklemeyle inline script'leri engelleyen, audit job'ını zorunlu kılan bir iskelet kuruyoruz.
Azure Pipelines'ta Variable, Parameter ve Expression'lar: ${{ }}, $( ) ve $[ ] Farkı
Azure Pipelines'ta ${{ }} dosya işlenirken, $( ) her task'tan hemen önce, $[ ] ise job veya stage başlarken değerlendirilir; hangisini seçtiğin değerin o anda var olup olmadığını belirler. Bookstore için sürümü bir job'da hesaplayıp output olarak taşıyor, secret'ların env'e neden kendiliğinden gelmediğini, runtime parameter'ları, variable group'ları ve CI, zamanlanmış ve pipeline completion trigger'larını görüyoruz.
Azure DevOps Pipelines Nedir? Organization, Project, YAML Pipeline ve İlk CI Çalıştırması
Azure Pipelines, Azure DevOps'un bir project içindeki YAML dosyasını trigger'larla çalıştırıp job'ları agent'larda koşturan CI/CD servisidir; hiyerarşi pipeline, stage, job ve step'tir. Bookstore için restore, build ve SQL Server'lı integration testi yapan ilk pipeline'ı yazıyor, Azure Repos'ta pull request doğrulamasının branch policy ile yapıldığını, GitHub App bağlantısını ve GitHub Actions eşlemesini görüyoruz.