Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
In dit artikel wordt uitgelegd hoe PowerShell-scripts bedrijfslogica kunnen toevoegen aan Azure Pipelines. Met de PowerShell v2-taak (PowerShell@2) worden PowerShell-scripts uitgevoerd die toegang hebben tot de Azure DevOps REST API, werken met Azure DevOps-werkitems, tests beheren of andere services aanroepen.
U kunt vooraf gedefinieerde variabelen of door de gebruiker gedefinieerde variabelen gebruiken in PowerShell-scripts . U kunt ook uitvoervariabelen met meerdere taken instellen om variabelen beschikbaar te maken voor andere taken. Zie Variabelen definiëren voor meer informatie.
U kunt ook benoemde parameters gebruiken in uw PowerShell-scripts. Andere soorten parameters, zoals switchparameters, worden niet ondersteund. Zie Cmdlet-parameters declareren voor meer informatie.
PowerShell-scripttaak
Als u een PowerShell-script wilt gebruiken, voegt u de PowerShell v2-taak (PowerShell@2) toe aan uw pijplijn en voert u een inline PowerShell-script in of roept u een PowerShell-scriptbestand aan.
De build maakt gebruik van de actieve vertakking van uw code. Als uw pijplijnuitvoering gebruikmaakt van de main vertakking van uw code, gebruikt uw script ook de main vertakking.
In het volgende voorbeeld wordt targetType: 'inline' gebruikt en een inlinescript toegevoegd in de eigenschap script.
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: Write-Host "Hello world!"
In het volgende voorbeeld wordt de PowerShell@2 stap toegevoegd aan een YAML-pijplijn. De code roept een PowerShell-scriptbestand aan met de naam test.ps1 zich in de hoofdmap van uw opslagplaats bevindt.
steps:
- task: PowerShell@2
inputs:
targetType: 'filePath'
filePath: 'test.ps1'
Notitie
De taak maakt standaard PowerShell@2 gebruik van Windows PowerShell 5.1 voor Windows-agents en PowerShell 7.x voor Linux-/macOS-agents. Als u PowerShell 7.x op Windows-agents wilt gebruiken, moet PowerShell 7.x zijn geïnstalleerd en moet u de pwsh parameter instellen op true.
Door Microsoft gehoste agents zijn standaard PowerShell 7.x geïnstalleerd.
U kunt ook een pwsh of powershell stap toevoegen aan uw YAML-pijplijn als een snelkoppeling voor de PowerShell@2 stap. Met de pwsh snelkoppeling wordt PowerShell 7.x uitgevoerd op macOS, Linux of Windows. Met de powershell snelkoppeling wordt Windows PowerShell 5.1 uitgevoerd op Windows of PowerShell 7.x in Linux en macOS.
steps:
- pwsh: test.ps1
steps:
- pwsh: Write-Host Hello
Voorbeeldscript voor het toepassen van versie op assembly's
Met het volgende PowerShell-script wordt een versie toegepast op basis van het buildnummer op assembly's. Als de definitie $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r) van de buildnummerindeling bijvoorbeeld het buildnummer Build HelloWorld_2024.07.19.1 produceert, past het script versie 2024.07.19.1 toe op uw assembly's.
Uw buildnummernotatie moet vier segmenten bevatten om dit script te kunnen uitvoeren. Zie Run- of buildnummers voor meer informatie.
Notitie
Buildnummer wordt ook wel runnummer genoemd.
Pas de definitie van het buildnummer in de YAML-pijplijn aan met behulp van de
nameeigenschap op het hoofdniveau van de pijplijn.name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)Sla het volgende PowerShell-script op als een bestand in de hoofdmap van uw opslagplaats.
Voeg een
PowerShell@2taakstap ofpwshpowershellsnelkoppeling toe aan uw pijplijn en roep het bestandspad van het PowerShell-scriptbestand aan ten opzichte van de werkmap.
PowerShell-script om een versie toe te passen op assemblies:
# 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."
}
Voorbeeldscript voor toegang tot de REST API
Het volgende PowerShell-script maakt gebruik van omgevingsvariabelen voor toegang tot de REST API van Azure Pipelines en het ophalen van de pijplijndefinitie.
In uw YAML-pijplijn kunt u de omgevingsvariabele $env:SYSTEM_ACCESSTOKEN in een PowerShell@2 taak definiëren en deze gebruiken in het inlinescript om het OAuth-token op te halen voor toegang tot de 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)