Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Den här artikeln beskriver hur du kan gå längre än att kompilera och testa kod och använda PowerShell-skript för att lägga till affärslogik i pipelines. Azure Pipelines PowerShell-aktiviteten kör PowerShell-skript i dina pipelines. Du kan använda PowerShell för att komma åt Rest-API:et för Azure DevOps, arbeta med Azure DevOps-arbetsobjekt och testhantering eller anropa andra tjänster efter behov.
Du kan använda variabler i dina PowerShell-skript, inklusive användardefinierade variabler som du anger själv. Du kan också använda fördefinierade variabler som är tillgängliga i alla Azure Pipelines och ange utdatavariabler för flera jobb för att göra variabler tillgängliga för framtida jobb. Mer information finns i Definiera variabler.
Du kan använda namngivna parametrar i dina PowerShell-skript. Andra typer av parametrar, till exempel växelparametrar, stöds inte och orsakar fel om du försöker använda dem. Mer information finns i Deklarera cmdlet-parametrar.
Lägga till ett PowerShell-skript i en pipeline
Bygget använder den aktiva grenen av din kod. Om pipelinekörningen använder grenen main
använder skriptet även grenen main
.
Du kan köra Windows PowerShell på en Windows-byggagent eller köra PowerShell Core på valfri plattform. Syntaxen för att inkludera PowerShell Core skiljer sig något från Windows PowerShell.
När du har skickat PowerShell-skriptet till ditt repo lägger du till ett pwsh
- eller powershell
-steg till din pipeline. Nyckelorden pwsh
och powershell
nyckelorden är båda genvägar för att köra PowerShell-aktiviteten.
Exempel för PowerShell Core:
steps:
- pwsh: ./my-script.ps1
Exempel för Windows PowerShell:
steps:
- powershell: .\my-script.ps1
Exempelskript för att tillämpa version på sammansättningar
Exempelskriptet i det här avsnittet tillämpar en version på sammansättningsegenskapsfiler. För att skriptet ska kunna köras måste det definierade versionsnummerformatet ha fyra punkter, till exempel $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
.
Kommentar
Versionsnummer kallas även för körningsnummer.
Anpassa ditt versionsnummer i YAML-pipelinen genom att använda egenskapen name
. Egenskapen name
måste vara på rotnivån för pipelinen. För mer information, se Konfigurera kör- eller byggnummer.
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
Följande PowerShell-exempelskript tillämpar en version på sammansättningar. Om ditt definierade versionsnummerformat $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
till exempel genererar versionsnummer Build HelloWorld_2024.07.19.1
tillämpar skriptet version 2024.07.19.1
på dina sammansättningar.
# 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."
}
Exempelskript för att komma åt REST-API:et
I det här exemplet används variabeln SYSTEM_ACCESSTOKEN
för att komma åt REST-API:et för Azure Pipelines.
Du kan använda $env:SYSTEM_ACCESSTOKEN
i ett infogat skript i YAML-pipelinen för att komma åt OAuth-token.
Följande infogade PowerShell-skript i en YAML-pipeline använder OAuth-token för att komma åt REST-API:et för Azure Pipelines som hämtar pipelinedefinitionen.
- 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)