Jenis tugas & penggunaan

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Tugas melakukan tindakan dalam alur dan merupakan skrip atau prosedur kemasan yang diabstraksi dengan sekumpulan input. Tugas adalah blok penyusun untuk menentukan otomatisasi dalam alur.

Saat Anda menjalankan pekerjaan, semua tugas dijalankan secara berurutan, satu demi satu. Untuk menjalankan serangkaian tugas yang sama secara paralel pada beberapa agen, atau untuk menjalankan beberapa tugas tanpa menggunakan agen, lihat pekerjaan.

Secara default, semua tugas berjalan dalam konteks yang sama, baik itu di host atau dalam kontainer pekerjaan.

Anda mungkin secara opsional menggunakan target langkah untuk mengontrol konteks untuk tugas individual.

Pelajari selengkapnya tentang cara menentukan properti untuk tugas dengan tugas bawaan.

Saat Anda menjalankan pekerjaan, semua tugas dijalankan secara berurutan, satu demi satu, pada agen. Untuk menjalankan serangkaian tugas yang sama secara paralel pada beberapa agen, atau untuk menjalankan beberapa tugas tanpa menggunakan agen, lihat pekerjaan.

Untuk mempelajari selengkapnya tentang atribut umum yang didukung oleh tugas, lihat Referensi YAML untuk steps.task.

Tugas kustom

Azure DevOps menyertakan tugas bawaan untuk mengaktifkan skenario build dan penyebaran mendasar . Anda juga dapat membuat tugas kustom Anda sendiri.

Selain itu, Visual Studio Marketplace menawarkan banyak ekstensi; yang masing-masing, saat diinstal ke langganan atau koleksi Anda, memperluas katalog tugas dengan satu atau beberapa tugas. Anda juga dapat menulis ekstensi kustom Anda sendiri untuk menambahkan tugas ke Azure Pipelines.

Di alur YAML, Anda merujuk ke tugas berdasarkan nama. Jika nama cocok dengan tugas dalam kotak dan tugas kustom, tugas dalam kotak diutamakan. Anda dapat menggunakan GUID tugas atau nama yang sepenuhnya memenuhi syarat untuk tugas kustom untuk menghindari risiko ini:

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

Untuk menemukan myPublisherId dan myExtensionId, pilih Dapatkan tugas di marketplace. Nilai setelah itemName dalam string URL Anda adalah myPublisherId dan myExtensionId. Anda juga dapat menemukan nama yang sepenuhnya memenuhi syarat dengan menambahkan tugas ke alur Rilis dan memilih Tampilkan YAML saat mengedit tugas.

Versi tugas

Tugas diberi versi, dan Anda harus menentukan versi utama tugas yang digunakan dalam alur Anda. Ini dapat membantu mencegah masalah saat versi baru tugas dirilis. Tugas biasanya kompatibel mundur, tetapi dalam beberapa skenario Anda mungkin mengalami kesalahan yang tidak dapat diprediksi ketika tugas diperbarui secara otomatis.

Saat versi minor baru dirilis (misalnya, 1.2 hingga 1.3), alur Anda secara otomatis menggunakan versi baru. Namun, jika versi utama baru dirilis (misalnya 2.0), alur Anda terus menggunakan versi utama yang Anda tentukan sampai Anda mengedit alur dan secara manual berubah ke versi utama baru. Log akan menyertakan pemberitahuan bahwa versi utama baru tersedia.

Anda dapat mengatur versi minor mana yang akan digunakan dengan menentukan nomor versi lengkap tugas setelah @ tanda (misalnya: GoTool@0.3.1). Anda hanya bisa menggunakan versi tugas yang ada untuk organisasi Anda.

Di YAML, Anda menentukan versi utama menggunakan @ dalam nama tugas. Misalnya, untuk menyematkan PublishTestResults ke versi 2 tugas:

steps:
- task: PublishTestResults@2

Alur YAML tidak tersedia di TFS.

Opsi kontrol tugas

Setiap tugas menawarkan beberapa Opsi Kontrol.

Opsi kontrol tersedia sebagai kunci di bagian .task

- 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.

Opsi kontrol tersedia sebagai kunci di bagian .task

- 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.

Opsi kontrol tersedia sebagai kunci di bagian .task

- 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.

Catatan

Tugas atau pekerjaan tertentu tidak dapat memutuskan secara sepihak apakah pekerjaan/tahap berlanjut. Apa yang dapat dilakukan adalah menawarkan status berhasil atau gagal, dan tugas/pekerjaan hilir masing-masing memiliki komputasi kondisi yang memungkinkan mereka memutuskan apakah akan berjalan atau tidak. Kondisi default yang secara efektif "dijalankan jika kita dalam keadaan berhasil".

Lanjutkan pada kesalahan mengubah ini dengan cara yang halus. Ini secara efektif "mengelabui" semua langkah/pekerjaan hilir untuk memperlakukan hasil apa pun sebagai "keberhasilan" untuk tujuan membuat keputusan itu. Atau untuk meletakkannya dengan cara lain, dikatakan "jangan mempertimbangkan kegagalan tugas ini ketika Anda membuat keputusan tentang kondisi struktur yang berisi".

Periode batas waktu dimulai ketika tugas mulai berjalan. Ini tidak termasuk waktu tugas diantrekan atau sedang menunggu agen.

Catatan

Alur mungkin memiliki batas waktu tingkat pekerjaan yang ditentukan selain batas waktu tingkat tugas. Jika interval batas waktu tingkat pekerjaan berlalu sebelum langkah Anda selesai, pekerjaan yang sedang berjalan dihentikan, bahkan jika langkah dikonfigurasi dengan interval batas waktu yang lebih lama. Untuk informasi selengkapnya, lihat Batas Waktu.

Dalam YAML ini, PublishTestResults@2 berjalan bahkan jika langkah sebelumnya gagal karena kondisi succeededOrFailed().

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

Kondisi

  • Hanya ketika semua dependensi langsung dan tidak langsung sebelumnya dengan kumpulan agen yang sama telah berhasil. Jika Anda memiliki kumpulan agen yang berbeda, tahap atau pekerjaan tersebut akan berjalan bersamaan. Ini adalah default jika tidak ada kondisi yang diatur dalam YAML.

  • Bahkan jika dependensi sebelumnya telah gagal, kecuali jika eksekusi dibatalkan. Gunakan succeededOrFailed() dalam YAML untuk kondisi ini.

  • Bahkan jika dependensi sebelumnya telah gagal, bahkan jika eksekusi dibatalkan. Gunakan always() dalam YAML untuk kondisi ini.

  • Hanya setelah dependensi sebelumnya telah gagal. Gunakan failed() dalam YAML untuk kondisi ini.

Target langkah

Tugas berjalan dalam konteks eksekusi, yang merupakan host agen atau kontainer. Langkah individual dapat mengambil alih konteksnya dengan menentukan target. Opsi yang tersedia adalah kata host untuk menargetkan host agen ditambah kontainer apa pun yang ditentukan dalam alur. Contohnya:

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

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

Di sini, SampleTask berjalan pada host dan AnotherTask berjalan dalam kontainer.

Jumlah percobaan ulang jika tugas gagal

Gunakan retryCountOnTaskFailure untuk menentukan jumlah percobaan ulang jika tugas gagal. Defaultnya adalah nol.

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

Catatan

  • Memerlukan agen versi 2.194.0 atau yang lebih baru. Tidak didukung untuk tugas tanpa agen.
  • Tugas yang gagal mencoba kembali dalam hitung detik. Waktu tunggu antara setiap percobaan ulang meningkat setelah setiap upaya yang gagal.
  • Tidak ada asumsi tentang idempotensi tugas. Jika tugas memiliki efek samping (misalnya, jika membuat sumber daya eksternal sebagian), maka mungkin gagal untuk kedua kalinya dijalankan.
  • Tidak ada informasi tentang jumlah coba lagi yang tersedia untuk tugas tersebut.
  • Peringatan ditambahkan ke log tugas yang menunjukkan bahwa telah gagal sebelum dicoba kembali.
  • Semua upaya untuk mencoba kembali tugas ditampilkan di UI sebagai bagian dari simpul tugas yang sama.

Alur YAML tidak tersedia di TFS.

Variabel lingkungan

Setiap tugas memiliki env properti yang merupakan daftar pasangan string yang mewakili variabel lingkungan yang dipetakan ke dalam proses tugas.

task: AzureCLI@2
displayName: Azure CLI
inputs: # Specific to each task
env:
  ENV_VARIABLE_NAME: value
  ENV_VARIABLE_NAME2: value
  ...

Contoh berikut menjalankan script langkah, yang merupakan pintasan untuk tugas Baris perintah, diikuti oleh sintaks tugas yang setara. Contoh ini menetapkan nilai ke AZURE_DEVOPS_EXT_PAT variabel lingkungan, yang digunakan untuk mengautentikasi dengan Azure DevOps CLI.

# 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'

Alat penginstal build (Azure Pipelines)

Alat penginstal memungkinkan alur build Anda menginstal dan mengontrol dependensi Anda. Secara khusus, Anda dapat:

  • Instal alat atau runtime dengan cepat (bahkan pada agen yang dihosting Microsoft) tepat pada waktunya untuk build CI Anda.

  • Validasi aplikasi atau pustaka Anda terhadap beberapa versi dependensi seperti Node.js.

Misalnya, Anda dapat menyiapkan alur build untuk menjalankan dan memvalidasi aplikasi Anda untuk beberapa versi Node.js.

Contoh: Menguji dan memvalidasi aplikasi Anda di beberapa versi Node.js

Buat file azure-pipelines.yml di direktori dasar proyek Anda dengan konten berikut.

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

Buat alur build baru dan jalankan. Amati bagaimana build dijalankan. Alat Penginstal Node.js mengunduh versi Node.js jika belum ada di agen. Skrip Baris Perintah mencatat lokasi versi Node.js pada disk.

Alur YAML tidak tersedia di TFS.

Tugas alat penginstal

Untuk daftar tugas alat penginstal kami, lihat Tugas alat penginstal.

Menonaktifkan tugas dalam kotak dan Marketplace

Pada halaman pengaturan organisasi, Anda dapat menonaktifkan tugas Marketplace, tugas dalam kotak, atau keduanya. Menonaktifkan tugas Marketplace dapat membantu meningkatkan keamanan alur Anda. Jika Anda menonaktifkan tugas dalam kotak dan Marketplace, hanya tugas yang Anda instal tfx yang tersedia.

Bantuan dan dukungan