Přizpůsobení kanálu pomocí skriptu PowerShellu
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Až budete připraveni přejít nad rámec základů kompilace a testování kódu, použijte skript PowerShellu k přidání obchodní logiky týmu do kanálu buildu. Windows PowerShell můžete spustit na agentu sestavení windows nebo PowerShellu Core na libovolné platformě.
Když použijete úlohu PowerShellu PowerShellu, skript PowerShellu se spustí v kanálu. PowerShell můžete použít pro přístup k rozhraní REST API Azure DevOps, práci s pracovními položkami Azure DevOps a správu testů a podle potřeby volat další služby.
Přidání skriptu PowerShellu
Syntaxe zahrnutí PowerShellu Core se mírně liší od syntaxe windows PowerShellu.
Nasdílejte skript PowerShellu do úložiště.
pwsh
Přidejte do kanálu nebopowershell
krok:pwsh
Klíčové slovo je zkratka pro úlohu PowerShellu pro PowerShell Core. Klíčovépowershell
slovo je dalším zástupcem úlohy PowerShellu.
Příklady:
# for PowerShell Core
steps:
- pwsh: ./my-script.ps1
# for Windows PowerShell
steps:
- powershell: .\my-script.ps1
Ukázkový skript PowerShellu: sestavení verzí
Tady je ukázkový skript pro verzi sestavení. Aby se skript úspěšně spustil, musíte aktualizovat číslo sestavení tak, aby používalo formát se čtyřmi tečkami (například: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
). Číslo buildu se také může značovat jako číslo spuštění.
Číslo buildu můžete přizpůsobit v rámci kanálu YAML s name
vlastností.
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
pool:
vmImage: windows-latest
steps:
- pwsh: echo $(Build.BuildNumber) //output updated build number
Ukázkový skript PowerShellu:
# 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."
}
Ukázkový skript PowerShellu: Přístup k rozhraní REST API
V tomto příkladu použijete proměnnou SYSTEM_ACCESSTOKEN
pro přístup k rozhraní REST API služby Azure Pipelines.
Ve skriptu v kanálu YAML můžete použít $env:SYSTEM_ACCESSTOKEN
přístup k tokenu OAuth.
Následující příklad vložený skript PowerShellu používá token OAuth pro přístup k rozhraní REST API služby Azure Pipelines, který načte definici kanálu.
- 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)
Často kladené dotazy
Jaké proměnné mám k dispozici ve skriptech?
Ve skriptech můžete použít předdefinované proměnné . Další informace o dostupných proměnných a jejich použití najdete v tématu Použití předdefinovaných proměnných.
Návody nastavit proměnnou tak, aby ji mohly číst další skripty a úlohy?
Další informace o definování proměnných sestavení ve skriptu najdete v tématu Definování a úprava proměnných sestavení ve skriptu.
Další informace o definování proměnných vydané verze ve skriptu najdete v tématu Definování a úprava proměnných vydané verze ve skriptu.
Která větev skriptu se spustí?
Sestavení používá aktivní větev kódu. Pokud vaše spuštění kanálu používá main
větev, skript také používá main
větev.
Jaké druhy parametrů můžu použít?
Můžete použít pojmenované parametry. Jiné typy parametrů, jako jsou parametry přepínače, se nepodporují. Pokud se pokusíte použít parametry přepínače, zobrazí se chyby.
Používám místně TFS a některé z těchto funkcí nevidím. Proč ne?
Některé z těchto funkcí jsou dostupné jenom v Azure Pipelines a zatím nejsou dostupné místně. Některé funkce jsou dostupné místně, pokud jste upgradovali na nejnovější verzi TFS.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro