Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
W tym artykule wyjaśniono, jak można przejść poza kompilowanie i testowanie kodu oraz używać skryptów programu PowerShell do dodawania logiki biznesowej do potoków. Zadanie PowerShell usługi Azure Pipelines uruchamia skrypty PowerShell w potokach. Program PowerShell umożliwia uzyskiwanie dostępu do interfejsu API REST usługi Azure DevOps, pracę z elementami roboczymi usługi Azure DevOps i zarządzaniem testami lub wywoływanie innych usług zgodnie z potrzebami.
Zmienne można używać w skryptach programu PowerShell, w tym zmiennych zdefiniowanych przez użytkownika. Można również użyć predefiniowanych zmiennych, które są dostępne we wszystkich usługach Azure Pipelines, i ustawić zmienne wyjściowe dla wielu zadań, aby udostępnić zmienne przyszłym zadaniom. Aby uzyskać więcej informacji, zobacz Definiowanie zmiennych.
Nazwane parametry można używać w skryptach programu PowerShell. Inne rodzaje parametrów, takie jak parametry przełącznika, nie są obsługiwane i powodują błędy, jeśli spróbujesz ich użyć. Aby uzyskać więcej informacji, zobacz Jak zadeklarować parametry polecenia cmdlet.
Dodaj skrypt programu PowerShell do potoku
Kompilacja używa aktywnej gałęzi kodu. Jeśli uruchomienie potoku używa gałęzi main
, twój skrypt również używa gałęzi main
.
Program Windows PowerShell można uruchomić na agencie kompilacji systemu Windows lub uruchomić program PowerShell Core na dowolnej platformie. Składnia dołączania programu PowerShell Core jest nieco inna niż w przypadku programu Windows PowerShell.
Po przesłaniu skryptu PowerShell do repozytorium, dodaj krok pwsh
lub powershell
do potoku. Słowo kluczowe pwsh
i słowa kluczowe powershell
są skrótami do uruchomienia zadania PowerShell.
Przykład dla programu PowerShell Core:
steps:
- pwsh: ./my-script.ps1
Przykład dla programu Windows PowerShell:
steps:
- powershell: .\my-script.ps1
Przykładowy skrypt do nadawania wersji zestawom
Przykładowy skrypt w tej sekcji przypisuje wersję do plików właściwości zestawu. Aby skrypt został uruchomiony pomyślnie, zdefiniowany format numeru kompilacji musi zawierać cztery kropki, na przykład $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
.
Uwaga
Numer kompilacji jest również nazywany numerem uruchomienia.
Dostosuj numer kompilacji w potoku YAML, używając właściwości name
. Właściwość name
musi znajdować się na poziomie głównym potoku. Aby uzyskać więcej informacji, zobacz Konfigurowanie numerów uruchamiania lub kompilacji.
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
Poniższy przykładowy skrypt PowerShell przypisuje wersję do modułów. Jeśli na przykład zdefiniowany format $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
numeru kompilacji generuje numer Build HelloWorld_2024.07.19.1
kompilacji, skrypt stosuje wersję 2024.07.19.1
do modułów.
# 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."
}
Przykładowy skrypt umożliwiający uzyskanie dostępu do interfejsu API REST
W tym przykładzie użyto zmiennej SYSTEM_ACCESSTOKEN
w celu uzyskania dostępu do interfejsu API REST usługi Azure Pipelines.
Aby uzyskać dostęp do tokenu OAuth, możesz użyć $env:SYSTEM_ACCESSTOKEN
w skrypcie wbudowanym w potoku YAML.
Poniższy wbudowany skrypt programu PowerShell w potoku YAML używa tokenu OAuth do uzyskiwania dostępu do interfejsu API REST usługi Azure Pipelines, który pobiera definicję potoku.
- 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)