Kursus
Jika pipeline CI/CD Anda sering rusak atau terasa lambat dan kikuk, Anda tidak sendirian. Saya pernah berurusan dengan build gagal, lingkungan yang tidak selaras, dan rekan tim yang tanpa sengaja menimpa pekerjaan saya. Azure Pipelines menghilangkan frustrasi ini dengan layanan cloud-hosted yang dapat membangun, menguji, dan menerapkan hampir proyek apa pun di platform apa pun.
Itu sebabnya dalam tutorial ini, saya akan menunjukkan cara untuk:
- Membuat Azure Pipeline pertama Anda
- Membangun proyek Anda di cloud
- Menambahkan pengujian otomatis untuk menangkap kesalahan sejak dini
- Menerapkan ke staging atau produksi dengan sekali push
- Memantau dan mengoptimalkan pipeline untuk kecepatan dan keandalan
- Mengikuti praktik terbaik yang terbukti di proyek dunia nyata
Mari kita mulai!
Apa itu Azure Pipelines?
Azure Pipelines adalah solusi berbasis cloud yang menyederhanakan pengembangan, pengujian, dan penerapan aplikasi.
Ini merupakan komponen dari toolkit Azure DevOps, yang mendukung seluruh siklus hidup pengembangan perangkat lunak. Ini juga merupakan opsi yang fleksibel untuk tim dari berbagai ukuran karena mendukung berbagai platform dan bahasa pemrograman. GitHub, Azure Repos, dan sistem kontrol versi terkenal lainnya terintegrasi dengannya.
Fitur inti Azure Pipelines mencakup:
|
Layanan |
Tujuan |
|
Dukungan multi-platform |
Azure Pipelines mengotomatiskan proses build dan deployment aplikasi untuk berbagai sistem operasi, seperti Linux, macOS, dan Windows. |
|
Integrasi dengan kontrol versi |
Azure Pipelines terhubung ke repositori kode Anda seperti Azure Repos, GitHub, dan sistem kontrol versi terkenal lainnya. |
|
Konfigurasi pipeline berbasis YAML |
Azure Pipelines memungkinkan kita mendefinisikan proses build dan deployment sebagai kode, sehingga dapat dikendalikan versinya. |
|
Continuous Integration dan Continuous Deployment (CI/CD) |
Azure Pipelines memfasilitasi proses end-to-end untuk mengintegrasikan perubahan kode dan menerapkan aplikasi. |
Berdasarkan pengalaman saya, Azure Pipelines bermanfaat bagi siapa pun yang ingin memiliki CI/CD yang tepat di dalam tim mereka. Solusi ini fleksibel, dapat diskalakan, dan terintegrasi dengan baik dengan layanan Azure lainnya.

Arsitektur Azure Pipelines (Sumber: Microsoft).
Jika Anda mencari pemahaman yang lebih luas tentang Azure DevOps di luar pipelines, tutorial Azure DevOps ini memabarkan seluruh siklus hidup CI/CD dari awal hingga akhir.
Menyiapkan Azure Pipeline Pertama Anda
Untuk bekerja dengan lingkungan Azure Pipelines, kita harus menyiapkan semuanya terlebih dahulu untuk mendukung proses build, uji, dan deployment end-to-end.
Prasyarat
Sebelum mulai membuat pipeline pertama Anda, pastikan Anda memiliki hal-hal berikut:
- Akun Azure DevOps dan penyiapan organisasi: Daftar untuk akun Azure DevOps jika Anda belum memilikinya. Buat organisasi untuk mengelola proyek Anda.
- Repositori: Anda memerlukan repositori kode dengan proyek contoh. Ini dapat di-host di Azure Repos atau GitHub. Untuk tutorial ini, kita akan menggunakan proyek Node.js sederhana.
- Akses portal Azure: Anda juga memerlukan akses ke Azure portal saat Anda ingin menerapkan ke layanan Azure seperti Azure Kubernetes Service (AKS) dan banyak lagi.
Jika Anda perlu menyegarkan pemahaman tentang ekosistem Azure yang lebih luas, saya sarankan memeriksa kursus Understanding Microsoft Azure.
Membuat proyek dan repositori baru
Sekarang akun dan organisasi Azure DevOps Anda sudah siap, mari buat proyek dan repositori pertama kita.
- Buat proyek baru:
- Masuk ke akun Azure DevOps Anda.
- Klik New Project, beri nama (misalnya, "AzureDevOps-DataCamp-Tutorial"), dan pilih visibilitas (publik atau privat).
- Klik Create Project.

- Menyiapkan repositori:
- Jika menggunakan Azure Repos, buka bagian Repos dan inisialisasi repositori baru.
- Atau, Anda dapat menautkan repositori GitHub yang sudah ada dengan memilih Import Repository.
- Beri nama repositori Anda, pilih Repository type (Git atau TFVC), tempel URL repositori yang diklon, lalu klik Import.

- Jika Anda menggunakan GitHub, Anda dapat menautkan akun GitHub Anda ke Azure DevOps dengan pergi ke kiri bawah antarmuka proyek dan memilih Project Settings > GitHub Connections > Connect your GitHub account.



Untuk tutorial ini, kita akan menggunakan Azure Repos sebagai repositori kode. Jika Anda baru memulai atau tidak memiliki alasan khusus untuk memilih TFVC, saya sarankan memilih Git.
Membuat pipeline pertama Anda
Sekarang saatnya membuat pipeline pertama kita. Ikuti langkah-langkah di bawah ini:
- Di bagian Pipelines, klik Create Pipeline.


- Pilih Azure Repos Git sebagai sumber dan pilih repositori Anda.

- Anda dapat mengonfigurasi pipeline menggunakan editor YAML atau Classic. Mari pilih YAML, cara berbasis kode untuk mendefinisikan pipeline.
- Simpan pipeline dan jalankan untuk melihat apakah semuanya berfungsi dengan benar.
Memilih YAML vs Classic Editor
Azure Pipelines menyediakan dua cara untuk mendefinisikan pipeline Anda:
- YAML pipelines: Cara berbasis kode untuk menggambarkan pipeline Anda. Pipeline didefinisikan dalam file
.yamlatau.ymldi repositori sumber Anda, memungkinkan versioning dan kolaborasi yang lebih baik. - Classic Editor: Classic Editor adalah antarmuka visual drag-and-drop yang ramah pengguna, namun kurang fleksibel untuk skenario kompleks.
|
Aspek |
YAML Pipelines |
Classic Editor |
|
Kontrol versi |
YAML Pipelines mendukung kontrol versi dan disimpan di repositori kode sumber. |
Classic Editor tidak mendukung kontrol versi. Ini berbasis Graphical User Interface (GUI). |
|
Fleksibilitas |
YAML Pipelines memiliki fleksibilitas tingkat tinggi. |
Classic Editor memiliki fleksibilitas terbatas. |
|
Terbaik untuk |
YAML Pipelines paling cocok untuk workflow jangka panjang, kompleks, dan otomasi. |
Classic Editor paling cocok untuk penyiapan cepat. |
Menurut pengalaman saya, pipeline YAML memberikan fleksibilitas lebih dan lebih baik untuk tim yang mengikuti praktik Infrastructure as Code (IaC). Namun Classic Editor cocok untuk pemula yang menyukai cara visual.
Namun, untuk skalabilitas jangka panjang, pipeline YAML lebih direkomendasikan daripada Classic Editor.
Membangun dengan Azure Pipelines
Sekarang, mari lihat bagaimana kita dapat melakukan build dengan Azure Pipelines.
Di bagian ini, kita akan menentukan langkah-langkah yang diambil Azure Pipelines untuk membangun kode Anda, seperti memasang dependensi, mengompilasi, dan menjalankan uji. Kita akan mengekspresikan langkah-langkah ini dalam file konfigurasi di repo kode sumber kita menggunakan YAML, cara sederhana dan mudah dibaca untuk menggambarkan langkah-langkah seperti sebuah resep.
Sintaks pipeline YAML
Berikut contoh sederhana pipeline YAML:
# 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.
Mari kita uraikan kodenya langkah demi langkah:
trigger: Menentukan branch yang memicu pipeline (misalnya,main).pool: Mendefinisikan build agent (misalnya,ubuntu-latest).steps: Mencantumkan tugas yang dijalankan, seperti memasang dependensi dan menjalankan skrip build.
Mengonfigurasi langkah build
Untuk menambahkan langkah build ke pipeline YAML Anda, Anda harus mendefinisikan 'script' di bawah bagian 'steps'.
Untuk aplikasi Node.js sederhana, misalnya, file azure-pipelines.yml di bawah ini berisi kode yang secara otomatis dibuat oleh Azure DevOps.
# 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'
Mari kita lihat steps build pada pipeline YAML di atas:
- Memasang Node.js: Gunakan tugas
NodeTool@0untuk menentukan versi Node.js. - Memasang dependensi: Jalankan
npm installuntuk memasang dependensi proyek. - Mengompilasi kode (membangun proyek): Jalankan
npm run builduntuk mengompilasi kode.
Menjalankan pipeline
Pipeline kita dapat dipicu secara manual atau diatur untuk berjalan otomatis saat terjadi peristiwa seperti push ke branch.
- Pemicu manual: Klik Run Pipeline di antarmuka Azure DevOps untuk memicu pipeline secara manual.

- Pemicu otomatis: Atur trigger berbasis peristiwa repositori agar push perubahan ke branch
mainmemicu pipeline secara otomatis. Berikut contohnya:
trigger:
- main
Setelah menjalankan pipeline, Anda dapat melihat log dan memecahkan masalah apa pun.
Untuk mengakses log, buka ringkasan run pipeline Anda dan pilih job atau task tertentu. Ini akan menampilkan log untuk langkah tersebut; seperti pada gambar di bawah, Anda dapat memilih job apa saja (Build, Push, atau Update) untuk melihat log mentah.


Untuk menelusuri masalah umum, Anda dapat memeriksa pipeline terhadap masalah seperti timeout, keterbatasan sumber daya, atau salah konfigurasi.
Menambahkan Uji ke Pipeline Anda
Anda menambahkan pengujian ke pipeline untuk memastikan kualitas kode dan menangkap masalah sejak awal pengembangan. Di Azure Pipelines, Anda dapat mengintegrasikan unit, integrasi, atau uji lainnya dengan menambahkan langkah dalam konfigurasi pipeline Anda.
Mengonfigurasi langkah uji
Sertakan langkah pengujian dalam pipeline untuk menjamin kualitas kode. Anda dapat menggunakan framework populer seperti Jest, Mocha, atau NUnit. Misalnya, berikut cara menambahkan unit test dengan Jest:
- script: |
npm test
displayName: 'Run unit tests with Jest'
Melihat hasil uji
Azure Pipelines memiliki pelaporan uji bawaan. Anda dapat menyiapkan publikasi hasil uji untuk pelacakan yang lebih mudah dan melihat hasil uji di log pipeline. Berikut caranya:
- Pertama, buka Builds > Test Results.
- Untuk memublikasikan hasil uji, gunakan tugas
PublishTestResults@2untuk menampilkan hasil. Ini memudahkan pelacakan secara keseluruhan. Contoh:
- task: PublishTestResults@2
inputs:
testResultsFiles: '**/test-results.xml'
testRunTitle: 'Unit Tests'
Menerapkan dengan Azure Pipelines
Dalam langkah deployment di file YAML pipeline Azure Anda, Anda dapat secara otomatis menerapkan aplikasi ke beberapa lingkungan, seperti testing, staging, dan produksi. Di bagian ini, kita akan meninjau beberapa cara untuk melakukan deployment dengan Azure Pipelines.
Menerapkan ke Azure Web Apps
Azure Web Apps adalah layanan di Azure Portal yang memungkinkan Anda mengembangkan, menerapkan, dan mengelola aplikasi web dalam skala besar.
Untuk menerapkan ke Azure Web Apps, Anda harus menautkan kedua layanan tersebut. Begini caranya:
- Di kiri bawah proyek Anda, buka Project Settings dan klik Service Connections di bawah bagian Pipelines .


- Klik New Service Connection dan pilih Azure Resource Manager.


- Lakukan autentikasi dengan akun Azure Anda.
- Deploy ke Azure App Service:
- Kembali ke Pipelines dan konfigurasikan pipeline Anda.
- Di pipeline Anda, tambahkan task untuk deploy ke Azure.
- Tentukan resource group dan detail layanan.
Berikut contoh pipeline YAML untuk deployment aplikasi Node.js sederhana ke Azure App Service:
# 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)'
Mari kita uraikan kode di atas, agar Anda dapat mengadaptasikannya untuk kebutuhan Anda:
- Ganti
your-azure-subscriptiondengan nama service connection yang memberi akses ke langganan Azure Anda. - Ganti
your-app-namedengan nama aplikasi web Anda yang sebenarnya di Azure. - Ganti
$(Build.ArtifactStagingDirectory)dengan direktori tempat paket atau file aplikasi web untuk deployment.$(Build.ArtifactStagingDirectory)— Variabel ini menunjuk ke folder tempat artifact build (file aplikasi Anda) berada setelah dibangun.
Menyiapkan continuous deployment (CD)
Setelah semuanya di kode kita lolos semua uji dan pemeriksaan, langkah berikutnya adalah menyiapkan continuous deployment. Ikuti langkah-langkah di bawah ini.

Model deployment release pipeline Azure (Sumber: Microsoft)
- Buat release pipeline:
- Buka Pipelines > Releases dan klik New Pipeline.


- Pilih template Azure App Service Deployment.

- Konfigurasikan environment:
- Tambahkan dan konfigurasi Dev, Staging, QA, dan Production sebagai environment tempat aplikasi Anda akan diterapkan.

- Tautkan artefak dari build pipeline Anda sebagai sumber untuk release pipeline dengan memilih Add an artifact.

- Konfigurasikan persetujuan dan gerbang (gates):
- Menyiapkan persetujuan pra-deployment untuk environment sensitif, seperti produksi, itu perlu. Misalnya, seorang lead tim mungkin diwajibkan menyetujui rilis. Anda juga dapat menambahkan gates seperti uji otomatis atau pemeriksaan monitoring untuk memastikan deployment memenuhi standar kualitas.
Berdasarkan pengalaman, fase ini diperlukan untuk menjaga stabilitas di lingkungan pengembangan yang menuntut. Persetujuan dan gates memberikan kontrol dan memastikan hanya kode berkualitas yang mencapai produksi.
Menerapkan ke Kubernetes
Kubernetes memudahkan menjalankan aplikasi terkontainer yang andal dan dapat diskalakan. Saat menggunakan Azure Kubernetes Service (AKS), Anda mendapatkan lingkungan terkelola yang menyederhanakan deployment dan operasi. Di bagian ini, saya akan memandu cara menerapkan aplikasi Anda ke AKS menggunakan Azure Pipelines.
Menyiapkan Klaster AKS
Anda dapat membuat klaster AKS menggunakan Azure portal atau CLI. Berikut perintah Bash CLI dasar untuk menyediakan klaster:
az aks create \
--resource-group <ResourceGroupName> \
--name <AKSClusterName> \
--node-count 3 \
--enable-addons monitoring \
--generate-ssh-keys
Mari kita uraikan perintah di atas:
--resource-group: Menunjukkan resource group Azure tempat klaster AKS akan dibuat.--name: Mengacu pada nama klaster AKS Anda.--node-count: Menetapkan jumlah node dalam klaster (misalnya, 3 pada contoh ini).--enable-addons monitoring: Memungkinkan monitoring dan analitik dengan Azure Monitor for Containers.--generate-ssh-keys: Secara otomatis membuat kunci SSH untuk akses node yang aman jika tidak disediakan.
Jangan lupa mengganti <ResourceGroupName> dan <AKSClusterName> dengan nama resource group dan klaster Anda yang sebenarnya.
Kubectl perlu dikonfigurasi setelah klaster AKS Anda disiapkan. Ini memastikan agen pipeline atau komputer lokal Anda dapat menggunakan kubectl untuk berkomunikasi dengan klaster.
Anda dapat mempercepat tugas Azure menggunakan alat baris perintah—Azure CLI cheat sheet ini adalah referensi praktis.
Membuat file YAML deployment
Mari ambil contoh file YAML deployment dasar untuk menerapkan image Docker ke Kubernetes:
# 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.
Menerapkan menggunakan Azure Pipelines
Di pipeline YAML Anda, sertakan task untuk menerapkan ke AKS.
# 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
Commit dan push file YAML untuk memicu deployment.
AKS menyederhanakan orkestrasi kontainer, sehingga lebih mudah mengelola penskalaan, pembaruan, dan rollback. Menurut pengalaman saya, ini wajib dimiliki untuk aplikasi cloud-native modern.
Mengoptimalkan dan Memantau Pipeline Anda
Di awal karier saya, membangun pipeline bukanlah tantangan terbesar—memiliki pipeline yang cepat dan andal lah tantangannya. Pipeline yang dioptimalkan dengan baik bukan hanya membuat build lebih cepat; ini juga mengurangi frustrasi tim, menurunkan risiko deployment, dan mempercepat pengiriman.
Saya akan membagikan beberapa kiat dan strategi yang dapat Anda gunakan untuk menjaga Azure DevOps Pipelines Anda tetap cepat, teratur, dan andal.
Pipeline caching
Instalasi dependensi adalah bottleneck pipeline yang umum. Baik Anda bekerja dengan npm, .NET, atau manajer paket lainnya, mengunduh dependensi yang sama berulang kali dapat membuang banyak waktu. Caching dependensi dan artefak antar-run secara drastis memotong waktu eksekusi.
Berikut cara melakukan cache dependensi di Azure Pipelines.
Pertama, Anda harus mengidentifikasi manajer paket, seperti:
- Node.js (
node_modules) - Paket NuGet
- Python (paket
pip) - Dependensi Maven/Gradle
Azure Pipelines mendukung mekanisme caching, seperti tugas Cache@2, yang memungkinkan Anda melakukan cache dependensi antar-run pipeline.
Mari ambil contoh caching sederhana untuk Node.js:
# 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'
Anda kemudian dapat secara kondisional melewati instalasi jika sudah dicache. Ini adalah pemeriksaan cerdas sebelum menyelesaikan instalasi npm. Ini logika berbasis kondisi yang efisien.
Mari ambil contoh sederhana berikut:
# 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.
Contoh caching sederhana untuk aplikasi Node.js ini menyimpan direktori cache npm menggunakan package-lock.json sebagai kunci. Saat dependensi Anda tidak berubah, cache akan dipulihkan, menghemat menit pada setiap build.
Saya pernah menyaksikan caching memangkas waktu build secara drastis, terutama di proyek besar, tetapi hanya jika kunci cache dipilih dengan cermat. Dalam salah satu proyek saya sebelumnya, ini memangkas waktu build aplikasi Node.js sebesar 55%.
Memantau kesehatan pipeline
Pipeline yang sukses bukan hanya tentang tanda centang hijau, visibilitas, dan umpan balik cepat. Saat sesuatu rusak, Anda ingin tim Anda segera mengetahuinya. Berikut cara tetap selangkah di depan masalah.
Cara menyiapkan dashboard Azure DevOps
Azure DevOps menyediakan widget bawaan untuk menampilkan status pipeline, run terbaru, tingkat kegagalan, dan durasi rata-rata.
- Pertama, arahkan ke Dashboards di dalam proyek Anda.

- Lalu klik New Dashboard atau gunakan yang sudah ada.

- Anda dapat menambahkan widget seperti: Build History, Release Pipeline Overview, Test Results Trend, dan lainnya.

Ini penting untuk melacak tren lolos/gagal, melihat environment mana yang bermasalah, dan lainnya.
Mengonfigurasi peringatan untuk pipeline yang gagal
- Di kiri bawah proyek Anda, buka Project Settings.

- Klik Notifications.

- Lalu klik New Subscription.

Mari ambil skenario: Di bagian Category, pilih Build; di bagian Template, pilih “A build fails”, dan klik Next.
Anda akan melihat antarmuka seperti di bawah ini:

- Terakhir, klik Finish.
- Di bagian Notifications, Anda dapat memeriksa deskripsi Build untuk “A build fails” yang kita buat sebelumnya.

Saya pernah melewatkan kegagalan deployment kritis karena peringatan tidak disetel. Sejak itu, saya selalu menyiapkan dan mengonfigurasi peringatan tim untuk setiap deployment produksi. Dengan begitu, saya tidak pernah melewatkan build yang rusak atau keterlambatan dalam siklus rilis.
Menganalisis kinerja pipeline
Kita tahu bahwa meski pipeline Anda berfungsi, bisa jadi lambat, dan pipeline yang lambat membunuh produktivitas. Jadi mengidentifikasi bottleneck sejak dini menyelamatkan masalah di kemudian hari.
Metrik pipeline memberi wawasan tentang kinerja build dan deployment. Begini cara mengaksesnya.
Pertama, Anda harus mengaktifkan Analytics Views di bawah project settings dan terhubung ke Power BI atau jelajahi melalui grafik bawaan.
Memantau kesehatan pipeline
- Di bawah bagian Pipelines, buka Analytics.
- Lihat metrik seperti tingkat kelulusan pipeline, tingkat kelulusan uji, dan durasi pipeline.

Mari kita jelajahi lebih lanjut metrik kunci yang dapat kita pantau di analytics dan mengapa itu penting:
|
Metrik |
Mengapa Penting |
|
Tren Durasi Build |
Membantu dengan mudah melihat perlambatan dari waktu ke waktu. |
|
Tingkat Kegagalan per Branch |
Membantu mengidentifikasi fitur yang tidak stabil. |
|
Waktu dalam Antrean |
Membantu mendeteksi kekurangan agen. |
Beberapa bulan lalu, saya mengerjakan pipeline klien, dan yang paling menonjol adalah Waktu dalam Antrean. Saya pernah menemukan bahwa tim saya dan saya membebani pool agen self-hosted, dan 40% waktu pipeline dihabiskan untuk menunggu runner yang tersedia. Tidak ada yang menyadarinya sampai analytics membuatnya jelas.
Kami dapat memperbaikinya dengan menambahkan dua agen self-hosted lagi dan mendistribusikan beban berdasarkan jenis job. Hasilnya langsung terlihat; waktu build rata-rata untuk pipeline turun sekitar 35%.
Memantau menggunakan log
Jadi, di luar metrik, timeline log sangat berharga, terutama untuk tugas yang berjalan lama. Selama bertahun-tahun, saya terbiasa menambahkan penanda log kustom di dalam langkah penting skrip untuk menentukan penundaan secara tepat.
Mari ambil contoh sederhana berikut:
# 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.Praktik Terbaik untuk Azure Pipelines
Sekarang kita telah membahas layanan inti Azure Pipelines dan banyak lagi, mari lihat cara memaksimalkannya dengan mengikuti praktik terbaik berikut.
Mari beralih dari kinerja ke struktur, karena pipeline yang cepat tetapi sulit dirawat tetap akan merugikan tim mana pun.
Mengorganisasi pipeline untuk tim
Ketika banyak tim atau environment berbagi pipeline, semuanya sering menjadi berantakan. Anda memerlukan struktur. Satu pipeline raksasa untuk environment pengembangan, staging, dan produksi akan menyebabkan kekacauan.
Untuk mengorganisasi pipeline Anda, Anda harus memisahkannya ke dalam environment. Mari lihat struktur sederhana di bawah ini.
|
Environment |
Nama Pipeline |
Pemicu |
|
Development |
|
Feature branches (Berjalan pada setiap commit) |
|
Staging |
|
Pull request → Staging (Pemicu manual) |
|
Production |
|
Manual atau release pipelines (Perlu persetujuan) |
Hal-hal kunci yang perlu dipahami dari struktur sederhana ini:
- Setiap file mengambil dari template bersama.
- Setiap file menggunakan variabel spesifik environment.
- Setiap file mengendalikan akses melalui izin pipeline.
Dari pengalaman, pemisahan ini memudahkan debug dan memungkinkan pengembang junior melakukan deployment ke environment Dev tanpa berisiko pada environment Production.
Menggunakan template dan kode yang dapat digunakan ulang
DevOps bertujuan memangkas workflow manual dan meningkatkan otomasi di seluruh proses pengembangan perangkat lunak.
Kode YAML rentan terhadap kesalahan saat disalin-tempel di antara proyek. Azure DevOps memiliki template pipeline untuk pengaturan DRY (Don’t Repeat Yourself) melalui pipeline YAML. Anda dapat menggunakan ulang template pipeline YAML di banyak proyek, merancang pipeline secara konsisten, dan bahkan mengurangi waktu pemrosesan pipeline .
Mari ambil contoh template build yang dapat digunakan ulang.
Pertama, definisikan template build Anda, build-template.yml:
# 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.
Gunakan template build Anda di pipeline utama:
# 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.
Mengelola rahasia dan variabel
Saat mengerjakan proyek, terutama di lingkungan kolaboratif, umum menggunakan informasi sensitif seperti string koneksi basis data, kunci API, kata sandi, atau token. Jika rahasia ini di-hardcode di basis kode Anda atau terekspos di log, rahasia tersebut mudah disusupi.
Mari lihat cara mengelola rahasia dan variabel kita secara aman menggunakan secrets dan variable groups di Azure Pipelines.
Langkah 1: Membuat variable group
- Klik tab Pipelines di bilah sisi kiri.
- Di bagian Pipelines, klik Library.

- Buat variable group:
- Klik tab Variable groups.

- Klik tombol Add variable group.
- Masukkan nama variable group Anda (misalnya,
MyAppSecrets).

Langkah 2: Menambahkan rahasia ke variable group
- Tambahkan variabel:
- Di variable group, klik Add untuk membuat variabel baru.

- Masukkan nama variabel (misalnya,
DB_CONNECTION_STRING). - Centang kotak Keep this value secret untuk memastikan nilainya diperlakukan sebagai rahasia.
- Masukkan nilai variabel (misalnya, string koneksi basis data saya).

- Klik Save untuk menyimpan variabel.

Langkah 3: Menggunakan rahasia di pipeline Anda
Sekarang Anda telah membuat variable group dengan rahasia, Anda dapat menggunakan variabel ini di file YAML pipeline Anda.
- Referensikan variable group: Tambahkan variable group ke file YAML pipeline Anda:
variables:
- group: MyAppSecrets
- Gunakan rahasia dalam langkah Anda: Anda dapat mereferensikan rahasia dalam langkah pipeline Anda menggunakan sintaks
$(VariableName). Berikut contoh cara menggunakanDB_CONNECTION_STRINGdalam langkah skrip:
# 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.
Langkah 4: Menjalankan pipeline
- Setelah Anda menyimpan file YAML, buka bagian Pipelines dan klik Run Pipeline.
- Setelah pipeline berjalan, Anda dapat memeriksa log. Anda akan melihat bahwa nilai rahasia disembunyikan, menjaga informasi sensitif Anda tetap aman.
Kesimpulan
Dalam tutorial ini, kita menelusuri perjalanan lengkap menggunakan Azure Pipelines—mulai dari menyiapkan pipeline pertama hingga membangun, menguji, menerapkan, memantau, dan mengoptimalkannya.
Fase deployment membutuhkan latihan. Mulailah sederhana, terus tingkatkan, dan seiring waktu, Anda akan memperoleh kepercayaan diri dan keluwesan dalam mengelola workflow CI/CD. Azure Pipelines menyediakan alatnya, Anda membawa iterasi dan pembelajaran.
Dengan upaya yang konsisten, Anda dapat merampingkan proses pengembangan dan menjadi percaya diri dalam merilis perangkat lunak berkualitas tinggi dalam skala besar.
Untuk menggali lebih dalam Azure DevOps dan Microsoft Azure, silahkan lihat sumber daya berikut:
- Tutorial Azure DevOps - Tutorial ini memandu Anda melalui Azure DevOps, membuat CI/CD jadi lebih mudah dari sebelumnya.
- Understanding Microsoft Azure – Bangun fondasi yang kuat di Microsoft Azure dan buka kekuatan komputasi awan.
- Microsoft Azure Fundamentals (AZ-900) – Siap ujian dengan track ramah pemula yang mencakup semua dasar-dasar Azure.
- Understanding Microsoft Azure Architecture and Services – Pelajari bagaimana arsitektur dan layanan Azure bekerja bersama untuk menjalankan solusi cloud.
FAQs
Bisakah saya menggunakan Azure Pipelines untuk proyek non-Azure?
Ya, bisa. Azure Pipelines mendukung deployment ke on-premise dan berbagai lingkungan cloud seperti AWS, GCP, dan banyak lagi.
Bahasa pemrograman apa yang didukung Azure Pipelines?
Azure Pipelines mendukung banyak bahasa pemrograman, termasuk Node.js, Python, Java, .NET, dan banyak lagi.
Apa perbedaan antara Azure Pipelines dan GitHub Actions?
Azure Pipelines menawarkan integrasi yang lebih mendalam dengan ekosistem Azure dan alat deployment yang kuat, sedangkan GitHub Actions menyediakan pengalaman CI/CD yang lebih sederhana dan native GitHub. Keduanya mendukung workflow YAML dan deployment terkontainer.
Bisakah saya menggunakan Azure Pipelines dengan teknologi non-Microsoft seperti Python atau Java?
Ya, Azure Pipelines mendukung semua platform dan bahasa utama, termasuk Python, Java, Node.js, dan lainnya. Anda dapat mengonfigurasi build dan deployment untuk tumpukan teknologi apa pun menggunakan YAML.
Apakah Azure Pipelines gratis digunakan?
Azure Pipelines menawarkan tier gratis dengan 1.800 menit/bulan untuk proyek publik dan waktu build privat terbatas. Penggunaan tambahan memerlukan paket berbayar atau agen self-hosted.
Apa itu Azure DevOps Service Connections, dan mengapa penting?
Service Connections menautkan Azure Pipelines secara aman ke layanan eksternal seperti Azure Web Apps atau klaster Kubernetes. Ini penting untuk deployment otomatis dan manajemen infrastruktur.
Bagaimana perbandingan Azure Pipelines dengan Jenkins atau CircleCI?
Azure Pipelines memberikan pengalaman yang lebih terintegrasi untuk pengguna Azure dan dukungan yang lebih baik untuk layanan Microsoft. Jenkins lebih dapat disesuaikan namun memerlukan lebih banyak penyiapan; CircleCI unggul dalam kecepatan dan paralelisme.
Emmanuel Akor adalah Cloud & DevOps Engineer yang mahir memanfaatkan teknologi cloud dan alat DevOps untuk mendorong proyek-proyek berdampak. Lulusan Cum Laude Ilmu Komputer dari Babcock University dan mantan Cloud Co-Lead untuk GDSC, Emmanuel memadukan keunggulan akademis dengan pengalaman langsung. Sebagai Penulis Konten Teknis, ia unggul dalam berbagi pengetahuan dan berkolaborasi dengan tim.

