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.
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 berhasil. Jika Anda memiliki kumpulan agen yang berbeda, tahap atau pekerjaan tersebut berjalan bersamaan. Kondisi ini adalah default jika tidak ada kondisi yang diatur dalam YAML.
Bahkan jika dependensi sebelumnya gagal, kecuali eksekusi dibatalkan. Gunakan
succeededOrFailed()
dalam YAML untuk kondisi ini.Bahkan jika dependensi sebelumnya gagal, dan bahkan jika eksekusi dibatalkan. Gunakan
always()
dalam YAML untuk kondisi ini.Hanya ketika dependensi sebelumnya 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 percobaan ulang nol. Untuk informasi selengkapnya tentang properti tugas, lihat steps.task di Skema YAML.
- task: <name of task>
retryCountOnTaskFailure: <max number of retries>
...
Catatan
- Memerlukan agen versi 2.194.0 atau yang lebih baru. Di Azure DevOps Server 2022, percobaan ulang tidak didukung untuk tugas tanpa agen. Untuk informasi selengkapnya, lihat Pembaruan layanan Azure DevOps 16 November 2021 - Percobaan ulang otomatis untuk tugas, dan pembaruan layanan Azure DevOps 14 Juni 2025 - Coba lagi untuk tugas server.
- Waktu tunggu antara setiap percobaan ulang meningkat setelah setiap upaya yang gagal. Percobaan ulang pertama terjadi dalam hitung detik.
- 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'
- task: Bash@3
inputs:
targetType: # specific to each task
env:
ENV_VARIABLE_NAME: value
ENV_VARIABLE_NAME2: value
...
Contoh berikut menjalankan script
langkah, yang merupakan pintasan untuk Bash@3, diikuti oleh sintaks tugas yang setara. Contoh ini menetapkan nilai ke ENV_VARIABLE_NAME
variabel lingkungan dan menggemakan nilai.
# 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'
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.
Artikel terkait
Bantuan dan dukungan
- Jelajahi tips pemecahan masalah.
- Dapatkan saran tentang Stack Overflow.
- Posting pertanyaan Anda, cari jawaban, atau sarankan fitur di Komunitas Pengembang Azure DevOps.
- Dapatkan dukungan untuk Azure DevOps.