İşlem hattınızı özelleştirmek için PowerShell betiği kullanma

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Kodunuzu derleme ve test etme ile ilgili temel bilgilerin ötesine geçmeye hazır olduğunuzda, ekibinizin iş mantığını derleme işlem hattınıza eklemek için bir PowerShell betiği kullanın. Windows PowerShell'i bir Windows derleme aracısı üzerinde çalıştırabilirsiniz. PowerShell Core herhangi bir platformda çalışır.

PowerShell betiği ekleme

PowerShell Core ekleme söz dizimi, Windows PowerShell söz diziminden biraz farklıdır.

  1. PowerShell betiğinizi deponuza gönderin.

  2. Bir pwsh veya powershell adımı ekleyin. pwsh anahtar sözcüğü, PowerShell Core için PowerShell görevinin kısayoludur. powershell Anahtar sözcük, PowerShell görevi için başka bir kısayoldur.

# for PowerShell Core
steps:
- pwsh: ./my-script.ps1

# for Windows PowerShell
steps:
- powershell: .\my-script.ps1

Örnek PowerShell betiği: sürüm derlemeleri

Derlemelerinizi sürüme eklemek için örnek bir betik aşağıda verilmiştır. Betiğin başarıyla çalışması için derleme numaranızı dört noktalı bir biçim kullanacak şekilde güncelleştirmeniz gerekir (örnek: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)). Derleme numarası, çalıştırma numarası olarak da adlandırılır.

YaML işlem hattı içindeki derleme numaranızı özelliğiyle name özelleştirebilirsiniz.

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."
}

Örnek PowerShell betiği: REST API'ye erişme

Bu örnekte, Azure Pipelines REST API'sine erişmek için değişkenini SYSTEM_ACCESSTOKEN kullanacaksınız.

OAuth belirtecine erişmek için bir YAML işlem hattındaki betiğinizde kullanabilirsiniz $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)

SSS

Betiklerimde hangi değişkenleri kullanabilirim?

Betiklerinizde önceden tanımlanmış değişkenleri kullanabilirsiniz. Kullanılabilir değişkenler ve bunların nasıl kullanılacağı hakkında daha fazla bilgi için bkz . Önceden tanımlanmış değişkenleri kullanma.

sonraki betikler ve görevler tarafından okunabilmesi için bir değişken Nasıl yaparım??

Bir betikte derleme değişkenlerini tanımlama hakkında daha fazla bilgi edinmek için bkz . Betikte derleme değişkenlerinizi tanımlama ve değiştirme.

Betikte yayın değişkenlerini tanımlama hakkında daha fazla bilgi edinmek için bkz . Betikte yayın değişkenlerinizi tanımlama ve değiştirme

Derleme betiğin hangi dalını çalıştırır?

Derleme, kodunuzun etkin dalını kullanır. İşlem hattı çalıştırmanız dalı main kullanıyorsa betiğiniz de dalı main kullanır.

Ne tür parametreler kullanabilirim?

Adlandırılmış parametreleri kullanabilirsiniz. Anahtar parametreleri gibi diğer parametre türleri desteklenmez. Anahtar parametrelerini kullanmayı denerseniz hatalarla karşılaşırsınız.

Şirket içinde TFS kullanıyorum ve bu özelliklerden bazılarını görmüyorum. Neden?

Bu özelliklerden bazıları yalnızca Azure Pipelines'da kullanılabilir ve henüz şirket içinde kullanılamaz. TFS'nin en son sürümüne yükselttiyseniz bazı özellikler şirket içinde kullanılabilir.