Kurs
CI/CD hattınız sürekli bozuluyor ya da yavaş ve hantal mı geliyor? Yalnız değilsiniz. Başarısız derlemeler, uyumsuz ortamlar ve ekip arkadaşlarımın yanlışlıkla çalışmalarımı üzerine yazdığı durumlarla ben de karşılaştım. Azure Pipelines, neredeyse her projeyi her platformda derleyebilen, test edebilen ve dağıtabilen bulut barındırmalı bir hizmetle bu sorunları ortadan kaldırır.
Bu yüzden bu eğitimde size şunları nasıl yapacağınızı göstereceğim:
- İlk Azure Pipeline’ınızı oluşturma
- Projenizi bulutta derleme
- Hataları erken yakalamak için otomatik testler ekleme
- Tek bir itmeyle geçiş ya da üretime dağıtma
- Hattınızı hız ve güvenilirlik için izleme ve optimize etme
- Gerçek projelerde kanıtlanmış en iyi uygulamaları takip etme
Hadi başlayalım!
Azure Pipelines nedir?
Azure Pipelines, uygulama geliştirme, test ve dağıtımı basitleştiren bulut tabanlı bir çözümdür.
Azure DevOps araç setinin bir bileşenidir ve yazılım geliştirme yaşam döngüsünün tamamını destekler. Çeşitli platformlar ve programlama dillerini desteklediği için her ölçekte ekip için esnek bir seçenektir. GitHub, Azure Repos ve diğer bilinen sürüm kontrol sistemleriyle entegredir.
Azure Pipelines’ın temel özellikleri şunlardır:
|
Hizmet |
Amaç |
|
Çoklu platform desteği |
Azure Pipelines, Linux, macOS ve Windows gibi çeşitli işletim sistemleri için uygulamaların derlenmesini ve dağıtılmasını otomatikleştirir. |
|
Sürüm kontrolü ile entegrasyon |
Azure Pipelines, Azure Repos, GitHub ve diğer bilinen sürüm kontrol sistemlerindeki kod depolarınıza bağlanır. |
|
YAML tabanlı hat yapılandırması |
Azure Pipelines, derleme ve dağıtım süreçlerini kod olarak tanımlamamıza olanak tanır ve sürümlemeyi mümkün kılar. |
|
Sürekli entegrasyon ve sürekli dağıtım (CI/CD) |
Azure Pipelines, kod değişikliklerinin entegre edilmesi ve uygulamaların dağıtılması sürecini uçtan uca kolaylaştırır. |
Deneyimlerime göre, Azure Pipelines, ekibi içinde düzgün bir CI/CD süreci isteyen herkes için faydalıdır. Esnektir, ölçeklenebilirdir ve diğer Azure hizmetleriyle iyi entegre olur.

Azure Pipelines Mimarisi (Kaynak: Microsoft).
Pipelines’ın ötesinde Azure DevOps’u daha geniş bir çerçevede anlamak istiyorsanız, Azure DevOps eğitimi baştan sona tüm CI/CD yaşam döngüsünü adım adım ele alıyor.
İlk Azure Pipeline’ınızı Kurma
Azure Pipelines ortamında çalışmak için önce uçtan uca derleme, test ve dağıtım sürecini mümkün kılacak her şeyi kurmamız gerekir.
Önkoşullar
İlk hattınızı oluşturmaya başlamadan önce, aşağıdakilere sahip olduğunuzdan emin olun:
- Azure DevOps hesabı ve organizasyon kurulumu: Zaten bir hesabınız yoksa Azure DevOps hesabına kaydolun. Projelerinizi yönetmek için bir organizasyon oluşturun.
- Depo: Örnek bir projeye sahip bir kod deposuna ihtiyacınız olacak. Bu, Azure Repos veya GitHub’da barındırılabilir. Bu eğitimde basit bir Node.js projesi kullanacağız.
- Azure portal erişimi: Azure Kubernetes Service (AKS) ve daha birçok Azure hizmetine dağıtım yapmak istediğinizde Azure portalına da erişiminiz olmalı.
Daha geniş Azure ekosistemini tazelemek isterseniz Understanding Microsoft Azure kursuna göz atmanızı öneririm.
Yeni proje ve depo oluşturma
Azure DevOps hesabınız ve organizasyonunuz hazır olduğuna göre, ilk projemizi ve depomuzu oluşturalım.
- Yeni bir proje oluşturun:
- Azure DevOps hesabınıza giriş yapın.
- New Project’e tıklayın, bir ad verin (ör. "AzureDevOps-DataCamp-Tutorial"), ve görünürlüğü (public veya private) seçin.
- Create Project’e tıklayın.

- Bir depo kurun:
- Azure Repos kullanıyorsanız Repos bölümüne gidip yeni bir depo başlatın.
- Alternatif olarak, Import Repository seçeneğini belirleyerek mevcut bir GitHub deposunu bağlayabilirsiniz.
- Depo adını verin, Repository type (Git veya TFVC) seçin, klonladığınız depo URL’sini yapıştırın ve Import’a tıklayın.

- GitHub kullanıyorsanız, proje arayüzünüzün sol altından Project Settings > GitHub Connections > Connect your GitHub account seçerek GitHub hesabınızı Azure DevOps’a bağlayabilirsiniz.



Bu eğitim için kod depomuz olarak Azure Repos’u kullanacağız. Yeni başlıyorsanız veya TFVC’yi seçmek için özel bir nedeniniz yoksa Git’i tercih etmenizi öneririm.
İlk hattınızı (pipeline) oluşturma
Şimdi ilk hattımızı oluşturalım. Aşağıdaki adımları izleyin:
- Pipelines bölümünüzde Create Pipeline’a tıklayın.


- Kaynak olarak Azure Repos Git’i seçin ve deponuzu belirleyin.

- Hattınızı YAML veya Classic editor ile yapılandırabilirsiniz. Adım tanımlarını kodla ifade eden YAML’ı seçelim.
- Hattı kaydedin ve her şeyin düzgün çalışıp çalışmadığını görmek için çalıştırın.
YAML mı, Classic Editor mü?
Azure Pipelines hatlarınızı tanımlamak için iki yöntem sunar:
- YAML hatları: Hattınızı kodla tanımlamanın bir yolu.
.yamlveya.ymldosyasında kaynak deponuzda tutulur; sürümleme ve daha iyi işbirliği sağlar. - Classic Editor: Klasik Editor, kullanıcı dostu görsel bir sürükle-bırak arayüzüdür ve daha karmaşık senaryolarda daha az esnektir.
|
Kriter |
YAML Hatları |
Classic Editor |
|
Sürüm kontrolü |
YAML Hatları sürüm kontrolünü destekler ve kaynak kod deposunda saklanır. |
Classic Editor sürüm kontrolünü desteklemez. GUI tabanlıdır. |
|
Esneklik |
YAML Hatları üst düzey esneklik sunar. |
Classic Editor sınırlı esneklik sunar. |
|
En uygun kullanım |
YAML Hatları, uzun vadeli, karmaşık iş akışları ve otomasyon için en iyisidir. |
Classic Editor, hızlı kurulumlar için daha uygundur. |
Deneyimlerime göre, YAML hatları Infrastructure as Code (IaC) uygulamalarını izleyen ekipler için daha fazla esneklik sağlar. Ancak Classic Editor, işleri daha görsel şekilde yapmak isteyen yeni başlayanlar için idealdir.
Bununla birlikte, uzun vadeli ölçeklenebilirlik için Classic Editor yerine YAML hatları önerilir.
Azure Pipelines ile Derleme
Şimdi Azure Pipelines ile nasıl derleme yapabileceğimize bakalım.
Bu bölümde Azure Pipelines’ın bağımlılıkları yükleme, derleme ve testleri çalıştırma gibi kodunuzu derlemek için attığı adımları belirleyeceğiz. Bu adımları, kaynak kod depomuzda YAML kullanarak bir yapılandırma dosyasında ifade edeceğiz; YAML, tarifteki adımları basit ve insan tarafından okunabilir şekilde tanımlamanın bir yoludur.
YAML hat sözdizimi
İşte basit bir YAML hat örneği:
# This section defines the trigger(s) for the pipeline.
# 'main' specifies that the pipeline will run whenever changes are pushed to the 'main' branch.
trigger:
- main # automatically triggers this pipeline when changes are made to the 'main' branch.
# This defines the pool where the pipeline will run.
# 'ubuntu-latest' specifies the virtual machine image for executing tasks.
pool:
vmImage: 'ubuntu-latest' # This uses the latest Ubuntu image provided by Azure DevOps.
# Steps contain the individual tasks or actions that the pipeline will execute.
steps:
- script: echo Hello, world! # A script task to run shell commands. This one prints "Hello, world!".
displayName: 'Run my first pipeline script' # A friendly name for this step, making it easier to identify in the pipeline logs.
Kodu adım adım inceleyelim:
trigger: Hattı tetikleyen dalı belirtir (ör.main).pool: Derleme aracısını tanımlar (ör.ubuntu-latest).steps: Bağımlılıkları yüklemek ve derleme betiğini çalıştırmak gibi yürütülecek görevleri listeler.
Derleme adımlarını yapılandırma
YAML hattınıza derleme adımları eklemek için ‘steps’ bölümü altında ‘script’ tanımlamanız gerekir.
Basit bir Node.js uygulaması için örneğin, aşağıdaki azure-pipelines.yml dosyamızda Azure DevOps’un otomatik oluşturduğu kod bulunur.
# Node.js
# Build a general Node.js project with npm.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '20.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run build
displayName: 'npm install and build'
Yukarıdaki YAML hattındaki steps bölümüne bakalım:
- Node.js’i yükleyin: Node.js sürümünü belirtmek için
NodeTool@0görevi kullanın. - Bağımlılıkları yükleyin: Proje bağımlılıklarını yüklemek için
npm installçalıştırın. - Kodu derleyin (projeyi build edin): Kodu derlemek için
npm run buildçalıştırın.
Hattı çalıştırma
Hattımızı manuel olarak tetikleyebilir veya dal itmeleri gibi olaylar gerçekleştiğinde otomatik çalışacak şekilde ayarlayabiliriz.
- Manuel tetikleme: Hattı manuel tetiklemek için Azure DevOps arayüzünde Run Pipeline’a tıklayın.

- Otomatik tetikleme: Depo olaylarına dayalı tetikleyiciler kurun;
maindalına yapılan itmeler hattı otomatik tetiklesin. Örnek:
trigger:
- main
Hattınızı çalıştırdıktan sonra günlükleri görüntüleyebilir ve sorun giderebilirsiniz.
Günlüklere erişmek için hat çalıştırma özetine gidip belirli işi veya görevi seçin. Bu, o adıma ait günlükleri gösterecektir; aşağıdaki görselde olduğu gibi ham günlükleri görüntülemek için herhangi bir işi (Build, Push veya Update) seçebilirsiniz.


Yaygın sorunları gidermek için zaman aşımı, kaynak kısıtları veya yanlış yapılandırmalar gibi tipik problemleri kontrol edebilirsiniz.
Hattınıza Testler Ekleme
Kod kalitesini sağlamak ve sorunları geliştirme sürecinin başında yakalamak için hattınıza testler eklersiniz. Azure Pipelines’ta birim, entegrasyon veya diğer testleri hat yapılandırmanıza adımlar ekleyerek entegre edebilirsiniz.
Test adımlarını yapılandırma
Hattınıza test adımları dahil ederek kod kalitesini güvence altına alın. Jest, Mocha veya NUnit gibi popüler çerçeveleri kullanabilirsiniz. Örneğin, Jest ile birim testleri şöyle eklenir:
- script: |
npm test
displayName: 'Run unit tests with Jest'
Test sonuçlarını görüntüleme
Azure Pipelines’ta yerleşik test raporlama bulunur. Takibi kolaylaştırmak için test sonucu yayımlamayı ayarlayabilir ve test sonuçlarını hat günlüklerinde görüntüleyebilirsiniz. İşte nasıl:
- Önce Builds > Test Results bölümüne gidin.
- Test sonuçlarını yayımlamak için
PublishTestResults@2görevini kullanın. Bu, genel takibi kolaylaştırır. Örneğin:
- task: PublishTestResults@2
inputs:
testResultsFiles: '**/test-results.xml'
testRunTitle: 'Unit Tests'
Azure Pipelines ile Dağıtım
Azure hattı YAML dosyanızdaki dağıtım adımlarında, uygulamanızı test, hazırlık (staging) ve üretim gibi çeşitli ortamlara otomatik olarak dağıtabilirsiniz. Bu bölümde Azure Pipelines ile dağıtım yapmanın birkaç yolunu gözden geçireceğiz.
Azure Web Apps’e dağıtım
Azure Web Apps, Azure Portal’da ölçekli şekilde web uygulamaları geliştirmenizi, dağıtmanızı ve yönetmenizi sağlayan bir hizmettir.
Azure Web Apps’e dağıtım için iki hizmeti birbirine bağlamanız gerekir. İşte nasıl:
- Projenizin sol altından Project Settings bölümüne gidin ve Pipelines altındaki Service Connections ögesine tıklayın.


- New Service Connection’a tıklayın ve Azure Resource Manager’ı seçin.


- Azure hesabınızla kimlik doğrulayın.
- Azure App Service’e dağıtın:
- Pipelines bölümüne geri dönün ve hattınızı yapılandırın.
- Hattınıza Azure’a dağıtım yapacak bir görev ekleyin.
- Kaynak grubu ve hizmet ayrıntılarını belirtin.
İşte basit bir Node.js uygulamasını Azure App Service’e dağıtmak için bir YAML dağıtım hattı örneği:
# Define the task for deploying to an Azure Web App
- task: AzureWebApp@1
inputs:
# This specifies your Azure subscription service connection
azureSubscription: 'your-azure-subscription'
# This specifies the name of your web app
appName: 'your-app-name'
# This specifies the location of the app package or files to be deployed
package: '$(Build.ArtifactStagingDirectory)'
Yukarıdaki kodu kendi kullanım senaryonuza uyarlayabilmeniz için parçalayalım:
your-azure-subscriptionifadesini, Azure aboneliğinize erişim veren servis bağlantısının adıyla değiştirin.your-app-nameifadesini Azure’daki web uygulamanızın gerçek adıyla değiştirin.$(Build.ArtifactStagingDirectory)ifadesini dağıtım için web uygulaması paketini veya dosyalarını koyacağınız dizinle değiştirin.$(Build.ArtifactStagingDirectory)— Bu değişken, derlemeden sonra uygulama dosyalarınızın (build artifaktlarınızın) bulunduğu klasörü işaret eder.
Sürekli dağıtımı (CD) kurma
Kodumuzdaki her şey tüm testlerden ve kontrollerden geçtiğinde sıradaki adım sürekli dağıtımı kurmaktır. Aşağıda açıklanan adımları izleyin.

Azure yayın hattı dağıtım modeli (Kaynak: Microsoft)
- Bir yayın hattı oluşturun:
- Pipelines > Releases bölümüne gidin ve New Pipeline’a tıklayın.


- Azure App Service Deployment şablonunu seçin.

- Ortamları yapılandırın:
- Uygulamanızın dağıtılmasını istediğiniz Dev, Staging, QA ve Production ortamlarını ekleyin ve yapılandırın.

- Yayın hattının kaynağı olarak derleme hattınızdan gelen artifaktı bağlamak için Add an artifact seçeneğini belirleyin.

- Onayları ve geçitleri (gates) yapılandırın:
- Üretim gibi hassas ortamlar için dağıtım öncesi onayların ayarlanması gereklidir. Örneğin, yayın için bir ekip liderinin onayı gerekebilir. Dağıtımın kalite standartlarını karşıladığından emin olmak için otomatik testler veya izleme kontrolleri gibi geçitler de ekleyebilirsiniz.
Deneyimlerime göre, bu aşama zorlu geliştirme ortamlarında istikrarı korumak için gereklidir. Onaylar ve geçitler, kontrol sağlar ve üretime yalnızca yüksek kaliteli kodun ulaşmasını güvence altına alır.
Kubernetes’e dağıtım
Kubernetes, konteynerleştirilmiş uygulamaları güvenilir ve ölçeklenebilir şekilde çalıştırmayı kolaylaştırır. Azure Kubernetes Service (AKS) kullandığınızda, dağıtımı ve işletimi basitleştiren yönetilen bir ortam elde edersiniz. Bu bölümde, Azure Pipelines kullanarak uygulamanızı AKS’ye nasıl dağıtacağınızı göstereceğim.
AKS kümenizi hazırlayın
AKS kümesini Azure portalı veya CLI ile oluşturabilirsiniz. İşte küme sağlamak için temel bir Bash CLI komutu:
az aks create \
--resource-group <ResourceGroupName> \
--name <AKSClusterName> \
--node-count 3 \
--enable-addons monitoring \
--generate-ssh-keys
Yukarıdaki komutu açıklayalım:
--resource-group: AKS kümesinin oluşturulacağı Azure kaynak grubunu belirtir.--name: AKS kümenizin adını ifade eder.--node-count: Kümedeki düğüm sayısını ayarlar (örnekte 3).--enable-addons monitoring: Azure Monitor for Containers ile izleme ve analitiği etkinleştirir.--generate-ssh-keys: Sağlanmamışsa düğümlere güvenli erişim için SSH anahtarlarını otomatik oluşturur.
<ResourceGroupName> ve <AKSClusterName> ifadelerini, gerçek kaynak grubu ve küme adlarınızla değiştirmeyi unutmayın.
AKS kümeniz kurulduktan sonra kubectl yapılandırılmalıdır. Bu, hat aracısının veya yerel bilgisayarınızın küme ile kubectl üzerinden iletişim kurabilmesini sağlar.
Komut satırı araçlarıyla Azure görevlerinizi hızlandırabilirsiniz—şu Azure CLI cheat sheet hızlı bir başvuru kaynağıdır.
Bir dağıtım YAML dosyası oluşturun
Kubernetes’e bir Docker imajı dağıtmak için temel bir dağıtım YAML dosyasını örnek alalım:
# This defines the API version and the kind of Kubernetes resource we are creating.
# 'apps/v1' is the API version, and 'Deployment' is the resource type.
apiVersion: apps/v1
kind: Deployment
# Metadata contains information to identify the resource uniquely.
# 'name' specifies the name of the Deployment.
metadata:
name: my-app # Name of the Deployment, used for identification.
# "spec" specifies the intended deployment state.
spec:
# Number of replicas/pods we want for this Deployment.
replicas: 3 # Ensures high availability by running three app replicas.
# Selector is used to define the labels that this Deployment will manage.
selector:
matchLabels:
app: my-app # This ensures that only Pods with the label 'app: my-app' are managed by this Deployment.
# Template specifies the blueprint for the pods created by the Deployment.
template:
metadata:
labels:
app: my-app # Labels for the Pods, matching the selector above.
# A specification for the containers of the Pods.
spec:
containers:
- name: my-app # Name of the container. This is useful for linking to the container in logs, etc.
image: mycontainerregistry.azurecr.io/my-app:latest # Pull the container image you will call from your container registry.
ports:
- containerPort: 80 # The container listens on port 80.
Azure Pipelines kullanarak dağıtım
YAML hattınıza AKS’ye dağıtım yapacak bir görev ekleyin.
# This defines a task for deploying Kubernetes manifests within an Azure DevOps pipeline.
- task: KubernetesManifest@0 # Task type for working with Kubernetes manifest files.
inputs:
# This configures what to do with the Kubernetes manifest files.
action: 'deploy' # 'deploy' action ensures the Kubernetes manifests are applied to the cluster.
# This defines the namespace where the Kubernetes resources will be deployed.
namespace: 'default' # 'default' is the namespace for deploying resources. Change if needed.
# All this does is point to the manifest files that define the desired state of your Kubernetes resources.
manifests: '$(Build.ArtifactStagingDirectory)/manifests/*.yaml'
# The 'manifests' variable points to the location of all the YAML files (e.g., Deployment, Service, etc.) that will be applied during the deployment.
# To access private container registry images, use the image pull secret.
imagePullSecrets: 'my-registry-secret'
# This instructs Kubernetes on which secret to use when pulling images from a private container registry.
# Ensure that 'my-registry-secret' exists in the namespace before the deploy
Dağıtımı tetiklemek için YAML dosyasını commit edin ve push’layın.
AKS, ölçekleme, güncellemeler ve geri almaları yönetmeyi kolaylaştırarak konteyner düzenlemeyi basitleştirir. Deneyimlerime göre, modern bulut yerel uygulamalar için vazgeçilmezdir.
Hatlarınızı Optimize Etme ve İzleme
Kariyerimin başlarında asıl zorluk hat kurmak değildi—hızlı ve güvenilir bir hat oluşturmaktı. İyi optimize edilmiş bir hat sadece derlemeleri hızlandırmakla kalmaz; ekipteki hayal kırıklığını azaltır, dağıtım risklerini düşürür ve teslimatı hızlandırır.
Azure DevOps Hatlarınızı hızlı, düzenli ve güvenilir tutmak için kullanabileceğiniz bazı ipuçlarını ve stratejileri paylaşacağım.
Hat önbellekleme
Bağımlılıkların kurulumu, hatlarda karşılaşılan bir diğer yaygın darboğazdır. npm, .NET veya diğer paket yöneticileriyle çalışıyor olun, aynı bağımlılıkların tekrar tekrar indirilmesi ciddi zaman kaybına yol açabilir. Çalıştırmalar arasında bağımlılıkları ve artifaktları önbelleğe almak, yürütme süresini ciddi ölçüde düşürür.
Azure Pipelines’ta bağımlılıkları nasıl önbelleğe alacağınız şöyle.
Öncelikle paket yöneticilerini belirlemelisiniz, örneğin:
- Node.js (
node_modules) - NuGet paketleri
- Python (
pippaketleri) - Maven/Gradle bağımlılıkları
Azure Pipelines, Cache@2 görevi gibi çalıştırmalar arasında bağımlılıkları önbelleğe almanıza olanak tanıyan mekanizmaları destekler.
Basit bir Node.js önbelleklemesini örnek alalım:
# This task is used to cache files to speed up your pipeline.
- task: Cache@2 # This is the task name for caching files in Azure Pipelines.
inputs:
# Key is used to identify the cache. It combines npm (package manager), operating system (OS), and package-lock.json files.
key: 'npm | "$(Agent.OS)" | package-lock.json'
# RestoreKeys is an optional value used when the specific cache key is not found. It helps to find a fallback cache.
restoreKeys: |
npm | "$(Agent.OS)"
# Path defines the location of files or folders to be cached.
# Here, we are caching the 'node_modules' directory to avoid reinstalling dependencies.
path: '$(Build.SourcesDirectory)/node_modules'
# CacheHitVar is a variable that stores whether the cache was successfully used (restored).
# This can be checked later in the pipeline to decide if tasks need to run.
cacheHitVar: 'NPM_CACHE_RESTORED'
Daha sonra önbelleğe alınmışsa kurulumu koşullu olarak atlayabilirsiniz. Bu, npm kurulumunu tamamlamadan önce akıllı bir kontroldür. Koşula dayalı verimli bir mantıktır.
Aşağıda basit bir örnek:
# This step runs the command to install Node.js dependencies using npm.
- script: npm install # Installs packages listed in the package.json file.
# The condition checks whether the cache was restored successfully.
# This step will run if the cache is not restored ('NPM_CACHE_RESTORED' is not true).
condition: ne(variables.NPM_CACHE_RESTORED, 'true') # Run only if the cache is not restored.
Node.js uygulaması için bu basit önbellekleme örneği, package-lock.json’ı anahtar olarak kullanarak npm önbellek dizinini saklar. Bağımlılıklarınız değişmediğinde bunları geri yükler ve her derlemede dakikalar kazandırır.
Önbelleklemenin özellikle büyük projelerde derleme süresini dramatik biçimde azalttığına defalarca tanık oldum, ancak önbellek anahtarları özenle seçilirse. Geçmişteki projelerimden birinde bu yaklaşım, bir Node.js uygulamasının derleme süresini %55 düşürdü.
Hat sağlığını izleme
Başarılı bir hat yalnızca yeşil tiklerden ibaret değildir; görünürlük ve hızlı geri bildirim de önemlidir. Bir şey bozulduğunda, ekibinizin anında haberdar olmasını istersiniz. İşte sorunların önüne nasıl geçilir.
Azure DevOps panolarını nasıl kurarsınız
Azure DevOps, hat durumu, son çalıştırmalar, hata oranları ve ortalama süreleri göstermek için yerleşik widget’lar sunar.
- Önce projeniz altında Dashboards bölümüne gidin.

- Ardından New Dashboard’a tıklayın veya mevcut birini kullanın.

- Şu widget’ları ekleyebilirsiniz: Build History, Release Pipeline Overview, Test Results Trend ve daha fazlası.

Bunlar, geçme/kalma eğilimlerini izlemek, sorunlu ortamları görmek ve daha fazlası için gereklidir.
Başarısız hatlar için uyarıları yapılandırma
- Projenizin sol altından Project Settings’e gidin.

- Notifications’a tıklayın.

- Ardından New Subscription’a tıklayın.

Bir senaryo düşünelim: Category bölümünde Build’i seçin; Template bölümünde “A build fails” şablonunu seçin ve Next’e tıklayın.
Aşağıdakine benzer bir arayüz görürsünüz:

- Son olarak Finish’e tıklayın.
- Notifications bölümünde, az önce oluşturduğunuz “A build fails” için Build açıklamasını kontrol edebilirsiniz.

Bir keresinde, uyarılar kurulmadığı için kritik bir dağıtım hatasını kaçırmıştım. O zamandan beri, her üretim dağıtımı için ekip uyarılarını mutlaka kurup yapılandırıyorum. Böylece bozuk bir derlemeyi veya yayın döngümde bir gecikmeyi asla kaçırmıyorum.
Hat performansını analiz etme
Biliyoruz ki hattınız çalışsa bile yavaş olabilir ve yavaş hatlar verimliliği öldürür. Darboğazları erken tespit etmek, ileride sorun yaşamayı önler.
Hat metrikleri, derlemelerin ve dağıtımların performansına ışık tutar. İşte onlara nasıl ulaşılır.
Önce Analytics Views’u proje ayarları altında etkinleştirmeniz ve Power BI’a bağlanmanız veya yerleşik grafiklerle keşfetmeniz gerekir.
Hat sağlığını izleme
- Pipelines bölümünde Analytics’e gidin.
- Hat geçiş oranı, test geçiş oranı ve hat süresi gibi metrikleri görüntüleyin.

Analitiklerde hangi kilit metrikleri izleyebileceğimizi ve neden önemli olduklarını biraz daha açalım:
|
Metrik |
Neden Önemli |
|
Derleme Süresi Eğilimleri |
Zaman içindeki yavaşlamaları kolayca tespit etmeyi sağlar. |
|
Dala Göre Hata Oranı |
Dengesiz özellikleri belirlemeye yardımcı olur. |
|
Kuyrukta Bekleme Süresi |
Aracı (agent) yetersizliğini tespit etmeye yardımcı olur. |
Birkaç ay önce bir müşterinin hattı üzerinde çalışırken en çok dikkatimi çeken Kuyrukta Bekleme Süresi oldu. Kendi kendine barındırılan bir aracı havuzunu aşırı yüklediğimizi ve hat süremizin %40’ının müsait bir koşucu beklemekle geçtiğini keşfettim. Analitikler bunu açıkça gösterene kadar kimse fark etmemişti.
Bunu, iki tane daha kendi kendine barındırılan aracı ekleyip yükü iş türüne göre dağıtarak çözdük. Sonuçlar anlıktı; hattın ortalama derleme süresi yaklaşık %35 azaldı.
Günlükleri kullanarak izleme
Metriklerin ötesinde, zaman çizelgesi günlükleri özellikle uzun süren görevlerde çok değerlidir. Yıllar içinde, betiklerin kritik adımlarına özel günlük işaretleri ekleyerek gecikmeleri nokta atışı belirleme alışkanlığı edindim.
Basit bir örnek verelim:
# This step prints a message to the console in the pipeline logs.
# It helps to mark the start of the dependency installation process.
echo "=== START: Dependency Install ===" # Display a message indicating the beginning of dependency installation.Azure Pipelines için En İyi Uygulamalar
Artık Azure Pipelines’ın çekirdek hizmetlerini ve daha fazlasını ele aldığımıza göre, bu en iyi uygulamaları izleyerek onlardan en iyi şekilde nasıl yararlanacağınıza bakalım.
Şimdi performanstan yapıya geçelim; çünkü bakımı zor olan hızlı bir hat da ekiplere zarar verir.
Ekipler için hatları düzenleme
Birden fazla ekip veya ortam hatları paylaştığında işler genelde karışır. Yapıya ihtiyacınız olacak. Geliştirme, hazırlık ve üretim ortamları için tek ve dev bir hat kaosa yol açar.
Hattınızı düzenlemek için onu ortamlara ayırmanız gerekir. Aşağıda basit bir yapıya bakalım.
|
Ortam |
Hat Adı |
Tetikleyici |
|
Geliştirme |
|
Özellik dalları (Her commit’te çalışır) |
|
Hazırlık (Staging) |
|
Çekme istekleri → Staging (Manuel tetik) |
|
Üretim |
|
Manuel veya yayın hatları (Onay gereklidir) |
Bu basit yapıdan anlaşılması gereken kilit noktalar:
- Her dosya paylaşılan şablonlardan yararlanır.
- Her dosya ortama özgü değişkenler kullanır.
- Her dosya, hat izinleri aracılığıyla erişimi kontrol eder.
Deneyimlerime göre, bu ayrım hataların ayıklanmasını kolaylaştırır ve junior geliştiricilerin Üretim ortamını riske atmadan Dev ortamına dağıtım yapmasına olanak tanır.
Şablonlar ve yeniden kullanılabilir kod kullanma
DevOps, yazılım geliştirme sürecinde manuel iş akışını azaltmak ve otomasyonu artırmakla ilgilidir.
YAML kodu, projeler arasında kopyala-yapıştır yapıldığında hataya açıktır. Azure DevOps, YAML hatları aracılığıyla DRY (Don’t Repeat Yourself) kurulum için hat şablonlarına sahiptir. YAML hat şablonlarını birden çok projede yeniden kullanabilir, hatlarınızı tutarlı tasarlayabilir ve hatta hat işleme süresini azaltabilirsiniz.
Basit, yeniden kullanılabilir bir derleme şablonu örneği verelim.
Önce build-template.yml adlı derleme şablonunuzu tanımlayın:
# Here we configure the platform and the build configuration.
parameters:
buildPlatform: 'Any CPU' # This specifies the build platform (e.g., Any CPU, x86, x64).
buildConfiguration: 'Release' # This specifies the build configuration (Release) to avoid warning.
# A pipeline is composed of steps (a series of tasks that will be executed)
steps:
- task: DotNetCoreCLI@2 # Task for running .NET Core commands in the pipeline.
inputs:
command: 'build' # This runs the 'build' command to compile the project(s).
projects: '**/*.csproj' # This specifies to build all .csproj files in the repository.
arguments: '--configuration ${{ parameters.buildConfiguration }}'
# This passes the build configuration parameter (e.g., Release or Debug) to the command.
Derleme şablonunuzu ana hattınızda kullanın:
# A pipeline job is a group of tasks. Here, the job is named 'Build'.
jobs:
- job: Build # The job name where the build process occurs.
# Steps define the tasks or actions the pipeline will perform.
steps:
- template: templates/build-template.yml # Reference an external YAML template for reusable steps.
Gizlileri ve değişkenleri yönetme
Projelerde, özellikle işbirlikçi ortamlarda çalışırken, veritabanı bağlantı dizeleri, API anahtarları, parolalar veya belirteçler gibi hassas bilgileri kullanmak yaygındır. Bu gizliler kod tabanınıza gömülür veya günlüklerde açığa çıkarsa kolayca tehlikeye girebilir.
Gizlilerimizi ve değişkenlerimizi Azure Pipelines gizlileri ve değişken gruplarıyla güvenli şekilde yönetmenin yollarına bakalım.
Adım 1: Bir değişken grubu oluşturma
- Sol kenar çubuğundaki Pipelines sekmesine tıklayın.
- Pipelines bölümünde Library’e tıklayın.

- Bir değişken grubu oluşturun:
- Variable groups sekmesine tıklayın.

- Add variable group düğmesine tıklayın.
- Değişken grubunuz için bir ad girin (ör.
MyAppSecrets).

Adım 2: Değişken grubuna gizliler ekleme
- Değişkenler ekleyin:
- Değişken grubunda yeni bir değişken oluşturmak için Add’e tıklayın.

- Değişkenin adını girin (ör.
DB_CONNECTION_STRING). - “ Keep this value secret ” kutusunu işaretleyerek gizli olarak işlenmesini sağlayın.
- Değişkenin değerini girin (ör. veritabanı bağlantı dizem).

- Değişkeni kaydetmek için Save’e tıklayın.

Adım 3: Gizlileri hattınızda kullanma
Artık gizliler içeren bir değişken grubu oluşturduğunuza göre, bu değişkenleri YAML hat dosyanızda kullanabilirsiniz.
- Değişken grubuna referans verin: Değişken grubunu YAML hat dosyanıza ekleyin:
variables:
- group: MyAppSecrets
- Gizlileri adımlarınızda kullanın: Hattınızdaki adımlarda
$(VariableName)sözdizimini kullanarak gizlilere referans verebilirsiniz. İşteDB_CONNECTION_STRING’in bir betik adımında nasıl kullanılacağına bir örnek:
# This defines the trigger for the pipeline.
# The pipeline runs automatically whenever changes are pushed to the 'main' branch.
trigger:
- main # Trigger the pipeline on changes to the 'main' branch.
# The pool specifies the environment where the pipeline will run.
# 'ubuntu-latest' means the pipeline will use the latest Ubuntu operating system image.
pool:
vmImage: 'ubuntu-latest' # Use the latest Ubuntu image provided by Azure Pipelines.
# Variables section defines reusable values for the pipeline.
# 'group: MyAppSecrets' links to a variable group that stores sensitive information like secrets.
variables:
- group: MyAppSecrets # Load secrets, such as database credentials, from a variable group.
# Steps define the tasks that the pipeline will execute one by one.
steps:
- script: |
echo "Connecting to the database..." # Print a message indicating the start of database connection.
echo "Connection String: $(DB_CONNECTION_STRING)" # Display the database connection string from the variable group.
displayName: 'Connect to Database' # A simple name for this step that appears in the pipeline logs.
Adım 4: Hattı çalıştırma
- YAML dosyanızı kaydettikten sonra Pipelines bölümüne gidip Run Pipeline’a tıklayın.
- Hattınız çalıştıktan sonra günlüklerinizi kontrol edebilirsiniz. Gizli değerin gizli tutulduğunu, hassas bilgilerinizin güvende kaldığını göreceksiniz.
Sonuç
Bu eğitimde, Azure Pipelines kullanmanın tam yolculuğunu—ilk hattınızı kurmaktan derleme, test, dağıtım, izleme ve optimizasyona kadar—ele aldık.
Dağıtım aşaması pratik ister. Basit başlayın, sürekli iyileştirin ve zamanla CI/CD iş akışlarını yönetmede özgüven ve akıcılık kazanacaksınız. Azure Pipelines araçları sunar; siz yineleme ve öğrenmeyi getirirsiniz.
Tutarlı çabayla geliştirme sürecinizi yalınlaştırabilir ve büyük ölçekte yüksek kaliteli yazılım teslim etmede güven kazanabilirsiniz.
Azure DevOps ve Microsoft Azure’a daha derin dalmak için aşağıdaki kaynaklara göz atın:
- Azure DevOps Eğitimi - Bu eğitim, Azure DevOps’u adım adım anlatarak CI/CD’yi her zamankinden kolay hale getirir.
- Understanding Microsoft Azure – Microsoft Azure’da sağlam bir temel oluşturun ve bulut bilişimin gücünü açığa çıkarın.
- Microsoft Azure Fundamentals (AZ-900) – Tüm temel Azure konularını kapsayan, sınava hazırlık için başlangıç seviyesinde bir yol.
- Understanding Microsoft Azure Architecture and Services – Azure’un mimarisi ve hizmetlerinin birlikte çalışarak bulut çözümlerini nasıl güçlendirdiğini öğrenin.
SSS
Azure Pipelines’ı Azure dışı projeler için kullanabilir miyim?
Evet. Azure Pipelines, şirket içi (on-premise) ve AWS, GCP gibi çeşitli bulut ortamlarına dağıtımları destekler.
Azure Pipelines hangi programlama dillerini destekler?
Azure Pipelines, Node.js, Python, Java, .NET ve daha birçok programlama dilini destekler.
Azure Pipelines ile GitHub Actions arasındaki fark nedir?
Azure Pipelines, Azure ekosistemiyle daha derin entegrasyon ve güçlü dağıtım araçları sunarken GitHub Actions, daha basit ve GitHub’a özgü bir CI/CD deneyimi sağlar. Her ikisi de YAML iş akışlarını ve konteynerli dağıtımları destekler.
Azure Pipelines’ı Python veya Java gibi Microsoft dışı teknolojilerle kullanabilir miyim?
Evet, Azure Pipelines Python, Java, Node.js ve daha fazlası dahil tüm ana platform ve dilleri destekler. YAML kullanarak herhangi bir teknoloji yığını için derleme ve dağıtım yapılandırabilirsiniz.
Azure Pipelines’ı ücretsiz kullanabilir miyim?
Azure Pipelines, genel projeler için ayda 1.800 dakika ve özel projeler için sınırlı ücretsiz derleme süresi sunan bir ücretsiz katmana sahiptir. Ek kullanım için ücretli plan veya kendi barındırdığınız aracıları gerekir.
Azure DevOps Service Connections nedir ve neden önemlidir?
Service Connections, Azure Pipelines’ı Azure Web Apps veya Kubernetes kümeleri gibi harici hizmetlere güvenle bağlar. Otomatik dağıtımlar ve altyapı yönetimi için kritik önemdedirler.
Azure Pipelines, Jenkins veya CircleCI ile nasıl karşılaştırılır?
Azure Pipelines, Azure kullanıcıları için daha entegre bir deneyim ve Microsoft hizmetleri için daha iyi destek sağlar. Jenkins daha özelleştirilebilir ancak daha fazla kurulum gerektirir; CircleCI ise hız ve paralellikte öne çıkar.
Emmanuel Akor, etkili projeleri hayata geçirmek için bulut teknolojilerini ve DevOps araçlarını ustalıkla kullanan bir Bulut ve DevOps Mühendisidir. Babcock University Bilgisayar Bilimleri bölümünden birincilikle mezun olmuş ve GDSC için eski Bulut Eş Lideri olarak, akademik başarıyı pratik deneyimle birleştirir. Teknik İçerik Yazarı olarak, bilgiyi paylaşma ve ekiplerle iş birliği yapma konusunda uzmandır.

