Azure'a Sürekli Dağıtım
Derleme çıktısını bir App Service yuvasına gönderen, duman sınamalarını çalıştıran ve onayla üretime geçen bir dağıtım aşaması ekleyerek işlem hattını genişletin.
Azure'a Sürekli Dağıtım, CoddyKit'te ücretsiz bir Azure Fundamentals dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Azure Fundamentals öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Azure Fundamentals kursu toplamda 4 dersten oluşur.
Sürekli Dağıtım Nedir?
Sürekli Dağıtım (CD), CI testlerini geçen her değişikliği manuel müdahale olmadan otomatik olarak üretime yayımlar. Sürekli Teslim bunun daha esnek biçimidir; dağıtımı bir hazırlama ortamına kadar otomatikleştirir ve üretime geçmeden önce insan onayı kapısı gerektirir. Her iki uygulama da aynı pipeline altyapısı üzerine kuruludur. Azure Pipelines'ta CD, CI aşamasından sonra dağıtım aşamaları eklenerek ve gerektiğinde onay kapılarına sahip Azure ortamları hedeflenerek uygulanır.
Çok Aşamalı Pipeline: CI + CD
Tam bir CI/CD pipeline'ı en az üç aşamaya sahiptir: Build (derleme, test etme, yapıt yayımlama), Deploy to Staging (yapıtı üretim dışı bir yuvaya dağıtma) ve Deploy to Production (onaydan sonra yuvayı değiştirme veya dağıtım yapma). Aşamalar yapıtı pipeline yapıt depolama alanı üzerinden aktarır. Hazırlama aşaması tümleştirme veya duman testlerini otomatik olarak çalıştırır; üretim aşaması ilerlemeden önce manuel onay bekler.
# azure-pipelines.yml: multi-stage CI/CD
trigger:
branches:
include: [main]
pool:
vmImage: ubuntu-latest
stages:
- stage: Build
jobs:
- job: BuildApp
steps:
- script: npm ci && npm run build
- task: PublishPipelineArtifact@1
inputs: {targetPath: dist, artifactName: webapp}
- stage: DeployStaging
dependsOn: Build
jobs:
- deployment: StagingDeploy
environment: Staging
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs: {appName: myapp-staging, package: '$(Pipeline.Workspace)/webapp'}
- stage: DeployProduction
dependsOn: DeployStaging
jobs:
- deployment: ProductionDeploy
environment: Production # Has manual approval gate
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs: {appName: myapp, package: '$(Pipeline.Workspace)/webapp'}Dağıtım İşleri ve Ortamlar
Dağıtım aşamaları için normal job yerine deployment işleri kullanın. Dağıtım işleri dağıtım stratejilerini (runOnce, rolling, canary) destekler, her ortamın dağıtım geçmişini izler ve Azure DevOps Environments'a başvurmak zorundadır. Bir ortam, hangi pipeline çalıştırmalarının kendisine dağıtım yaptığını ve hangi sürümün o anda canlı olduğunu kaydeder; ayrıca onay kapılarını, denetimleri ve kaynak sağlık durumunu tek bir panoda sunar.
# Deployment job with rolling strategy
- job: RollingDeploy
strategy:
rolling:
maxParallel: 2 # Deploy to 2 targets at a time
preDeploy:
steps:
- script: echo 'Pre-deploy checks'
deploy:
steps:
- task: AzureWebApp@1
inputs:
appName: myapp
package: '$(Pipeline.Workspace)/webapp'
postRouteDeploy:
steps:
- script: curl -f https://myapp.azurewebsites.net/healthAzure App Service'e Dağıtım
AzureWebApp@1 görevi bir web uygulamasını Azure App Service'e dağıtır. Belirli bir yuvaya (örneğin staging) dağıtımı, ZIP paketlerini, Docker görüntülerini veya JAR/WAR dosyalarını destekler. Bir hazırlama yuvasına dağıtım yaptıktan sonra, hazırlama yuvasını üretime değiştirmek için AzureAppServiceManage@0 görevini kullanın. Bu, App Service için tercih edilen sıfır kesinti süreli dağıtım modelidir.
# Deploy to staging slot, then swap to production
steps:
- task: AzureWebApp@1
displayName: 'Deploy to staging slot'
inputs:
azureSubscription: 'AzureProductionSC'
appType: webAppLinux
appName: myUniqueWebApp
deployToSlotOrASE: true
resourceGroupName: MyRG
slotName: staging
package: '$(Pipeline.Workspace)/webapp/app.zip'
runtimeStack: 'NODE|18-lts'
- task: AzureAppServiceManage@0
displayName: 'Swap staging into production'
inputs:
azureSubscription: 'AzureProductionSC'
action: Swap Slots
webAppName: myUniqueWebApp
resourceGroupName: MyRG
sourceSlot: stagingCD Pipeline'ında Duman Testleri
Hazırlama ortamına dağıtım yaptıktan sonra duman testlerini çalıştırın. Bunlar, dağıtımın başarılı olduğunu ve uygulamanın doğru yanıt verdiğini doğrulayan en temel test kümesidir. Duman testleri genellikle temel API uç noktalarını çağırır ve beklenen durum kodlarını ve yanıt içeriğini doğrular. Duman testleri başarısız olursa pipeline, üretime geçmeden veya onay istemeden önce durur; böylece hatalı bir sürümün kullanıcılara ulaşması önlenir.
# Smoke test step after staging deployment
- script: |
MAX_RETRY=10
COUNT=0
until curl -sf https://myUniqueWebApp-staging.azurewebsites.net/health; do
COUNT=$((COUNT+1))
if [ $COUNT -ge $MAX_RETRY ]; then
echo 'Health check failed after $MAX_RETRY attempts'
exit 1
fi
echo 'Waiting for app to start... attempt '$COUNT
sleep 10
done
echo 'App is healthy'
displayName: 'Smoke test: health endpoint'Ortam Onay Kapıları
Dağıtımların ilerlemeden önce manuel onay gerektirmesi için Azure DevOps Environments'a onay kapıları ekleyin. Ortam ayarlarına gidin ve Approvals ekleyin; onay vermesi gereken kullanıcıları veya grupları belirtin. Pipeline, bu ortamı hedefleyen bir dağıtım işine ulaştığında duraklar ve e-posta bildirimi gönderir. Onaylayanlar dağıtım ayrıntılarını görüntüleyebilir ve Azure DevOps portalında ya da bildirim e-postasındaki bağlantı üzerinden onaylayabilir veya reddedebilir.
# Pipeline YAML: deployment to production environment
# (Approval configured in Azure DevOps portal on 'Production' environment)
- stage: DeployProduction
displayName: 'Deploy to Production'
dependsOn: DeployStaging
condition: succeeded('DeployStaging')
jobs:
- deployment: ProdDeploy
environment: Production # <-- Triggers approval gate configured in portal
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs:
appName: myapp-prod
package: '$(Pipeline.Workspace)/webapp/app.zip'Azure Kubernetes Service'e Dağıtım
Kapsayıcılı uygulamaları KubernetesManifest@0 görevini kullanarak AKS'ye dağıtın. Bu görev, yerleşik imagePullSecrets ve canary dağıtımı desteğiyle Kubernetes YAML bildirimlerini kümeye uygular. Azure DevOps'ta yapılandırılmış bir Kubernetes hizmet bağlantısını kullanarak AKS kümesine bağlanın. Görev, arka planda kubectl apply komutunu kullanır ve adımı başarılı olarak işaretlemeden önce kullanıma alma işleminin tamamlanmasını bekler.
# AKS deployment step in Azure Pipelines
- task: KubernetesManifest@0
displayName: 'Deploy to AKS'
inputs:
action: deploy
kubernetesServiceConnection: 'AKS-Production-SC'
namespace: production
manifests: |
k8s/deployment.yaml
k8s/service.yaml
containers: 'mycontainerregistry.azurecr.io/myapp:$(Build.BuildId)'
imagePullSecrets: acr-secretGörüntü Etiketleme Stratejisi
Kapsayıcı görüntülerini derleme kimliğiyle ($(Build.BuildId)) veya Git işleme SHA'sıyla ($(Build.SourceVersion)) etiketleyin. Böylece çalışan bir kapsayıcıyı, onu oluşturan kodun tam sürümüne her zaman geri izleyebilirsiniz. Üretimde latest etiketini kullanmaktan kaçının; Kubernetes bu etiketi önbelleğe alabilir ve yeni sürümü çekmeyebilir. Belirli görüntü etiketini bir pipeline değişkeni olarak depolayın ve dağıtım sırasında envsubst veya sed kullanarak bunu Kubernetes bildirimlerine ekleyin.
# Tag and push image with build ID in CI stage
- script: |
IMAGE='mycontainerregistry.azurecr.io/myapp'
TAG='$(Build.BuildId)'
docker build -t $IMAGE:$TAG -t $IMAGE:latest .
az acr login --name mycontainerregistry
docker push $IMAGE:$TAG
docker push $IMAGE:latest
echo "##vso[task.setvariable variable=imageTag;isOutput=true]$TAG"
name: BuildImage
displayName: 'Build and push container image'Geri Alma Stratejileri
Üretim dağıtımları için bir geri alma stratejisi tanımlayarak hatalı bir sürümden hızlıca kurtulabilmenizi sağlayın. App Service için geri alma, üretim yuvasını önceki hazırlama sürümüne geri değiştirmek anlamına gelir. AKS için kubectl rollout undo komutunu kullanın. Özel bir geri alma işlem hattı oluşturun veya Azure DevOps portalından tetiklenebilecek bir el ile geri alma işi ekleyin. Geri alma prosedürünü belgeleyin ve düzenli olarak uygulayın — test edilmemiş bir geri alma, geri alma sayılmaz.
# Rollback job triggered manually
- job: Rollback
condition: and(failed(), eq(variables['Build.Reason'], 'Manual'))
steps:
# App Service rollback: swap production back to previous
- task: AzureAppServiceManage@0
inputs:
azureSubscription: 'AzureProductionSC'
action: Swap Slots
webAppName: myUniqueWebApp
resourceGroupName: MyRG
sourceSlot: production # Swap production back to staging version
targetSlot: stagingDağıtım Bildirimleri ve İzleme
Her üretim dağıtımından sonra yeni sürümün sağlıklı olduğunu doğrulamak için otomatik olarak bir izleme denetimi çalıştırın. Azure Monitor ölçümlerini sorgulamak için AzureMonitor@1 işlem hattı denetimini kullanın — dağıtımdan sonra hata oranları yükselirse işlem hattının ilerlemesini engelleyin ve geri almayı tetikleyin. Ekibin bir dağıtımın ne zaman tamamlandığını ve hangi sürümün yayında olduğunu bilmesi için dağıtım bildirimlerini webhook görevleri aracılığıyla Microsoft Teams veya Slack'e gönderin.
# Send Teams notification on deployment completion
- task: InvokeRestAPI@1
displayName: 'Notify Teams channel'
inputs:
connectionType: connectedServiceName
serviceConnection: 'TeamsWebhookSC'
method: POST
body: '{
"text": "Deployed **$(Build.BuildId)** to Production. Committed by $(Build.RequestedFor). <br>View: https://myapp.contoso.com"
}'
waitForCompletion: falseCD En İyi Uygulamaları
Şu sürekli dağıtım en iyi uygulamalarını izleyin: sık sık dağıtım yapın (küçük gruplar riski azaltır), dağıtımı sürümden ayırmak için özellik bayraklarını kullanın, üretimden önce tüm kalite kapılarını otomatikleştirin, farklılıkların hataları gizlememesi için üretime benzer hazırlama ortamları kullanın, dağıtım pencerelerini otomatik durum denetimleriyle izleyin ve her zaman test edilmiş bir geri alma planınız olsun. Olgun bir CD işlem hattı, dağıtımı yüksek stresli bir işlem yerine sıradan bir etkinlik hâline getirir.
Hızlı Kontrol
Bu derste ele alınan Microsoft Azure Fundamentals (AZ-900) kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: çok aşamalı YAML işlem hatları, Build, Staging ve Production aşamalarını yapıt aktarımıyla birbirine bağlar; Environments içeren dağıtım işleri, onay kapılarını ve dağıtım takibini etkinleştirir; hazırlama dağıtımından sonraki duman testleri ise bozuk sürümlerin üretime ulaşmasını önler. Sırada Azure üzerinde GitHub Actions'ı inceleyeceğiz.
Sıkça Sorulan Sorular
“Azure'a Sürekli Dağıtım” dersi ücretsiz mi?
Evet — “Azure'a Sürekli Dağıtım” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Azure Fundamentals kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Azure Fundamentals kursu toplamda 4 dersten oluşur.
“Azure'a Sürekli Dağıtım” dersinde ne öğreneceğim?
Derleme çıktısını bir App Service yuvasına gönderen, duman sınamalarını çalıştıran ve onayla üretime geçen bir dağıtım aşaması ekleyerek işlem hattını genişletin. Azure Fundamentals ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Azure Fundamentals öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Azure Fundamentals, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Azure'a Sürekli Dağıtım” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Azure Fundamentals dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Azure Fundamentals dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Azure DevOps Services Genel Bakış
- Azure Pipelines ile CI İşlem Hattı Oluşturma
- Azure'a Sürekli Dağıtım
- Azure'da GitHub Actions