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.
  retryCountOnTaskFailure: string # Number of retries if the task fails.

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ıştırılır. YAML'de ayarlanmış bir koşul yoksa bu varsayılan değerdir.

  • Ö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 bile, çalıştırma iptal edilmiş olsa 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 targetbelirterek 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ırdır. 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. Aracısız görevler için desteklenmez.
  • Başarısız olan görev saniyeler içinde yeniden denenir. Her yeniden deneme arasındaki bekleme süresi her başarısız denemeden sonra artar.
  • 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'

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.

Yardım ve destek