Görev türleri & kullanımı

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2015

Not

Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde, derleme ve yayın işlem hatlarıtanımlarolarak adlandırılır, çalışmalaraderlemelerdenir, hizmet bağlantılarınahizmet uç noktalarıdenir, aşamalarortamlarolarak adlandırılır ve işleraşamalarolarak adlandırılır.

Görev , bir işlem hattında Otomasyon tanımlamak için yapı taşıdır. Bir görev, bir giriş kümesiyle soyutlaneklenen paketlenmiş bir betiktir veya yordamdır.

İşlem hattınızı bir görev eklediğinizde, işlem hattına bir talep kümesi de ekleyebilir. Talepler, görevi çalıştırmak için aracıya yüklenmesi gereken önkoşulları tanımlar. Derlemeyi veya dağıtımı çalıştırdığınızda, bu talepleri karşılayan bir aracı seçilir.

Bir çalıştırdığınızda, diğer tüm görevler sırayla çalıştırılır. Aynı görev kümesini birden çok aracıda paralel olarak çalıştırmak veya bir aracı kullanmadan bazı görevleri çalıştırmak için bkz. işler.

Varsayılan olarak, tüm görevler konak üzerinde mi yoksa bir iş kapsayıcısıiçinde olsun, aynı bağlamda çalışır. İsteğe bağlı olarak, tek bir görevin bağlamını denetlemek için adım hedeflerini kullanabilirsiniz.

YAML şemasıile bir görevin özelliklerini belirtme hakkında daha fazla bilgi edinin.

Bir çalıştırdığınızda, tüm görevler, bir aracıda diğeri bir sırayla çalıştırılır. Aynı görev kümesini birden çok aracıda paralel olarak çalıştırmak veya bir aracı kullanmadan bazı görevleri çalıştırmak için bkz. işler.

Özel görevler

Temel derleme ve dağıtım senaryolarını etkinleştirmek için bazı yerleşik görevler sağlıyoruz. Kendi özel görevinizi oluşturmakiçin de kılavuzluk sunuyoruz.

ayrıca, Visual Studio market , her biri abonelik veya koleksiyona yüklendiğinde, görev kataloğunu bir veya daha fazla görevle genişleten bir dizi uzantı sunar. ayrıca, Azure Pipelines veya TFS 'ye görev eklemek için kendi özel uzantılarınızı yazabilirsiniz.

YAML işlem hatları 'nda görevlere adına göre başvurursunuz. Bir ad hem yerleşik bir görevle hem de özel bir görevle eşleşiyorsa, yerleşik görev öncelikli olur. Bu riski önlemek için, özel görev için görev GUID 'sini veya tam nitelikli bir adı kullanabilirsiniz:

steps:
- task: myPublisherId.myExtensionId.myContributionId.myTaskName@1 #format example
- task: qetza.replacetokens.replacetokens-task.replacetokens@3 #working example

myPublisherIdVe myExtensionId ' yi bulmak için Market 'teki bir görevi myPublisherId ' ı seçin. itemNameURL dizinizdeki öğesinden sonraki değerler myPublisherId ve myExtensionId . Ayrıca, görevi bir yayın ardışık düzenine ekleyerek ve görevi düzenlenirken YAML görüntüle ' ye tıklayarak tam nitelikli adı bulabilirsiniz.

Görev sürümleri

Görevler sürümlüdür ve işlem hattınızda kullanılan görevin ana sürümünü belirtmeniz gerekir. Bu, bir görevin yeni sürümleri serbest bırakıldığında sorunları önlemeye yardımcı olabilir. Görevler genellikle geriye dönük olarak uyumludur, ancak bazı senaryolarda bir görev otomatik olarak güncelleniyorsa öngörülemeyen hatalarla karşılaşabilirsiniz.

Yeni bir ikincil sürüm yayınlanmışsa (örneğin, 1,2 ile 1,3 arasında), derleme veya sürüm otomatik olarak yeni sürümü kullanacaktır. Ancak, yeni bir ana sürüm yayınlanmışsa (örneğin 2,0), derleme veya sürüm, işlem hattını düzenleyip ve yeni ana sürüme el ile değişene kadar belirttiğiniz ana sürümü kullanmaya devam eder. Derleme veya yayın günlüğü, yeni bir ana sürümün kullanılabilir olduğunu belirten bir uyarı içerecektir.

İşaretinden sonra bir 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şunuziçin mevcut olan görev sürümlerini kullanabilirsiniz.

YAML 'de, görev adında ana sürümü belirtirsiniz @ . Örneğin, görevin 2. sürümüne sabitlemek için PublishTestResults :

steps:
- task: PublishTestResults@2

YAML işlem hatları TFS 'de kullanılamaz.

Görev denetimi seçenekleri

Her görev size bazı Denetim seçeneklerisunar.

Denetim seçenekleri, bölümünde anahtarlar olarak kullanılabilir task .

- task: string  # reference to a task and version, e.g. "VSBuild@1"
  condition: expression     # see below
  continueOnError: boolean  # 'true' if future steps should run even if this step fails; defaults to 'false'
  enabled: boolean          # whether or not to run this step; defaults to 'true'
  timeoutInMinutes: number  # how long to wait before timing out the task

Denetim seçenekleri, bölümünde anahtarlar olarak kullanılabilir task .

- task: string  # reference to a task and version, e.g. "VSBuild@1"
  condition: expression     # see below
  continueOnError: boolean  # 'true' if future steps should run even if this step fails; defaults to 'false'
  enabled: boolean          # whether or not to run this step; defaults to 'true'
  timeoutInMinutes: number  # how long to wait before timing out the task
  target: string            # 'host' or the name of a container resource to target

Denetim seçenekleri, bölümünde anahtarlar olarak kullanılabilir task .

- task: string  # reference to a task and version, e.g. "VSBuild@1"
  condition: expression     # see below
  continueOnError: boolean  # 'true' if future steps should run even if this step fails; defaults to 'false'
  enabled: boolean          # whether or not to run this step; defaults to 'true'
  retryCountOnTaskFailure: number # Max number of retries; default is zero
  timeoutInMinutes: number  # how long to wait before timing out the task
  target: string            # 'host' or the name of a container resource to target

Not

Belirli bir görev veya iş tek taraflı iş/aşamanın devam edip etmediğini meyeceğine karar vermez. Ne yapabilecekleri, başarılı veya başarısızdurumuna sahip olmak ve aşağı akış görevlerinin/işlerin her birinin çalıştırılıp çalıştırılmayacağına karar vermesine izin veren bir koşul hesaplaması vardır. Etkin durumda olan varsayılan koşul "başarılı durumumuz" çalışır ".

Hatada devam et , bunu hafif bir şekilde değiştirir. Tüm aşağı akış adımları/işleri, bu kararı verme amacıyla herhangi bir sonucu "başarılı" olarak davranmak için etkili bir şekilde "püf". Ya da bunu başka bir şekilde yerleştirmek için, "kapsayan yapının koşulu hakkında bir karar verirken bu görevin başarısızlığını göz önünde bulundurun" diyor.

Zaman aşımı süresi, görev çalışmaya başladığında başlar. Görevin kuyruğa alındığı veya bir aracıyı beklediği zaman dahil değildir.

Bu YAML 'de, PublishTestResults@2PublishTestResults@2nedeniyle önceki adım başarısız olsa bile çalışır.

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.7'
    architecture: 'x64'
- task: PublishTestResults@2
  inputs:
    testResultsFiles: "**/TEST-*.xml"
  condition: succeededOrFailed()

Not

Tam şema için bkz. YAML şeması .

Koşullar

  • Yalnızca aynı aracı havuzuna sahip tüm önceki 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 bir koşul ayarlanmamışsa bu varsayılandır.

  • Önceki bağımlılık başarısız olsa bile, çalıştırma iptal edilmediği takdirde. succeededOrFailed()Bu koşul IÇIN YAML 'de kullanın.

  • Önceki bağımlılık başarısız olsa bile, çalıştırma iptal edilse bile. always()Bu koşul IÇIN YAML 'de kullanın.

  • Yalnızca önceki bir bağımlılık başarısız olduğunda. failed()Bu koşul IÇIN YAML 'de kullanın.

Adım hedefi

Görevler, aracı Konağı ya da kapsayıcı olan bir yürütme bağlamında çalışır. Tek bir adım bir belirterek bağlamını geçersiz kılabilir target . Kullanılabilir seçenekler, aracı konağını hedefleyecek sözcüktir ve işlem hattında host tanımlanan kapsayıcılardır. Örnek:

resources:
  containers:
  - container: pycontainer
    image: python:3.8

steps:
- task: SampleTask@1
  target: host
- task: AnotherTask@1
  target: pycontainer

Burada, SampleTask konakta çalışır ve AnotherTask bir kapsayıcıda çalışır.

Görev başarısız olursa yeniden deneme sayısı

retryCountOnTaskFailureGörev başarısız olursa yeniden deneme sayısını belirtmek için kullanın. Varsayılan değer sıfırdır.

- task: <name of task>
   retryCountOnTaskFailure: <max number of retries>
   ...

Not

  • Başarısız olan görev hemen yeniden denenir.
  • Görevin en yükselişi hakkında bir varsayım yoktur. Görevin yan etkileri varsa (örneğin, bir dış kaynağı kısmen oluşturduysanız), ikinci kez çalıştırıldığında başarısız olabilir.
  • Görevin kullanılabilir hale getirilme sayısı hakkında bilgi yok.
  • Görev günlüklerine, yeniden denenmeye başlamadan önce başarısız olduğunu belirten bir uyarı eklenir.
  • Bir görevi yeniden deneme girişimleri, 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

YAML işlem hatları, 2019 ve Azure DevOps Server için de destek sağlar.

Her görevin, env görev sürecine eşlenen ortam değişkenlerini temsil eden dize çiftlerinin listesi olan bir ö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 kısayol olan adımı ve ardından eşdeğer script görev söz scriptdizimini çalıştırır. Bu örnek, cli ile kimlik AZURE_DEVOPS_EXT_PAT doğrulama için kullanılan ortam değişkenine bir Azure DevOps 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ı bağımlılıklarınızı yükp denetlemeye olanak sağlar. Özellikle:

  • CI derlemeniz için hemen zamanında bir araç veya çalışma zamanı yükleyin (Microsofttarafından barındırılan aracılarda bile).

  • Uygulama veya kitaplığınızı bağımlılık gibi birden çok sürüme karşı Node.js.

Örneğin, derleme işlem hattınızı, uygulamanın birden çok sürümü için çalıştırmak ve doğrulamak için Node.js.

Örnek: Uygulamalarınızı birden çok sürümde test edin ve Node.js

Projenizin temel dizininde aşağıdaki içeriklerle bir azure-pipelines.yml dosyası oluşturun.

pool:
  vmImage: 'Ubuntu 16.04'

steps:
# Node install
- task: NodeTool@0
  displayName: Node install
  inputs:
    versionSpec: '6.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ırı olduğunu gözlemlemek. Node.js Aracı Yükleyicisi, Node.js aracıda yoksa bu sürümü indirir. Komut Satırı betiği, diskte Node.js konumunu günlüğe kaydeder.

YAML işlem hatları TFS'de kullanılamaz.

Araç yükleyicisi görevleri

Araç yükleyicisi görevlerimizin listesi için bkz. Araç yükleyicisi görevleri.

Kutu içinde ve Market görevlerini devre dışı bırakma

Kuruluş ayarları sayfasında Market görevlerini, kutu içinde görevleri veya her ikisini de devre dışı abilirsiniz. Market görevlerini devre dışı bırakmak, işlem hatlarının güvenliğini artırmaya yardımcı olabilir. Hem kutu içinde hem de Market görevlerini devre dışı bıraksanız, yalnızca kullanarak tfx yüklemiş olursanız görevler kullanılabilir.

Yardım ve destek