Dostosowywanie potoku za pomocą skryptu programu PowerShell
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Gdy wszystko będzie gotowe do przejścia poza podstawy kompilowania i testowania kodu, użyj skryptu programu PowerShell, aby dodać logikę biznesową zespołu do potoku kompilacji. Program Windows PowerShell można uruchomić na agencie kompilacji systemu Windows. Program PowerShell Core działa na dowolnej platformie.
Dodawanie skryptu programu PowerShell
Składnia dołączania programu PowerShell Core jest nieco inna niż składnia środowiska Windows PowerShell.
Wypchnij skrypt programu PowerShell do repozytorium.
pwsh
Dodaj krok lubpowershell
. Słowopwsh
kluczowe to skrót do zadania programu PowerShell dla programu PowerShell Core. Słowopowershell
kluczowe to kolejny skrót do zadania programu PowerShell.
# for PowerShell Core
steps:
- pwsh: ./my-script.ps1
# for Windows PowerShell
steps:
- powershell: .\my-script.ps1
Przykładowy skrypt programu PowerShell: zestawy wersji
Oto przykładowy skrypt do wersji zestawów. Aby skrypt został uruchomiony pomyślnie, należy zaktualizować numer kompilacji, aby użyć formatu z czterema kropkami (na przykład: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
). Numer kompilacji może być również określany jako numer uruchomienia.
Numer kompilacji można dostosować w potoku YAML za name
pomocą właściwości .
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
pool:
vmImage: windows-latest
steps:
- pwsh: echo $(Build.BuildNumber) //output updated build number
# If found use it to version the assemblies.
#
# For example, if the 'Build number format' build pipeline parameter
# $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
# then your build numbers come out like this:
# "Build HelloWorld_2013.07.19.1"
# This script would then apply version 2013.07.19.1 to your assemblies.
# Enable -Verbose option
[CmdletBinding()]
# Regular expression pattern to find the version in the build number
# and then apply it to the assemblies
$VersionRegex = "\d+\.\d+\.\d+\.\d+"
# If this script is not running on a build server, remind user to
# set environment variables so that this script can be debugged
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\FabrikamTFVC\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 is 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 "Could not find version number data in BUILD_BUILDNUMBER."
exit 1
}
1 {}
default
{
Write-Warning "Found more than instance of version data in BUILD_BUILDNUMBER."
Write-Warning "Will assume 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 "Will apply $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 programu PowerShell: dostęp do interfejsu API REST
W tym przykładzie użyjesz zmiennej SYSTEM_ACCESSTOKEN
, aby uzyskać dostęp do interfejsu API REST usługi Azure Pipelines.
Aby uzyskać dostęp do tokenu OAuth, możesz użyć $env:SYSTEM_ACCESSTOKEN
skryptu w potoku YAML.
- 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)
Często zadawane pytania
Jakie zmienne są dostępne dla mnie do użycia w moich skryptach?
W skryptach można użyć wstępnie zdefiniowanych zmiennych . Aby uzyskać więcej informacji na temat dostępnych zmiennych i sposobu ich używania, zobacz Używanie wstępnie zdefiniowanych zmiennych.
Jak mogę ustawić zmienną, aby mogła być odczytywana przez kolejne skrypty i zadania?
Aby dowiedzieć się więcej na temat definiowania zmiennych kompilacji w skrycie, zobacz Definiowanie i modyfikowanie zmiennych kompilacji w skryfcie.
Aby dowiedzieć się więcej na temat definiowania zmiennych wydania w skryfcie, zobacz Define and modify your release variables in a script (Definiowanie i modyfikowanie zmiennych wydania w skryfcie)
Która gałąź skryptu jest uruchamiana?
Kompilacja będzie używać aktywnej gałęzi kodu. Jeśli uruchomienie potoku main
używa gałęzi , skrypt będzie również używać main
gałęzi .
Jakiego rodzaju parametry można użyć?
Możesz użyć nazwanych parametrów. Inne rodzaje parametrów, takich jak parametry przełącznika, nie są obsługiwane. Jeśli spróbujesz użyć parametrów przełącznika, zobaczysz błędy.
Używam lokalnego serwera TFS i nie widzę niektórych z tych funkcji. Dlaczego nie?
Niektóre z tych funkcji są dostępne tylko w usłudze Azure Pipelines i nie są jeszcze dostępne lokalnie. Niektóre funkcje są dostępne lokalnie, jeśli przeprowadzono uaktualnienie do najnowszej wersji serwera TFS.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla