Görev türleri ve kullanımı
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Görev işlem hattında bir eylem gerçekleştirir ve bir dizi girişle soyutlanmış paketlenmiş bir betik veya yordamdır. Görevler, işlem hattında otomasyonu tanımlamaya yönelik yapı taşlarıdır.
Bir işi çalıştırdığınızda, tüm görevler sırayla, birbiri ardına çalıştırılır. Aynı görev kümesini birden çok aracıda paralel olarak çalıştırmak veya aracı kullanmadan bazı görevleri çalıştırmak için bkz . işler.
Varsayılan olarak, ister konakta ister iş kapsayıcısında olsun, tüm görevler aynı bağlamda çalışır.
İsteğe bağlı olarak tek bir görevin bağlamlarını denetlemek için adım hedeflerini kullanabilirsiniz.
Yerleşik görevlerle bir görevin özelliklerini belirtme hakkında daha fazla bilgi edinin.
Bir işi çalıştırdığınızda, tüm görevler bir aracıda sırayla, birbiri ardına çalıştırılır. Aynı görev kümesini birden çok aracıda paralel olarak çalıştırmak veya aracı kullanmadan bazı görevleri çalıştırmak için bkz . işler.
Görevler tarafından desteklenen genel öznitelikler hakkında daha fazla bilgi edinmek için steps.task için YAML Başvurusu'na bakın.
Özel görevler
Azure DevOps, temel derleme ve dağıtım senaryolarını etkinleştirmek için yerleşik görevler içerir. Ayrıca kendi özel görevinizi de oluşturabilirsiniz.
Ayrıca, Visual Studio Market birçok uzantı sunar; bunların her biri aboneliğinize veya koleksiyonunuz için yüklendiğinde görev kataloğunu bir veya daha fazla görevle genişletir. Azure Pipelines'a görev eklemek için kendi özel uzantılarınızı da yazabilirsiniz.
YAML işlem hatlarında görevlere ada göre başvurursunuz. Ad hem yerleşik görev hem de özel görevle eşleşiyorsa, yerleşik görev önceliklidir. Bu riskten kaçınmak için özel görev için görev GUID'sini veya tam adı kullanabilirsiniz:
steps:
- task: myPublisherId.myExtensionId.myContributionId.myTaskName@1 #format example
- task: qetza.replacetokens.replacetokens-task.replacetokens@3 #working example
ve myExtensionId
öğesini bulmak myPublisherId
için Marketteki bir göreve al'ı seçin. URL dizenizdeki değerinden itemName
sonraki değerler ve myExtensionId
şeklindedirmyPublisherId
. Görevi yayın işlem hattına ekleyerek ve görevi düzenlerken YAML Görüntüle'yi seçerek de tam adı bulabilirsiniz.
Görev sürümleri
Görevler sürümü oluşturulur ve işlem hattınızda kullanılan görevin ana sürümünü belirtmeniz gerekir. Bu, görevin yeni sürümleri yayımlandığında sorunları önlemeye yardımcı olabilir. Görevler genellikle geriye dönük olarak uyumludur, ancak bazı senaryolarda bir görev otomatik olarak güncelleştirildiğinde öngörülemeyen hatalarla karşılaşabilirsiniz.
Yeni bir ikincil sürüm yayınlandığında (örneğin, 1.2 ile 1.3 arasında), işlem hattınız otomatik olarak yeni sürümü kullanır. Ancak, yeni bir ana sürüm yayınlanırsa (örneğin 2.0), işlem hattınızı düzenleyip yeni ana sürüme el ile değiştirene kadar işlem hattınız belirttiğiniz ana sürümü kullanmaya devam eder. Günlük, yeni bir ana sürümün kullanılabilir olduğuna ilişkin bir uyarı içerir.
İmzadan sonra @
görevin tam sürüm numarasını belirterek hangi ikincil sürümün kullanılacağını ayarlayabilirsiniz (örnek: GoTool@0.3.1
). Yalnızca kuruluşunuz için var olan görev sürümlerini kullanabilirsiniz.
YAML'de, görev adında kullanarak @
ana sürümü belirtirsiniz.
Örneğin, görevin 2. sürümüne sabitlemek PublishTestResults
için:
steps:
- task: PublishTestResults@2
YAML işlem hatları TFS'de kullanılamaz.
Görev denetim seçenekleri
Her görev size bazı Denetim Seçenekleri sunar.
Denetim seçenekleri bölümünde anahtar task
olarak kullanılabilir.
- task: string # Required as first property. Name of the task to run.
inputs: # Inputs for the task.
string: string # Name/value pairs
condition: string # Evaluate this condition expression to determine whether to run this task.
continueOnError: boolean # Continue running even on failure?
displayName: string # Human-readable name for the task.
enabled: boolean # Run this task when the job runs?
env: # Variables to map into the process's environment.
string: string # Name/value pairs
name: string # ID of the step.
timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
Denetim seçenekleri bölümünde anahtar task
olarak kullanılabilir.
- task: string # Required as first property. Name of the task to run.
inputs: # Inputs for the task.
string: string # Name/value pairs
condition: string # Evaluate this condition expression to determine whether to run this task.
continueOnError: boolean # Continue running even on failure?
displayName: string # Human-readable name for the task.
target: string | target # Environment in which to run this task.
enabled: boolean # Run this task when the job runs?
env: # Variables to map into the process's environment.
string: string # Name/value pairs
name: string # ID of the step.
timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
Denetim seçenekleri bölümünde anahtar task
olarak kullanılabilir.
- task: string # Required as first property. Name of the task to run.
inputs: # Inputs for the task.
string: string # Name/value pairs
condition: string # Evaluate this condition expression to determine whether to run this task.
continueOnError: boolean # Continue running even on failure?
displayName: string # Human-readable name for the task.
target: string | target # Environment in which to run this task.
enabled: boolean # Run this task when the job runs?
env: # Variables to map into the process's environment.
string: string # Name/value pairs
name: string # ID of the step.
timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
retryCountOnTaskFailure: string # Number of retries if the task fails.
Not
Belirli bir görev veya iş, işin/aşamanın devam edip etmeyeceğine tek taraflı olarak karar veremiyor. Bunun yapabilecekleri, başarılı veya başarısız durumunu sunmaktır ve aşağı akış görevlerinin/işlerinin her birinin çalıştırılıp çalıştırılmayacağına karar vermelerine olanak tanıyan bir koşul hesaplaması vardır. Etkin bir şekilde "başarılı bir durumdaysak çalıştır" varsayılan koşuludur.
Hatada devam et, bunu küçük bir şekilde değiştirir. Tüm aşağı akış adımlarını/işlerini, bu kararı verme amacıyla herhangi bir sonucu "başarılı" olarak ele alma konusunda etkili bir şekilde "püf noktaları" oluşturur. Ya da başka bir şekilde ifade etmek gerekirse, "kapsanan yapının durumu hakkında bir karar verirken bu görevin başarısızlığını göz önünde bulundurma" diyor.
Zaman aşımı süresi, görev çalışmaya başladığında başlar. Görevin kuyruğa alındığı veya aracı beklediği süreyi içermez.
Not
İşlem hatları, görev düzeyi zaman aşımına ek olarak belirtilen bir iş düzeyi zaman aşımına sahip olabilir. adımınızın tamamlanmasından önce iş düzeyi zaman aşımı aralığı geçerse, adım daha uzun bir zaman aşımı aralığıyla yapılandırılmış olsa bile çalışan iş sonlandırılır. Daha fazla bilgi için bkz . Zaman Aşımları.
Bu YAML'de, PublishTestResults@2
önceki adım succeededOrFailed() koşulu nedeniyle başarısız olsa bile çalışır.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
architecture: 'x64'
- task: PublishTestResults@2
inputs:
testResultsFiles: "**/TEST-*.xml"
condition: succeededOrFailed()
Koşullar
Yalnızca aynı aracı havuzuna sahip önceki tüm doğrudan ve dolaylı bağımlılıklar başarılı olduğunda. Farklı aracı havuzlarınız varsa, bu aşamalar veya işler eşzamanlı olarak çalışır. YAML'de hiçbir koşul ayarlanmadıysa bu koşul varsayılandır.
Önceki bir bağımlılık başarısız olsa bile, çalıştırma iptal edilmediği sürece. Bu koşul için YAML'de kullanın
succeededOrFailed()
.Önceki bir bağımlılık başarısız olsa ve çalıştırma iptal edilse bile. Bu koşul için YAML'de kullanın
always()
.Yalnızca önceki bir bağımlılık başarısız olduğunda. Bu koşul için YAML'de kullanın
failed()
.
Adım hedefi
Görevler, aracı konağı veya kapsayıcı olan bir yürütme bağlamında çalışır.
Tek bir adım, bir target
belirterek bağlamını geçersiz kabilir.
Kullanılabilir seçenekler, aracı ana bilgisayarını ve işlem hattında tanımlanan tüm kapsayıcıları hedeflemek için kullanılır host
.
Örneğin:
resources:
containers:
- container: pycontainer
image: python:3.11
steps:
- task: SampleTask@1
target: host
- task: AnotherTask@1
target: pycontainer
Burada konak üzerinde çalıştırılır SampleTask
ve AnotherTask
bir kapsayıcıda çalıştırılır.
Görev başarısız olursa yeniden deneme sayısı
Görev başarısız olursa yeniden deneme sayısını belirtmek için kullanın retryCountOnTaskFailure
. Varsayılan değer sıfır yeniden denemedir. Görev özellikleri hakkında daha fazla bilgi için YAML Şeması'ndaki steps.task dosyasına bakın.
- task: <name of task>
retryCountOnTaskFailure: <max number of retries>
...
Not
- Aracı sürüm 2.194.0 veya üzerini gerektirir. Azure DevOps Server 2022'de aracısız görevler için yeniden denemeler desteklenmez. Daha fazla bilgi için bkz . 16 Kasım 2021 Azure DevOps hizmet güncelleştirmesi - Bir görev için otomatik yeniden denemeler ve Azure DevOps hizmet güncelleştirmesi 14 Haziran 2025 - Sunucu görevleri için yeniden denemeler.
- Her yeniden deneme arasındaki bekleme süresi her başarısız denemeden sonra artar. İlk yeniden deneme işlemi saniyeler içinde gerçekleşir.
- Görevin bir kez daha etkili olduğu varsayımı yoktur. Görevin yan etkileri varsa (örneğin, kısmen bir dış kaynak oluşturduysa), ikinci kez çalıştırıldığında başarısız olabilir.
- Görevin kullanımına sunulan yeniden deneme sayısı hakkında bilgi yok.
- Görev günlüklerine yeniden denenmeden önce başarısız olduğunu belirten bir uyarı eklenir.
- Bir görevi yeniden deneme girişimlerinin tümü kullanıcı arabiriminde aynı görev düğümünün bir parçası olarak gösterilir.
YAML işlem hatları TFS'de kullanılamaz.
Ortam değişkenleri
Her görevin, görev işlemiyle eşlenen ortam değişkenlerini temsil eden dize çiftlerinin listesi olan bir env
özelliği vardır.
- task: AzureCLI@2
displayName: Azure CLI
inputs: # Specific to each task
env:
ENV_VARIABLE_NAME: value
ENV_VARIABLE_NAME2: value
...
Aşağıdaki örnek, Komut satırı görevi için bir kısayol olan ve ardından eşdeğer görev söz dizimi olan adımı çalıştırırscript
. Bu örnek, Azure DevOps CLI ile kimlik doğrulaması yapmak için kullanılan ortam değişkenine bir değer AZURE_DEVOPS_EXT_PAT
atar.
# Using the script shortcut syntax
- script: az pipelines variable-group list --output table
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
displayName: 'List variable groups using the script step'
# Using the task syntax
- task: CmdLine@2
inputs:
script: az pipelines variable-group list --output table
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
displayName: 'List variable groups using the command line task'
- task: Bash@3
inputs:
targetType: # specific to each task
env:
ENV_VARIABLE_NAME: value
ENV_VARIABLE_NAME2: value
...
Aşağıdaki örnek, Bash@3 için bir kısayol olan ve ardından eşdeğer görev söz dizimi olan adımı çalıştırırscript
. Bu örnek, ortam değişkenine ENV_VARIABLE_NAME
bir değer atar ve değeri yankılar.
# Using the script shortcut syntax
- script: echo "This is " $ENV_VARIABLE_NAME
env:
ENV_VARIABLE_NAME: "my value"
displayName: 'echo environment variable'
# Using the task syntax
- task: Bash@2
inputs:
script: echo "This is " $ENV_VARIABLE_NAME
env:
ENV_VARIABLE_NAME: "my value"
displayName: 'echo environment variable'
Derleme aracı yükleyicileri (Azure Pipelines)
Araç yükleyicileri, derleme işlem hattınızın bağımlılıklarınızı yüklemesine ve denetlemesine olanak tanır. Özellikle:
CI derlemeniz için tam zamanında bir araç veya çalışma zamanı yükleyin (Microsoft tarafından barındırılan aracılarda bile).
Uygulamanızı veya kitaplığınızı Node.js gibi bir bağımlılığın birden çok sürümüne karşı doğrulayın.
Örneğin, uygulamanızı Node.js'in birden çok sürümü için çalıştıracak ve doğrulayacak şekilde derleme işlem hattınızı ayarlayabilirsiniz.
Örnek: Uygulamanızı birden çok Node.js sürümünde test edin ve doğrulayın
Projenizin temel dizininde aşağıdaki içeriklerle bir azure-pipelines.yml dosyası oluşturun.
pool:
vmImage: ubuntu-latest
steps:
# Node install
- task: UseNode@1
displayName: Node install
inputs:
version: '16.x' # The version we're installing
# Write the installed version to the command line
- script: which node
Yeni bir derleme işlem hattı oluşturun ve çalıştırın. Derlemenin nasıl çalıştığını gözlemleyin. Node.js Aracı Yükleyicisi, aracıda değilse Node.js sürümünü indirir. Komut Satırı betiği, diskte Node.js sürümünün konumunu günlüğe kaydeder.
YAML işlem hatları TFS'de kullanılamaz.
Araç yükleyici görevleri
Araç yükleyicisi görevlerimizin listesi için bkz . Araç yükleyicisi görevleri.
Kutu içi ve Market görevlerini devre dışı bırakma
Kuruluş ayarları sayfasında Market görevlerini, yerleşik görevleri veya her ikisini de devre dışı bırakabilirsiniz.
Market görevlerini devre dışı bırakmak işlem hatlarınızın güvenliğini artırmaya yardımcı olabilir.
Hem kutu içi hem de Market görevlerini devre dışı bırakırsanız, yalnızca kullandığınız tfx
görevler kullanılabilir.
İlgili makaleler
Yardım ve destek
- Sorun giderme ipuçlarını keşfedin.
- Stack Overflow hakkında öneri alın.
- Azure DevOps Geliştirici Topluluğu sorularınızı gönderin, yanıt arayın veya bir özellik önerin.
- Azure DevOps için destek alın.