Mengintegrasi templat ARM dengan Azure Pipelines

Anda dapat mengintegrasikan templat Azure Resource Manager (templat ARM) dengan Azure Pipelines untuk integrasi berkelanjutan dan penyebaran berkelanjutan (CI/CD). Dalam artikel ini, Anda mempelajari dua cara tingkat lanjut untuk menyebarkan templat dengan Azure Pipelines.

Pilih opsi Anda

Sebelum melanjutkan artikel ini, mari kita pertimbangkan berbagai opsi untuk menyebarkan templat ARM dari sebuah alur.

  • Gunakan tugas penyebaran templat ARM. Opsi ini adalah opsi termudah. Pendekatan ini berfungsi ketika Anda ingin menggunakan templat langsung dari repositori. Opsi ini tidak tercakup dalam artikel ini tetapi sebaliknya tercakup dalam tutorial Integrasi berkelanjutan templat ARM dengan Azure Pipelines. Ini menunjukkan cara menggunakan tugas penyebaran templat ARM untuk menyebarkan templat dari repositori GitHub Anda.

  • Tambahkan tugas yang menjalankan skrip Azure PowerShell. Opsi ini memiliki keuntungan yaitu memberikan konsistensi sepanjang siklus hidup pengembangan karena Anda dapat menggunakan skrip yang sama dengan yang Anda gunakan saat menjalankan pengujian lokal. Skrip Anda menyebarkan templat tetapi juga dapat melakukan operasi lain seperti mendapatkan nilai untuk digunakan sebagai parameter. Opsi ini diperlihatkan dalam artikel ini. Lihat Tugas Azure PowerShell.

    Visual Studio menyediakan proyek Azure Resource Group yang menyertakan skrip PowerShell. Skrip ini menggelar artefak dari proyek Anda ke akun penyimpanan yang dapat diakses dari Resource Manager. Artefak adalah item dalam proyek Anda seperti templat yang ditautkan, skrip, dan biner aplikasi. Jika Anda ingin terus menggunakan skrip dari proyek, gunakan tugas skrip PowerShell yang diperlihatkan dalam artikel ini.

  • Tambahkan tugas untuk menyalin dan menyebarkan tugas. Opsi ini menawarkan alternatif yang nyaman untuk skrip proyek. Anda mengonfigurasi dua tugas dalam alur. Satu tugas menggelar artefak ke lokasi yang dapat diakses. Tugas lain menyebarkan templat dari lokasi tersebut. Opsi ini diperlihatkan dalam artikel ini. Lihat Menyalin dan menyebarkan tugas.

Siapkan proyek Anda

Artikel ini mengasumsikan templat ARM Anda dan organisasi Azure DevOps siap untuk membuat alur. Langkah-langkah berikut ini memperlihatkan cara memastikan kesiapan Anda:

  • Anda memiliki organisasi Azure DevOps. Jika Anda tidak memilikinya, buat secara gratis. Jika tim Anda sudah memiliki organisasi Azure DevOps, pastikan Anda adalah admin proyek Azure DevOps yang ingin Anda gunakan.

  • Anda telah mengonfigurasi koneksi layanan ke langganan Azure Anda. Tugas-tugas dalam alur dijalankan di bawah identitas perwakilan layanan. Untuk langkah-langkah dalam membuat koneksi, lihat Membuat proyek Azure DevOps.

  • Anda memiliki templat ARM yang menentukan infrastruktur untuk proyek Anda.

Buat alur

  1. Jika sebelumnya Anda belum menambahkan alur, Anda perlu membuat alur baru. Dari organisasi Azure DevOps Anda, pilih Alur dan Alur baru.

    Cuplikan layar tombol Tambahkan alur baru

  2. Tentukan di mana kode Anda disimpan. Gambar berikut menunjukkan pemilihan Azure Repos Git.

    Cuplikan layar memilih sumber kode di Azure DevOps

  3. Dari sumber itu, pilih repositori yang memiliki kode untuk proyek Anda.

    Cuplikan layar memilih repositori untuk proyek di Azure DevOps

  4. Pilih jenis alur yang akan dibuat. Anda dapat memilih Alur pemula.

    Cuplikan layar memilih jenis alur yang akan dibuat di Azure DevOps

Anda siap menambahkan tugas Azure PowerShell atau salinan file dan sebarkan tugas.

Tugas Azure PowerShell

Bagian ini memperlihatkan cara mengonfigurasi penyebaran berkelanjutan dengan menggunakan satu tugas yang menjalankan skrip PowerShell di proyek Anda. Jika Anda memerlukan skrip PowerShell yang menyebarkan templat, lihat Deploy-AzTemplate.ps1 atau Deploy-AzureResourceGroup.ps1.

File YAML berikut membuat tugas Azure PowerShell:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'script-connection'
    ScriptType: 'FilePath'
    ScriptPath: './Deploy-AzTemplate.ps1'
    ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
    azurePowerShellVersion: 'LatestVersion'

Ketika Anda mengatur tugas ke AzurePowerShell@5, alur menggunakan modul Az. Jika Anda menggunakan modul AzureRM di skrip Anda, atur tugas ke AzurePowerShell@3.

steps:
- task: AzurePowerShell@3

Untuk azureSubscription, berikan nama koneksi layanan yang Anda buat.

inputs:
    azureSubscription: '<your-connection-name>'

Untuk scriptPath, berikan jalur relatif dari file alur ke skrip Anda. Anda dapat melihat di repositori Anda untuk melihat jalur.

ScriptPath: '<your-relative-path>/<script-file-name>.ps1'

Dalam ScriptArguments, berikan parameter apa pun yang diperlukan skrip Anda. Contoh berikut menunjukkan beberapa parameter untuk sebuah skrip, tetapi Anda harus menyesuaikan parameter untuk skrip Anda.

ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json

Saat Anda memilih Simpan, alur build akan dijalankan secara otomatis. Kembali ke ringkasan untuk alur build Anda, dan lihat statusnya.

Cuplikan layar tampilan hasil alur di Azure DevOps

Anda bisa memilih alur yang sedang berjalan untuk melihat detail tentang tugas. Setelah selesai, Anda akan melihat tataan hasil untuk setiap langkah.

Menyalin dan menyebarkan tugas

Bagian ini menunjukkan cara mengonfigurasi penyebaran berkelanjutan dengan menggunakan dua tugas. Tugas pertama menempatkan artefak ke akun penyimpanan dan tugas kedua menyebarkan template.

Untuk menyalin file ke akun penyimpanan, perwakilan layanan untuk koneksi layanan harus diberi peran Kontributor Penyimpanan Blob Data atau Pemilik Penyimpanan Blob Data. Untuk informasi selengkapnya, lihat Mulai menggunakan AzCopy.

YAML berikut ini memperlihatkan tugas salinan file Azure.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy

Ada beberapa bagian dari tugas ini untuk merevisi lingkungan Anda. SourcePath menunjukkan lokasi artefak yang relatif terhadap file alur.

SourcePath: '<path-to-artifacts>'

Untuk azureSubscription, berikan nama koneksi layanan yang Anda buat.

azureSubscription: '<your-connection-name>'

Untuk penyimpanan dan nama kontainer, berikan nama akun penyimpanan dan kontainer yang ingin Anda gunakan untuk menyimpan artefak. Akun penyimpanan harus ada.

storage: '<your-storage-account-name>'
ContainerName: '<container-name>'

Setelah membuat tugas salin file, Anda siap menambahkan tugas untuk menyebarkan templat yang ditetapkan.

YAML berikut ini memperlihatkan tugas penyebaran templat Azure Resource Manager:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Ada beberapa bagian dari tugas ini untuk ditinjau lebih rinci.

  • deploymentScope: Memilih lingkup penyebaran dari opsi: Management Group, Subscription, dan Resource Group. Untuk mempelajari selengkapnya tentang cakupan, lihat Cakupan penyebaran.

  • azureResourceManagerConnection: Memberikan nama koneksi layanan yang telah Anda buat.

  • subscriptionId: Memberikan ID langganan target. Properti ini hanya berlaku untuk cakupan penyebaran Grup Sumber Daya dan cakupan penyebaran langganan.

  • resourceGroupName dan location: Memberikan nama dan lokasi grup sumber daya yang ingin Anda sebarkan. Tugas ini membuat grup sumber daya jika sebelumnya belum ada.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Memberikan tautan untuk templat yang diatur. Saat mengatur nilai, gunakan variabel yang ditampilkan dari tugas salin file. Contoh berikut ini menautkan ke templat yang bernama mainTemplate.json. Folder bernama templat disertakan karena itu adalah tempat tugas menyalin file menyalin filenya. Di alur Anda, sediakan jalur ke templat Anda dan nama templat Anda.

    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    

Alur Anda terlihat seperti:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Saat Anda memilih Simpan, alur build akan dijalankan secara otomatis. Di bawah bingkai Pekerjaan, pilih Pekerjaan untuk melihat status pekerjaan.

Langkah berikutnya