Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Azure Pipelines, Linux, macOS ve Windows makinelerinde işlem hatları çalıştırabilir. .NET Core, Node.jsveya Python gibi platformlar arası geliştirme teknolojileri kullanıyorsanız, bu platformlar arası derleme özellikleri hem avantajları hem de zorlukları beraberinde getirir. Örneğin, çoğu işlem hattı derleme işlemi sırasında çalıştırılacak bir veya daha fazla betik içerir, ancak betik söz dizimi genellikle platformlara göre farklılık gösterir.
Bu makalede, farklı derleme platformlarını desteklemek için platformlar arası betiği nasıl kullanabileceğiniz açıklanmaktadır. Platformlar arası betik yazmayı kolaylaştırmak için Azure Pipelines script adımlarını kullanabilirsiniz. Betikleri belirli platformlara hedeflemek için koşulları da kullanabilirsiniz.
Betik adımı
Betik anahtar sözcüğü, Linux ve macOS üzerinde Bash veya Windows üzerinde cmd.exe çalıştıran komut satırı görevi için bir kısayoldur.
script kullanarak bağımsız değişkenleri platformlar arası bir araç için kolayca geçirebilirsiniz.
script adımı, her platformun yerel betik yorumlayıcısında; macOS ve Linux'ta Bash'te veya Windows'da cmd.exe'de çalışır. Aşağıdaki örnek, bir argümanlar dizisi ile script çağırmak için bir npm adımı kullanır.
Ortam değişkenleri
Komut satırı, PowerShell ve Bash ortam değişkenlerini farklı çözümler. PATH gibi sistem tarafından sağlanan bir değere erişmek için platform başına farklı bir söz dizimi kullanmanız gerekir.
Azure Pipelines, çalışma zamanında değişkenlere başvurmak için platformlar arası bir yol olarak makro söz dizimlerini kullanır. Makro söz dizimine sahip değişkenler, çalışma zamanı sırasında bir görev yürütülmeden önce işlenir. Değişken platform kabuğuyla karşılaşmadan önce genişler.
İşlem hattında makro söz dizimini kullanmak için değişken adını şu şekilde çevreleyin: $(<variable name>). Aşağıdaki platformlar arası örnek betik, işlem hattının kimliğini gösterir.
steps:
- script: echo This is pipeline $(System.DefinitionId)
Bu söz dizimi, işlem hattı içinde tanımladığınız değişkenler için de çalışır.
variables:
Example: 'myValue'
steps:
- script: echo The value passed in is $(Example)
Bash görevi
Daha karmaşık betiklere ihtiyacınız varsa bunları Bash'te yazmayı ve işlem hattınızda Bash görevini kullanmayı göz önünde bulundurun. macOS ve Linux ajanlarının çoğu Bash'i kabuk olarak kullanır; Windows ajanları ise ya Git Bash ya da Linux için Windows Alt Sistemi kullanarak Bash kabuğunu kullanabilir. Microsoft tarafından barındırılan aracılarda bash varsayılan olarak önceden yüklenmiş olarak bulunur.
Aşağıdaki örnek, bir derlemeyi tetikleyip tetiklememeye karar vermek için bir Bash görevi çalıştırır.
trigger:
batch: true
branches:
include:
- main
steps:
- bash: |
echo "Hello world from $AGENT_NAME running on $AGENT_OS"
case $BUILD_REASON in
"Manual") echo "$BUILD_REQUESTEDFOR manually queued the build." ;;
"IndividualCI") echo "This is a CI build for $BUILD_REQUESTEDFOR." ;;
"BatchedCI") echo "This is a batched CI build for $BUILD_REQUESTEDFOR." ;;
*) $BUILD_REASON ;;
esac
displayName: Hello world
Uyarı
PowerShell, betikler için de bir seçenektir. Kısayol pwsh macOS, Linux veya Windows üzerinde PowerShell 7.x'i çalıştırır. Aracılarda PowerShell 7.x yüklü olmalıdır.
Microsoft tarafından barındırılan aracılarda varsayılan olarak PowerShell 7.x yüklüdür.
Platform tabanlı anahtarlama
Platforma özgü betiklerle işlem hattı mantığının yinelenmesi, ekstra iş yüküne ve artan hata riskine neden olur. Ancak platforma özgü betiklerden kaçınamıyorsanız, hangi platformda olduğunuzu algılamak için koşulları kullanabilirsiniz.
Örneğin, derleme aracısının IP adresini almak için macOS'ta ifconfig, Ubuntu Linux'ta ip addr ve Windows PowerShell'de Get-NetIPAddress cmdlet'ini kullanmanız gerekir. Aşağıdaki işlem hattı, koşulları kullanarak bu bilgileri farklı platformlardaki aracılardan alır.
steps:
# Linux
- bash: |
export IPADDR=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
echo "##vso[task.setvariable variable=IP_ADDR]$IPADDR"
condition: eq( variables['Agent.OS'], 'Linux' )
displayName: Get IP on Linux
# macOS
- bash: |
export IPADDR=$(ifconfig | grep 'en0' -A3 | grep inet | tail -n1 | awk '{print $2}')
echo "##vso[task.setvariable variable=IP_ADDR]$IPADDR"
condition: eq( variables['Agent.OS'], 'Darwin' )
displayName: Get IP on macOS
# Windows
- powershell: |
Set-Variable -Name IPADDR -Value ((Get-NetIPAddress | ?{ $_.AddressFamily -eq "IPv4" -and !($_.IPAddress -match "169") -and !($_.IPaddress -match "127") } | Select-Object -First 1).IPAddress)
Write-Host "##vso[task.setvariable variable=IP_ADDR]$IPADDR"
condition: eq( variables['Agent.OS'], 'Windows_NT' )
displayName: Get IP on Windows
# use the value
- script: |
echo The IP address is $(IP_ADDR)