Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Artikel ini menjelaskan bagaimana skrip PowerShell dapat menambahkan logika bisnis ke Azure Pipelines. Tugas PowerShell v2 (PowerShell@2) menjalankan skrip PowerShell yang dapat mengakses REST API Azure DevOps, bekerja dengan item kerja Azure DevOps, mengelola pengujian, atau memanggil layanan lain.
Anda dapat menggunakan variabel yang telah ditentukan sebelumnya atau variabel yang ditentukan pengguna dalam skrip PowerShell. Anda juga dapat mengatur variabel output multi-pekerjaan untuk membuat variabel tersedia untuk pekerjaan lain. Untuk informasi selengkapnya, lihat Menentukan variabel.
Anda juga dapat menggunakan parameter bernama di skrip PowerShell Anda. Jenis parameter lain, seperti parameter pengalihan, tidak didukung. Untuk informasi selengkapnya, lihat Cara mendeklarasikan parameter cmdlet.
Tugas skrip PowerShell
Untuk menggunakan skrip PowerShell, Anda menambahkan tugas PowerShell v2 (PowerShell@2) ke alur Anda, lalu memasukkan skrip PowerShell sebaris atau memanggil file skrip PowerShell.
Build menggunakan cabang aktif kode Anda. Jika proses alur Anda menggunakan main cabang kode Anda, skrip Anda juga menggunakan main cabang.
Contoh berikut menggunakan targetType: 'inline' dan menambahkan skrip sebaris di script properti .
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: Write-Host "Hello world!"
Contoh berikut menambahkan langkah PowerShell@2 ke dalam alur YAML. Kode memanggil file skrip PowerShell bernama test.ps1 yang terletak di akar repositori Anda.
steps:
- task: PowerShell@2
inputs:
targetType: 'filePath'
filePath: 'test.ps1'
Catatan
Secara default, PowerShell@2 tugas menggunakan Windows PowerShell 5.1 untuk agen Windows dan PowerShell 7.x untuk agen Linux/macOS. Untuk menggunakan PowerShell 7.x pada agen Windows, Anda harus menginstal PowerShell 7.x dan menambahkan parameter yang pwsh disetel ke true.
Agen yang dihosting Microsoft memiliki PowerShell 7.x yang diinstal secara default.
Anda juga dapat menambahkan langkah pwsh atau powershell ke pipeline YAML Anda sebagai pintasan untuk langkah PowerShell@2. Pintasan pwsh menjalankan PowerShell 7.x di macOS, Linux, atau Windows. Pintasan powershell menjalankan Windows PowerShell 5.1 di Windows atau PowerShell 7.x di Linux dan macOS.
steps:
- pwsh: test.ps1
steps:
- pwsh: Write-Host Hello
Contoh skrip untuk menerapkan versi ke rakitan
Skrip PowerShell berikut menetapkan versi berdasarkan nomor build ke assembly. Misalnya, jika definisi $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r) format nomor build Anda menghasilkan nomor build Build HelloWorld_2024.07.19.1, skrip menerapkan versi 2024.07.19.1 ke rakitan Anda.
Agar skrip ini berhasil dijalankan, format nomor build Anda harus memiliki empat segmen. Untuk informasi selengkapnya, lihat Menjalankan atau membangun nomor.
Catatan
Nomor build juga disebut nomor eksekusi.
Sesuaikan definisi nomor build Anda di alur YAML dengan menggunakan
nameproperti di tingkat akar alur.name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)Simpan skrip PowerShell berikut sebagai file di akar repositori Anda.
Tambahkan langkah tugas
PowerShell@2atau pintasanpwshataupowershellke pipeline Anda, dan panggil jalur file skrip PowerShell, relatif terhadap direktori kerja.
Skrip PowerShell untuk memberikan versi ke komponen:
# Enable -Verbose option
[CmdletBinding()]
# Regular expression pattern to find the version in the build number
$VersionRegex = "\d+\.\d+\.\d+\.\d+"
# If not running on a build server, remind user to set environment variables for debugging
if(-not ($Env:BUILD_SOURCESDIRECTORY -and $Env:BUILD_BUILDNUMBER))
{
Write-Error "You must set the following environment variables"
Write-Error "to test this script interactively."
Write-Host '$Env:BUILD_SOURCESDIRECTORY - For example, enter something like:'
Write-Host '$Env:BUILD_SOURCESDIRECTORY = "C:\code\Fabrikam\HelloWorld"'
Write-Host '$Env:BUILD_BUILDNUMBER - For example, enter something like:'
Write-Host '$Env:BUILD_BUILDNUMBER = "Build HelloWorld_0000.00.00.0"'
exit 1
}
# Make sure path to source code directory is available
if (-not $Env:BUILD_SOURCESDIRECTORY)
{
Write-Error ("BUILD_SOURCESDIRECTORY environment variable is missing.")
exit 1
}
elseif (-not (Test-Path $Env:BUILD_SOURCESDIRECTORY))
{
Write-Error "BUILD_SOURCESDIRECTORY does not exist: $Env:BUILD_SOURCESDIRECTORY"
exit 1
}
Write-Verbose "BUILD_SOURCESDIRECTORY: $Env:BUILD_SOURCESDIRECTORY"
# Make sure there's a build number
if (-not $Env:BUILD_BUILDNUMBER)
{
Write-Error ("BUILD_BUILDNUMBER environment variable is missing.")
exit 1
}
Write-Verbose "BUILD_BUILDNUMBER: $Env:BUILD_BUILDNUMBER"
# Get and validate the version data
$VersionData = [regex]::matches($Env:BUILD_BUILDNUMBER,$VersionRegex)
switch($VersionData.Count)
{
0
{
Write-Error "Couldn't find version number data in BUILD_BUILDNUMBER."
exit 1
}
1 {}
default
{
Write-Warning "Found more than one instance of version data in BUILD_BUILDNUMBER."
Write-Warning "Assuming first instance is version."
}
}
$NewVersion = $VersionData[0]
Write-Verbose "Version: $NewVersion"
# Apply the version to the assembly property files
$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include "*Properties*","My Project" |
?{ $_.PSIsContainer } |
foreach { gci -Path $_.FullName -Recurse -include AssemblyInfo.* }
if($files)
{
Write-Verbose "Applying $NewVersion to $($files.count) files."
foreach ($file in $files) {
$filecontent = Get-Content($file)
attrib $file -r
$filecontent -replace $VersionRegex, $NewVersion | Out-File $file
Write-Verbose "$file.FullName - version applied"
}
}
else
{
Write-Warning "Found no files."
}
Contoh skrip untuk mengakses REST API
Skrip PowerShell berikut menggunakan variabel lingkungan untuk mengakses AZURE Pipelines REST API dan mengambil definisi alur.
Dalam alur YAML, Anda dapat menentukan variabel $env:SYSTEM_ACCESSTOKEN lingkungan dalam PowerShell@2 tugas, dan menggunakannya dalam skrip sebaris untuk mendapatkan token OAuth untuk mengakses REST API.
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)