PowerShell 스크립트를 사용하여 파이프라인 사용자 지정
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
코드 컴파일 및 테스트의 기본 사항 이상으로 이동할 준비가 되면 PowerShell 스크립트를 사용하여 빌드 파이프라인에 팀의 비즈니스 논리를 추가합니다. Windows 빌드 에이전트에서 Windows PowerShell을 실행할 수 있습니다. PowerShell Core는 모든 플랫폼에서 실행됩니다.
PowerShell 스크립트 추가
PowerShell Core를 포함하는 구문은 Windows PowerShell 구문과 약간 다릅니다.
PowerShell 스크립트를 리포지토리에 푸시합니다.
또는
pwsh
단계를 추가합니다powershell
.pwsh
키워드(keyword) PowerShell Core용 PowerShell 작업의 바로 가기입니다.powershell
키워드(keyword) PowerShell 작업의 또 다른 바로 가기입니다.
# for PowerShell Core
steps:
- pwsh: ./my-script.ps1
# for Windows PowerShell
steps:
- powershell: .\my-script.ps1
PowerShell 스크립트 예제: 버전 어셈블리
다음은 어셈블리의 버전을 지정하는 예제 스크립트입니다. 스크립트가 성공적으로 실행되도록 하려면 4개의 마침표(예: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
)가 있는 형식을 사용하도록 빌드 번호를 업데이트해야 합니다. 빌드 번호를 실행 번호라고도 합니다.
속성을 사용하여 YAML 파이프라인 name
내에서 빌드 번호를 사용자 지정할 수 있습니다.
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."
}
PowerShell 스크립트 예제: REST API 액세스
이 예제에서는 변수를 SYSTEM_ACCESSTOKEN
사용하여 Azure Pipelines REST API에 액세스합니다.
YAML 파이프라인의 스크립트에서 OAuth 토큰에 액세스하는 데 사용할 $env:SYSTEM_ACCESSTOKEN
수 있습니다.
- 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)
FAQ
내 스크립트에서 사용할 수 있는 변수는 무엇인가요?
스크립트에서 미리 정의된 변수를 사용할 수 있습니다. 사용 가능한 변수 및 사용 방법에 대한 자세한 내용은 미리 정의된 변수 사용을 참조 하세요.
어떻게 할까요? 후속 스크립트 및 태스크에서 읽을 수 있도록 변수를 설정하시겠습니까?
스크립트에서 빌드 변수를 정의하는 방법에 대한 자세한 내용은 스크립트에서 빌드 변수 정의 및 수정을 참조하세요.
스크립트에서 릴리스 변수를 정의하는 방법에 대한 자세한 내용은 스크립트에서 릴리스 변수 정의 및 수정을 참조 하세요.
빌드가 실행되는 스크립트의 분기는 무엇입니까?
빌드는 코드의 활성 분기를 사용합니다. 파이프라인 실행에서 분기를 main
사용하는 경우 스크립트도 분기를 main
사용합니다.
어떤 종류의 매개 변수를 사용할 수 있나요?
명명된 매개 변수를 사용할 수 있습니다. 스위치 매개 변수와 같은 다른 종류의 매개 변수는 지원되지 않습니다. 스위치 매개 변수를 사용하려고 하면 오류가 표시됩니다.
TFS 온-프레미스를 사용하고 있지만 일부 기능이 표시되지 않습니다. 이유는 무엇인가요?
일부 기능은 Azure Pipelines에서만 사용할 수 있으며 온-프레미스에서는 아직 사용할 수 없습니다. 최신 버전의 TFS로 업그레이드한 경우 일부 기능을 온-프레미스에서 사용할 수 있습니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기