Membangun Alur CI dengan Azure Pipelines
Tentukan alur YAML yang terpicu oleh permintaan pull, menjalankan tes unit, dan menghasilkan artefak build, lalu tinjau hasil tes serta cakupan kode di portal.
Membangun Alur CI dengan Azure Pipelines adalah pelajaran Azure Fundamentals gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Azure Fundamentals, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Azure Fundamentals mencakup 4 pelajaran total.
Apa Itu Integrasi Berkelanjutan?
Integrasi Berkelanjutan (CI) adalah praktik menggabungkan perubahan kode ke cabang bersama secara berkala, dengan setiap penggabungan secara otomatis memicu proses build dan pengujian. Tujuannya adalah mendeteksi kegagalan integrasi sejak dini—sebelum kegagalan tersebut berkembang menjadi masalah besar yang sulit diperbaiki. Pipeline CI yang baik melakukan build kode, menjalankan pengujian unit, mengukur cakupan kode, melakukan analisis statis, dan menghasilkan artefak yang siap di-deploy dalam beberapa menit. Azure Pipelines menyediakan mesin otomatisasi untuk praktik ini.
Struktur Pipeline YAML
Pipeline CI Azure Pipelines ditentukan dalam file azure-pipelines.yml di root repositori Anda. File YAML tersebut menentukan pemicu (kapan harus dijalankan), kumpulan agen (jenis agen yang digunakan), serta hierarki tahap, pekerjaan, dan langkah. Secara default, tahap dijalankan secara berurutan. Pekerjaan dalam satu tahap secara default dijalankan secara paralel. Langkah dalam satu pekerjaan dijalankan secara berurutan. Struktur ini memberi Anda kendali terperinci atas alur eksekusi pipeline.
# azure-pipelines.yml skeleton
trigger:
branches:
include:
- main
- 'feature/*'
paths:
exclude:
- docs/**
- '*.md'
pool:
vmImage: ubuntu-latest
variables:
buildConfiguration: Release
nodeVersion: '18.x'
stages:
- stage: CI
displayName: 'Build and Test'
jobs:
- job: Build
displayName: 'Build Application'
steps: []Konfigurasi Pemicu
Azure Pipelines mendukung beberapa jenis pemicu. Pemicu cabang menjalankan pipeline ketika kode dikirim ke cabang yang ditentukan. Pemicu pull request (pemicu PR) dijalankan ketika PR dibuka atau diperbarui terhadap cabang target—hal ini penting untuk memvalidasi kode sebelum penggabungan. Pemicu terjadwal dijalankan pada waktu tertentu (misalnya, build setiap malam). Pemicu pipeline menghubungkan beberapa pipeline secara berantai. Tentukan trigger: none untuk menonaktifkan proses otomatis dan hanya mengizinkan eksekusi manual.
# Branch trigger
trigger:
branches:
include: [main, develop]
# Pull request trigger
pr:
branches:
include: [main]
autoCancel: true # Cancel previous runs when PR is updated
# Scheduled trigger (nightly build at 02:00 UTC)
schedules:
- cron: '0 2 * * *'
displayName: 'Nightly Build'
branches:
include: [main]
always: true # Run even if no new commitsLangkah: Skrip dan Tugas
Langkah pipeline berupa skrip (perintah bash atau PowerShell) atau tugas (unit berparameter yang telah dibuat sebelumnya dari marketplace Azure DevOps). Tugas seperti NodeTool@0, DotNetCoreCLI@2, dan Maven@3 merangkum operasi build umum. Gunakan displayName pada setiap langkah agar log pipeline mudah dibaca. Setiap langkah dijalankan secara berurutan dan pipeline gagal jika ada langkah yang keluar dengan kode selain nol, kecuali Anda menetapkan continueOnError: true.
steps:
- task: NodeTool@0
displayName: 'Install Node.js 18'
inputs:
versionSpec: '18.x'
- script: npm ci
displayName: 'Install dependencies (clean install)'
- script: npm run lint
displayName: 'Run ESLint'
- script: npm run build
displayName: 'Build production bundle'
- script: npm test -- --ci --coverage
displayName: 'Run unit tests with coverage'Menerbitkan Hasil Pengujian
Setelah menjalankan pengujian, terbitkan hasilnya ke Azure DevOps menggunakan tugas PublishTestResults. Azure Pipelines mengurai file hasil berformat JUnit, NUnit, XUnit, atau VSTest dan menampilkan jumlah pengujian yang lulus atau gagal, durasi proses pengujian, serta detail setiap pengujian di antarmuka pengguna eksekusi pipeline. Riwayat pengujian dilacak dari waktu ke waktu sehingga Anda dapat menemukan pengujian yang tidak stabil dan regresi. Hal ini penting untuk memantau kualitas kode di seluruh tim.
# Example: Node.js project with Jest tests
steps:
- script: npm test -- --ci --reporters=jest-junit
displayName: 'Run tests with JUnit reporter'
env:
JEST_JUNIT_OUTPUT_DIR: '$(Agent.TempDirectory)/test-results'
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: JUnit
testResultsFiles: '$(Agent.TempDirectory)/test-results/**/*.xml'
condition: succeededOrFailed() # Publish even if tests failMenerbitkan Cakupan Kode
Terbitkan laporan cakupan kode agar Azure Pipelines menampilkan persentase dan tren cakupan di antarmuka pipeline. Tugas PublishCodeCoverageResults menerima laporan berformat Cobertura atau JaCoCo. Padukan hal ini dengan gerbang cakupan cabang—konfigurasikan ambang minimum cakupan dan gagalkan build jika cakupan turun di bawahnya. Tren cakupan membantu mengidentifikasi penambahan kode baru tanpa pengujian yang sesuai.
# Jest + coverage
- script: npm test -- --ci --coverage --coverageReporters=cobertura
displayName: 'Run tests with coverage'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/coverage'Variabel Pipeline dan Grup Variabel
Simpan konfigurasi pipeline dalam variabel yang ditentukan pada tingkat pipeline, tahap, atau pekerjaan di YAML. Untuk nilai sensitif (kunci API, kata sandi), gunakan variabel rahasia—tetapkan variabel tersebut di pustaka pipeline (UI) atau grup variabel, lalu rujuk dalam YAML. Grup variabel adalah kumpulan variabel yang dapat digunakan kembali dan dibagikan ke beberapa pipeline. Tautkan grup variabel ke Azure Key Vault untuk menyinkronkan rahasia dari Key Vault ke dalam variabel pipeline secara otomatis.
# Reference a variable group in a pipeline
variables:
- group: 'Production-Secrets' # Linked to Azure Key Vault
- name: buildConfiguration
value: Release
# Use a variable
steps:
- script: echo 'Building $(buildConfiguration) configuration'
- script: az webapp deploy --src-path drop.zip
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID) # From Key Vault
APP_API_KEY: $(APP_API_KEY) # Secret, not printed in logsArtefak: Mengemas Hasil Build
Setelah build berhasil, kemas hasilnya menjadi artefak pipeline agar tahap berikutnya (seperti deployment) dapat mengaksesnya. Gunakan PublishPipelineArtifact untuk mengunggah file dari agen build ke penyimpanan artefak Azure DevOps. Pada tahap atau pekerjaan berikutnya, gunakan DownloadPipelineArtifact untuk mengambil artefak tersebut. Dengan demikian, pekerjaan build tidak bergantung langsung pada pekerjaan deployment, yang dapat dijalankan pada agen atau tahap berbeda.
# Publish build artifact
- task: PublishPipelineArtifact@1
displayName: 'Publish build artifact'
inputs:
targetPath: '$(System.DefaultWorkingDirectory)/dist'
artifactName: webapp-drop
publishLocation: pipeline
# In a later deployment job, download the artifact
- task: DownloadPipelineArtifact@2
inputs:
artifactName: webapp-drop
targetPath: '$(Pipeline.Workspace)/drop'
- script: ls -la $(Pipeline.Workspace)/dropPekerjaan Paralel untuk Build yang Lebih Cepat
Jalankan tugas yang tidak saling bergantung secara paralel dengan menentukan beberapa pekerjaan dalam satu tahap. Misalnya, jalankan pengujian unit dan pemindaian keamanan secara bersamaan, bukan berurutan. Pekerjaan paralel memerlukan menit build terpisah, tetapi dapat mengurangi durasi total pipeline secara signifikan. Gunakan properti dependsOn agar suatu pekerjaan menunggu satu atau beberapa pekerjaan lain selesai sebelum dimulai, sehingga membentuk grafik dependensi dalam satu tahap.
stages:
- stage: CI
jobs:
- job: UnitTests
displayName: 'Run unit tests'
steps:
- script: npm test
- job: LintAndSecurity
displayName: 'Lint and security scan'
steps:
- script: npm run lint
- script: npm audit --audit-level=high
- job: BuildArtifact
displayName: 'Build and publish artifact'
dependsOn: [UnitTests, LintAndSecurity]
condition: succeeded('UnitTests') and succeeded('LintAndSecurity')
steps:
- script: npm run buildValidasi Build dengan Kebijakan Cabang
Tautkan pipeline CI Anda ke kebijakan cabang di Azure Repos agar pipeline berjalan otomatis sebagai pemeriksaan validasi build pada pull request yang menargetkan main. Penggabungan diblokir hingga pipeline berhasil. Gabungkan beberapa pemeriksaan: pipeline CI harus berhasil, setidaknya 2 peninjau harus menyetujui, semua komentar harus diselesaikan, dan item pekerjaan tertaut harus ada. Hal ini menciptakan gerbang kualitas yang mencegah penggabungan kode rusak ke cabang utama.
# Add build validation via CLI
az repos policy build create \
--blocking true \
--branch main \
--branch-match-type exact \
--build-definition-id <pipeline-id> \
--display-name 'CI Build Validation' \
--enabled true \
--project MyProject \
--repository-id <repo-id> \
--queue-on-source-update-only true \
--manual-queue-only false \
--valid-duration 720 # Pipeline result expires after 12 hoursMembaca Hasil Eksekusi Pipeline
Setelah eksekusi pipeline selesai, tinjau hasilnya di portal Azure DevOps. Tab Summary menampilkan status lulus/gagal dan waktu keseluruhan. Tab Tests mencantumkan semua hasil pengujian dengan penyaringan berdasarkan hasil. Tab Code Coverage menampilkan persentase cakupan dan menyoroti baris yang belum tercakup. Klik pekerjaan apa pun untuk melihat keluaran log langkah demi langkah. Pipeline yang gagal menampilkan langkah yang gagal dengan sorotan merah beserta keluaran kesalahan lengkap untuk memudahkan diagnosis.
# View pipeline run results via CLI
az pipelines runs list \
--pipeline-ids <pipeline-id> \
--project MyProject \
--query '[].{id:id, status:status, result:result, startTime:startTime}' \
-o table
# View logs from a specific run
az pipelines runs logs list \
--run-id <run-id> \
--project MyProjectPemeriksaan Cepat
Uji pemahaman Anda tentang konsep Microsoft Azure Fundamentals (AZ-900) dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa Azure Pipelines YAML mendefinisikan pipeline CI dengan tahap, pekerjaan, dan langkah untuk build, pengujian, serta pembuatan artefak; pemicu PR dan kebijakan cabang menerapkan gerbang kualitas yang memblokir penggabungan kode rusak; dan tugas PublishTestResults dan PublishCodeCoverageResults membuat kualitas pengujian terlihat di seluruh tim. Selanjutnya, kita akan mempelajari deployment berkelanjutan ke Azure.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membangun Alur CI dengan Azure Pipelines” gratis?
Ya — teks lengkap “Membangun Alur CI dengan Azure Pipelines” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Azure Fundamentals, upgrade ke CoddyKit PRO. Kursus Azure Fundamentals mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membangun Alur CI dengan Azure Pipelines”?
Tentukan alur YAML yang terpicu oleh permintaan pull, menjalankan tes unit, dan menghasilkan artefak build, lalu tinjau hasil tes serta cakupan kode di portal. Kamu berlatih Azure Fundamentals dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Azure Fundamentals?
Tidak diperlukan pengalaman sebelumnya. Azure Fundamentals di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Membangun Alur CI dengan Azure Pipelines” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Azure Fundamentals ini?
Ya. Setiap pelajaran Azure Fundamentals menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Ikhtisar Azure DevOps Services
- Membangun Alur CI dengan Azure Pipelines
- Penerapan Berkelanjutan ke Azure
- GitHub Actions di Azure