Aracılığıyla paylaş


Görev türleri ve kullanımı

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Azure Pipelines görevleri, görevler veya betikler olabilecek adımlardan oluşur. Görev, işlem hattı otomasyonlarını tanımlamak için bir eylem gerçekleştiren veya bir dizi giriş kullanan önceden paketlenmiş bir betik veya yordamdır. Bu makalede işlem hattı görevleri ve bunların nasıl kullanılacağı açıklanmaktadır. Şema bilgileri için steps.task tanımına bakın.

Azure Pipelines, temel derleme ve dağıtım senaryolarını etkinleştiren birçok yerleşik görev içerir. Kullanılabilir yerleşik Azure Pipelines görevlerinin listesi için bkz. Azure Pipelines görev başvurusu. Ayrıca Visual Studio Market'ten görevleri yükleyebilir veya özel görevler oluşturabilirsiniz.

Varsayılan olarak, bir işteki tüm adımlar konakta veya iş kapsayıcısında aynı bağlamda çalışır. İsteğe bağlı olarak adım hedeflerini kullanarak tek tek görevlerin bağlamlarını denetleyebilirsiniz. Bazı görevleri birden çok aracıda paralel olarak veya aracı kullanmadan çalıştırmak için bkz. İşlem hattınızda işleri belirtme.

Görev yönetimi

Görevler Azure DevOps kuruluş düzeyinde kullanılabilir ve yüklenir. Yalnızca kuruluşunuz için var olan görevleri ve görev sürümlerini kullanabilirsiniz.

Yerleşik görevleri, Market görevlerini veya her ikisini de Görev kısıtlamaları altındaki >>Ayarları'nda devre dışı bırakabilirsiniz. Hem yerleşik hem de Market görevlerini devre dışı bırakırsanız yalnızca Azure DevOps için Node CLI kullanarak yüklediğiniz görevler kullanılabilir.

Market görevlerini devre dışı bırakmak işlem hattı güvenliğinin geliştirilmesine yardımcı olabilir. Çoğu durumda, yerleşik görevleri devre dışı bırakmamalısınız. Daha fazla bilgi için bkz. Kullanılabilir görevleri denetleme.

Özel görevler

Visual Studio Market, Azure Pipelines görev kataloğunu genişletmek için yükleyebileceğiniz birçok uzantı sunar. Özel görevler de oluşturabilirsiniz. Daha fazla bilgi için bkz. Özel işlem hatları görev uzantısı ekleme.

YAML işlem hatlarında görevlere ada göre atıfta bulunursunuz. Özel görev adınız yerleşik bir görev adıyla eşleşiyorsa, işlem hattı yerleşik görevi kullanır. Bu durumu önlemek için, görevi oluştururken atadığınız benzersiz görev GUID'sini kullanarak özel görevinize başvurabilirsiniz. Daha fazla bilgi için bkz. task.json bileşenlerini anlama.

Görev sürümleri

Görevler sürümlenir ve işlem hattınızda kullandığınız görevlerin ana sürümünü belirtmeniz gerekir. Sürümün belirtilmesi, görevin yeni sürümleri yayınlandığında karşılaşılan sorunları önlemeye yardımcı olur.

İşlem hatları, 1.2 ile 1.3 gibi yeni ikincil görev sürümlerini kullanacak şekilde otomatik olarak güncelleştirilir. Küçük görev sürümleri 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.

2.0 gibi yeni bir ana görev sürümü yayınlanırsa, işlem hattınızı yeni ana sürüme el ile değiştirmek üzere düzenleyene kadar işlem hattınız belirttiğiniz ana sürümü kullanmaya devam eder. Derleme günlükleri, yeni ana sürümler kullanılabilir olduğunda uyarılar sağlar. 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, PublishTestResults görevinin 2. sürümünü kullanmak için PublishTestResults@2 belirtin. 'nin ardından @GoTool@0.3.1gibi tam görev sürüm numarasını sağlayarak hangi ikincil sürümün kullanılacağını belirtebilirsiniz.

Görev seçenekleri

YAML işlem hattı task adımları için aşağıdaki özellikler kullanılabilir. Daha fazla bilgi için steps.task tanımına bakın.

Mülkiyet Türü Description
task String İlk özellik olarak gereklidir. Çalıştırılacak görevin adı.
inputs String Ad/değer çiftlerini kullanarak görev için girişler.
condition String Görevin çalıştırıldığı koşullar.
continueOnError Boolean Hata durumunda bile çalışmaya devam edilip edilmeyeceği.
displayName String Görevin insan tarafından kolayca anlaşılacak adı.
enabled Boolean Bu görevin, iş çalıştırıldığında çalıştırılıp çalıştırılmayacağı.
env String Ad/değer çiftleri kullanılarak işlem ortamına eşlenen değişkenler.
name String Adımın kimliği.
retryCountOnTaskFailure String Görev başarısız olursa yeniden deneme sayısı.
target String Bu görevin çalıştırılacağı ortam.
timeoutInMinutes String Görevin otomatik olarak iptal edilmeden önce çalışabileceği en uzun süre.

Koşullar

Görev, tamamlandıktan sonra işlem hattı görevinin devam edip etmeyeceğini belirleyemez, yalnızca succeeded veya failed gibi bir sonuç durumu sağlar. Ardından aşağı akış görevleri ve işleri, çalıştırılıp çalıştırılmayacağını belirlemek için bu duruma göre bir condition ayarlayabilir.

conditions özelliği, bu görevin hangi koşullarda çalıştığını belirtir. Varsayılan olarak, bir işte henüz hiçbir şey başarısız olmadıysa ve hemen önceki adım tamamlandıysa bir adım çalışır.

Önceki bir bağımlılık başarısız olsa veya başka bir sonuca sahip olsa bile adımı çalıştırılacak şekilde ayarlayarak bu varsayılanları geçersiz kılabilir veya özelleştirebilirsiniz. İfadelerden oluşan özel koşullar da tanımlayabilirsiniz.

Not

Koşullar, aynı aracı havuzuna sahip önceki tüm doğrudan ve dolaylı bağımlılıklar için geçerlidir. Farklı aracı havuzlarındaki aşamalar veya işler eşzamanlı olarak çalışır.

Önceki bağımlılık durumuna dayalı koşullar şunlardır:

  • Başarılı: Yalnızca önceki tüm bağımlılıklar başarılı olursa komutunu çalıştırın. YAML'de hiçbir koşul ayarlanmadıysa bu davranış varsayılandır. Bu koşulu uygulamak için belirtin condition: succeeded().
  • Başarılı veya başarısız: Çalıştırma iptal edilmediği sürece önceki bir bağımlılık başarısız olsa bile çalıştırın. Bu koşulu uygulamak için belirtin condition: succeededOrFailed().
  • Her zaman: Önceki bir bağımlılık başarısız olsa bile çalıştırma iptal edilse bile çalıştırın. Bu koşulu uygulamak için belirtin condition: always().
  • Başarısız: Yalnızca önceki bir bağımlılık başarısız olduğunda çalıştırın. Bu koşulu uygulamak için belirtin condition: failed().

Aşağıdaki YAML örneğinde, PublishTestResults@2succeededOrFailed koşulu nedeniyle önceki adım 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()

Hata durumunda devam et

continueOnError özelliği, hatalardan bağımsız olarak görevin çalışmaya devam edip etmeyeceğini ve başarıyı rapor edip etmeyeceğini belirler. olarak ayarlanırsa true, bu özellik göreve bir failed durumu yoksayıp çalışmaya devam etmelerini söyler. İş akışındaki aşağıdaki adımlar ve işler, çalıştırma kararlarını alırken görev sonucunu success olarak kullanır.

Etkinleştirildi

Varsayılan olarak, görev iş her çalıştığında çalışır. Görevi devre dışı bırakmak için enabled’yi false olarak ayarlayabilirsiniz. Görevi geçici olarak devre dışı bırakmak, görevi test amacıyla veya belirli dağıtımlar için işlemden kaldırmak için yararlıdır.

Görev hatasında yeniden deneme sayısı

retryCountOnTaskFailure özelliği, başarısız olursa görevin yeniden denenecek sayısını belirtir. Varsayılan değer sıfır yeniden denemedir.

  • İzin verilen en fazla yeniden deneme sayısı 10'dur.
  • Üstel geri alma stratejisini izleyerek her başarısız denemeden sonra yeniden denemeden önceki bekleme süresi artar. İlk yeniden deneme 1 saniye sonra, ikinci yeniden deneme 4 saniye sonra ve onuncu yeniden deneme 100 saniye sonra gerçekleşir.
  • Görevin yeniden denenmesi idempotentlik sağlamaz. Kısmen dış kaynak oluşturma gibi ilk denemenin yan etkileri yeniden denemelerin başarısız olmasına neden olabilir.
  • Göreve, yeniden deneme sayısına dair herhangi bir bilgi sağlanmamıştır.
  • Görev hatası, görev günlüklerine görevi yeniden denemeden önce başarısız olduğunu belirten bir uyarı ekler.
  • Tüm yeniden deneme girişimleri kullanıcı arabiriminde aynı görev düğümünün parçası olarak gösterilir.

Not

retryCountOnTaskFailure özelliği için aracı sürümü 2.194.0 veya üzeri gerekir. 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 14 Haziran 2025 - Sunucu görevleri için yeniden denemeler.

Target

Görevler, yürütme bağlamında çalışır; bu bağlam ya ajan ana bilgisayarı ya da bir kapsayıcıdır. Bir görev, bir target belirterek bağlamını geçersiz kılabilir. Kullanılabilir seçenekler host aracı ana bilgisayarını ve işlem hattında tanımlanan tüm kapsayıcıları hedeflemektir. Aşağıdaki örnekte SampleTask@1 konak üzerinde çalışır ve AnotherTask@1 bir kapsayıcıda çalışır.

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

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

Süre Aşımı

Zaman aşımı süresi, görev yürütülmeye başladığında başlar ve görevin kuyruğa alındığı veya bir aracı beklediği zamanı kapsamaz.

Not

İşlem hatları, görev seviyesi zaman aşımına ek olarak bir iş seviyesi zaman aşımı belirtebilir. Görev tamamlanmadan önce iş düzeyi zaman aşımı aralığı geçtiğinde, görev 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 Zaman Aşımları'na bakın.

Ortam değişkenleri

Sistem veya kullanıcı tanımlı bilgileri görev işlemiyle eşlemek için ortam değişkenlerini kullanabilirsiniz.

YAML işlem hattı görevi, ortam değişkenlerini temsil eden ad/değer dizelerini listeleyen bir env özellik belirtebilir.

- task: AzureCLI@2
  env:
    ENV_VARIABLE_NAME: value
    ENV_VARIABLE_NAME2: value
  ...

Ortam değişkenlerini ayarlamak için, script adımlarını kullanabilir veya komut satırı, Bash veya PowerShell görevlerinde betikleri kullanabilirsiniz.

Aşağıdaki örnek, ortam değişkenine script değer atayan ve değeri yankılayan bir ENV_VARIABLE_NAME adım çalıştırır.

- script: echo "This is " $ENV_VARIABLE_NAME
  env:
    ENV_VARIABLE_NAME: value
  displayName: 'echo environment variable'

Yukarıdaki betik, girdisine sahip script görevini çalıştırmakla işlevsel olarak aynıdır. Aşağıdaki örnek söz dizimini task kullanır.

- task: Bash@3
  inputs:
    script: echo "This is " $ENV_VARIABLE_NAME
  env:
    ENV_VARIABLE_NAME: value
  displayName: 'echo environment variable'

Derleme aracı yükleyicisi görevleri

Derleme aracı yükleyici görevleri, derleme işlem hattınızın bağımlılıkları yüklemesine ve denetlemesine olanak tanır. Yapı aracı yükleyici görevlerini kullanarak şunları yapabilirsiniz:

  • Bir derleme için, Microsoft tarafından barındırılan aracılar da dahil olmak üzere, bir araç veya çalışma zamanı yükleyin.
  • Uygulamanızı veya kitaplığınızı Node.js gibi bir bağımlılığın birden çok sürümüne karşı doğrulayın.

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

Örnek: Bir uygulamayı birden çok Node.js sürümünde test edip doğrulama

Aşağıdaki örnek, Node.js'nin birden çok sürümünde bir uygulamayı çalıştırmak ve doğrulamak için bir derleme işlem hattı ayarlar.

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

pool:
  vmImage: 'windows-latest'

jobs:
- job: NodeJS
  strategy:
    matrix:
      node14:
        nodeVersion: '14.x'
      node16:
        nodeVersion: '16.x'
    maxParallel: 2
  steps:
    - task: NodeTool@0
      displayName: 'Install Node.js $(nodeVersion)'
      inputs:
        versionSpec: '$(nodeVersion)'
        checkLatest: true

    - script: |
        echo Using Node version $(nodeVersion)
        node --version
      displayName: 'Verify Node Installation'

İşlem hattını kaydedin ve çalıştırın. İş, değişkende nodeVersion belirttiğiniz her Node.js sürümü için bir tane olacak şekilde iki kez çalışır.

Node.js Aracı Yükleyicisi, aracıda değilse Node.js sürümünü indirir. Komut Satırı betiği, yüklü sürümü komut satırına yazar.

Yardım ve destek