A folyamat testreszabása PowerShell-szkript használatával
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Ha készen áll arra, hogy túllépjen a kód összeállításának és tesztelésének alapjaion, egy PowerShell-szkripttel adja hozzá a csapat üzleti logikáját a buildelési folyamathoz. A Windows PowerShellt windowsos buildügynökön vagy PowerShell Core-on bármilyen platformon futtathatja.
A PowerShell-feladat PowerShell-feladatának használatakor a PowerShell-szkript a folyamatban fut. A PowerShell használatával hozzáférhet az Azure DevOps REST API-hoz, dolgozhat az Azure DevOps munkaelemeivel és tesztelheti a felügyeletet, és szükség szerint meghívhat más szolgáltatásokat.
PowerShell-szkript hozzáadása
A PowerShell Core szintaxisa kissé eltér a Windows PowerShell szintaxisától.
A PowerShell-szkript leküldése az adattárba.
pwsh
Egy vagypowershell
több lépés hozzáadása a folyamathoz Apwsh
kulcsszó a PowerShell Core PowerShell-feladatának parancsikonja. Apowershell
kulcsszó egy másik parancsikon a PowerShell-feladathoz.
Példák:
# for PowerShell Core
steps:
- pwsh: ./my-script.ps1
# for Windows PowerShell
steps:
- powershell: .\my-script.ps1
Példa PowerShell-szkriptre: verziószerelvények
Íme egy példaszkript a szerelvények verziószámára. Ahhoz, hogy a szkript sikeresen fusson, frissítenie kell a build számát, hogy négy pontból álló formátumot használjon (például: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
). A buildszám futtatási számnak is nevezhető.
A yaML-folyamaton belül testre szabhatja a buildszámot a name
tulajdonsággal.
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
pool:
vmImage: windows-latest
steps:
- pwsh: echo $(Build.BuildNumber) //output updated build number
Példa PowerShell-szkriptre:
# 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."
}
Példa PowerShell-szkriptre: hozzáférés a REST API-hoz
Ebben a példában a változóval SYSTEM_ACCESSTOKEN
éri el az Azure Pipelines REST API-t.
Az OAuth-jogkivonat eléréséhez használhatja $env:SYSTEM_ACCESSTOKEN
a szkriptet egy YAML-folyamatban.
Az alábbi példa beágyazott PowerShell-szkript az OAuth-jogkivonatot használja a folyamatdefiníciót lekérő Azure Pipelines REST API eléréséhez.
- 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)
GYIK
Milyen változók érhetők el a szkriptjeimben?
A szkriptekben előre definiált változókat is használhat. Az elérhető változókról és azok használatáról az előre definiált változók használata című témakörben olvashat bővebben.
Hogyan beállítani egy változót, hogy a későbbi szkriptek és feladatok beolvashassák?
Ha többet szeretne megtudni a buildváltozók szkriptben való definiálásáról, olvassa el a buildváltozók definiálása és módosítása szkriptekben című témakört.
Ha többet szeretne tudni a kiadási változók szkriptben való definiálásáról, olvassa el a kiadási változók definiálása és módosítása szkriptben című témakört .
A szkript melyik ága fut a buildben?
A build a kód aktív ágát használja. Ha a folyamatfuttatás az ágat main
használja, a szkript az ágat main
is használja.
Milyen paramétereket használhatok?
Névvel ellátott paramétereket is használhat. Más típusú paraméterek, például kapcsolóparaméterek nem támogatottak. Ha kapcsolóparamétereket próbál használni, hibaüzenetek jelennek meg.
A helyszíni TFS-t használom, és ezek közül néhányat nem látok. Miért igaz a fenti mondat?
Ezen funkciók némelyike csak az Azure Pipelinesban érhető el, és még nem érhető el a helyszínen. Egyes funkciók a helyszínen is elérhetők, ha a TFS legújabb verziójára frissített.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: