Memecahkan masalah pipeline
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Jika eksekusi alur gagal diselesaikan, Anda dapat menggunakan informasi diagnostik dan log yang disediakan oleh halaman ringkasan eksekusi alur untuk membantu memecahkan masalah.
Menampilkan log
Pilih pesan kesalahan untuk melihat log untuk tugas yang gagal diselesaikan.
Halaman log ditampilkan, dengan kesalahan dipilih. Dalam contoh ini, ada kesalahan dalam cmd-line
tugas, di mana echo
perintah dimasukkan sebagai ech
.
Anda dapat melihat log mentah untuk tugas dengan memilih Tampilkan log mentah, dan Anda dapat mencari log menggunakan Temukan.
Pindai log tugas yang gagal untuk informasi kesalahan dan petunjuk mengapa tugas gagal. Secara default, log nonverbose dihasilkan oleh eksekusi alur. Jika log default tidak menunjukkan penyebab masalah, Anda bisa mendapatkan informasi lebih lanjut dengan mengonfigurasi log verbose.
Halaman analisis kesalahan
Bantuan pemecahan masalah tersedia menggunakan halaman Analisis kesalahan. Gerakkan mouse di atas baris informasi kesalahan dan pilih ikon Lihat analisis .
Pilih Tampilkan agen untuk agen yang dihost sendiri (atau Tentang gambar agen yang dihosting untuk agen yang dihosting Microsoft) untuk melihat informasi selengkapnya tentang agen yang digunakan untuk menjalankan alur, dan Menampilkan log untuk melihat log eksekusi alur.
Pilih nama tugas di bawah Detail run-time untuk melihat informasi tentang tugas.
Dalam contoh ini, Anda dapat melihat bahwa ada kesalahan di Value
dari Script
. Pilih Tentang tugas ini untuk menampilkan dokumentasi tugas.
Jika masalah tidak terlihat dari halaman ringkasan eksekusi alur atau menelusuri log, periksa bagian Masalah umum berikut, dan lihat Meninjau log untuk mendiagnosis masalah alur untuk informasi tentang mengunduh log lengkap yang menyertakan informasi diagnostik tambahan.
Masalah umum
- Batas waktu untuk pekerjaan
- Masalah ketika mengunduh kode
- Alur saya gagal pada langkah baris perintah seperti MSBUILD
- Kesalahan dalam penggunaan file atau folder
- Kegagalan MSBuild terputus atau tidak konsisten
- Proses yang berhenti merespons
- Akhiran baris bagi beberapa platform
- Variabel yang memiliki ' (tanda kutip tunggal) ditambahkan
- Masalah yang terkait koneksi
- Alur berhenti mendengar dari agen
Wawasan tugas untuk eksekusi alur yang gagal
Azure DevOps menyediakan pengaturan Wawasan Tugas untuk Eksekusi Alur Gagal, yang saat diaktifkan, menyediakan pemberitahuan pop-up kegagalan build dengan tautan untuk melihat laporan.
Untuk mengonfigurasi pengaturan ini, navigasikan ke fitur Pratinjau, temukan Wawasan Tugas untuk Eksekusi Alur Gagal, dan pilih pengaturan yang diinginkan.
Batas waktu untuk pekerjaan
Alur dapat berjalan untuk waktu yang lama dan kemudian gagal karena waktu habis pekerjaan. Batas waktu pekerjaan dengan cermat tergantung pada agen yang digunakan. Agen gratis yang dihost Microsoft memiliki batas waktu maksimum 60 menit per pekerjaan untuk repositori privat dan 360 menit untuk repositori publik. Untuk meningkatkan batas waktu maksimum untuk pekerjaan, Anda dapat memilih salah satu hal berikut.
- Beli agen yang dihost Microsoft yang akan memberi Anda waktu 360 menit untuk semua pekerjaan, terlepas dari repositori yang digunakan
- Gunakan agen yang dihost sendiri untuk mengesampingkan masalah batas waktu yang disebabkan oleh agen tersebut
Pelajari selengkapnya tentang batas waktu pekerjaan.
Catatan
Jika pekerjaan agen yang dihosting Microsoft Anda kehabisan waktu, pastikan Anda belum menentukan batas waktu alur yang kurang dari batas waktu maksimum untuk pekerjaan. Untuk memeriksa, lihat Batas waktu.
Masalah ketika mengunduh kode
Alur saya gagal pada langkah checkout
Jika Anda menggunakan checkout
langkah pada repositori Azure Repos Git di organisasi Anda yang berada dalam proyek yang berbeda dari alur Anda, pastikan bahwa batasi cakupan otorisasi pekerjaan ke pengaturan proyek saat ini dinonaktifkan, atau ikuti langkah-langkah dalam Identitas build tercakup untuk memastikan bahwa alur Anda memiliki akses ke repositori.
Ketika alur Anda tidak dapat mengakses repositori karena cakupan otorisasi pekerjaan yang terbatas, Anda akan menerima kesalahan Git fetch failed with exit code 128
dan log Anda akan berisi entri yang mirip dengan Remote: TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting.
Jika alur Anda gagal segera dengan Could not find a project that corresponds with the repository
, pastikan bahwa nama proyek dan repositori Anda benar dalam checkout
langkah atau deklarasi sumber daya repositori.
Masalah Kontrol Versi Team Foundation (TFVC)
- Dapatkan sumber yang tidak mengunduh beberapa file
- Mendapatkan sumber melalui Proksi Team Foundation
Dapatkan sumber yang tidak mengunduh beberapa file
Ini mungkin ditandai dengan pesan dalam log "Semua file terbaru" dari tf get
perintah . Harap pastikan bahwa identitas layanan bawaan memiliki izin untuk mengunduh sumber. Identitas Project Collection Build Service atau Project Build Service akan memerlukan izin untuk mengunduh sumber, tergantung pada cakupan otorisasi yang dipilih pada tab Umum dari alur build. Di antarmuka pengguna web kontrol versi, Anda dapat menelusuri file proyek di tingkat hierarki folder apa pun dan memeriksa pengaturan keamanan.
Mendapatkan sumber melalui Proksi Team Foundation
Cara term mudah untuk mengonfigurasi agen untuk mendapatkan sumber melalui Proksi Team Foundation diatur variabel TFSPROXY
lingkungan yang menunjuk ke server proksi TFVC untuk agen yang dijalankan sebagai pengguna.
Windows:
set TFSPROXY=http://tfvcproxy:8081
setx TFSPROXY=http://tfvcproxy:8081 // If the agent service is running as NETWORKSERVICE or any service account you can't easily set user level environment variable
macOS/Linux:
export TFSPROXY=http://tfvcproxy:8081
Alur saya gagal pada langkah baris perintah seperti MSBUILD
Sangat membantu untuk mempersempit apakah kegagalan build atau rilis adalah hasil dari masalah produk Azure Pipelines/TFS (agen atau tugas). Kegagalan build dan rilis mungkin juga dihasilkan dari perintah eksternal.
Periksa log untuk baris perintah yang tepat yang dijalankan oleh tugas yang gagal. Mencoba menjalankan perintah secara lokal dari baris perintah mungkin mereprodurasi masalah. Sangat membantu untuk menjalankan perintah secara lokal dari komputer Anda sendiri, dan/atau masuk ke komputer dan menjalankan perintah sebagai akun layanan.
Misalnya, apakah masalah terjadi selama bagian MSBuild dari alur build Anda (misalnya, apakah Anda menggunakan tugas MSBuild atau Visual Studio Build )? Jika demikian, coba jalankan perintah MSBuild yang sama pada komputer lokal menggunakan argumen yang sama. Jika Anda dapat mereproduksi masalah pada komputer lokal, maka langkah Anda berikutnya adalah menyelidiki masalah MSBuild .
Tata letak file
Lokasi alat, pustaka, header, dan hal lain yang diperlukan untuk build mungkin berbeda pada agen yang dihosting daripada dari komputer lokal Anda. Jika build gagal karena tidak dapat menemukan salah satu file ini, Anda dapat menggunakan skrip di bawah ini untuk memeriksa tata letak pada agen. Ini mungkin membantu Anda melacak file yang hilang.
Buat alur YAML baru di lokasi sementara (misalnya repositori baru yang dibuat untuk tujuan pemecahan masalah).
Seperti yang ditulis, skrip mencari direktori di jalur Anda.
Anda dapat mengedit SEARCH_PATH=
baris secara opsional untuk mencari tempat lain.
# Script for Linux and macOS
pool: { vmImage: ubuntu-latest } # or whatever pool you use
steps:
- checkout: none
- bash: |
SEARCH_PATH=$PATH # or any colon-delimited list of paths
IFS=':' read -r -a PathDirs <<< "$SEARCH_PATH"
echo "##[debug] Found directories"
for element in "${PathDirs[@]}"; do
echo "$element"
done;
echo;
echo;
echo "##[debug] Found files"
for element in "${PathDirs[@]}"; do
find "$element" -type f
done
# Script for Windows
pool: { vmImage: windows-2019 } # or whatever pool you use
steps:
- checkout: none
- powershell: |
$SEARCH_PATH=$Env:Path
Write-Host "##[debug] Found directories"
ForEach ($Dir in $SEARCH_PATH -split ";") {
Write-Host "$Dir"
}
Write-Host ""
Write-Host ""
Write-Host "##[debug] Found files"
ForEach ($Dir in $SEARCH_PATH -split ";") {
Get-ChildItem $Dir -File -ErrorAction Continue | ForEach-Object -Process {
Write-Host $_.FullName
}
}
Perbedaan antara prompt perintah lokal dan agen
Perlu diingat, beberapa perbedaan berlaku saat menjalankan perintah pada komputer lokal dan ketika build atau rilis berjalan pada agen. Jika agen dikonfigurasi untuk berjalan sebagai layanan di Linux, macOS, atau Windows, agen tidak berjalan dalam sesi masuk interaktif. Tanpa sesi masuk interaktif, interaksi UI dan batasan lainnya ada.
Kesalahan dalam penggunaan file atau folder
File or folder in use
kesalahan sering ditunjukkan oleh pesan kesalahan seperti:
Access to the path [...] is denied.
The process cannot access the file [...] because it is being used by another process.
Access is denied.
Can't move [...] to [...]
Langkah-Langkah Pemecahan Masalah:
- Mendeteksi file dan folder yang sedang digunakan
- Pengecualian anti-virus
- MSBuild dan /nodeReuse:false
- MSBuild dan /maxcpucount:[n]
Mendeteksi file dan folder yang sedang digunakan
Di Windows, alat seperti Monitor Proses bisa untuk mengambil jejak peristiwa file di bawah direktori tertentu. Atau, untuk rekam jepret tepat waktu, alat seperti Process Explorer atau Handle dapat digunakan.
Pengecualian anti-virus
Perangkat lunak anti-virus yang memindai file Anda dapat menyebabkan file atau folder dalam kesalahan penggunaan selama build atau rilis. Menambahkan pengecualian anti-virus untuk direktori agen Anda dan mengonfigurasi "folder kerja" dapat membantu mengidentifikasi perangkat lunak anti-virus sebagai proses gangguan.
MSBuild dan /nodeReuse:false
Jika Anda memanggil MSBuild selama build Anda, pastikan untuk meneruskan argumen /nodeReuse:false
(bentuk /nr:false
pendek ). Jika tidak, proses MSBuild akan tetap berjalan setelah build selesai. Proses tetap untuk beberapa waktu untuk mengantisipasi potensi build berikutnya.
Fitur MSBuild ini dapat mengganggu upaya untuk menghapus atau memindahkan direktori - karena konflik dengan direktori kerja proses MSBuild.
Tugas MSBuild dan Visual Studio Build sudah ditambahkan /nr:false
ke argumen yang diteruskan ke MSBuild. Namun, jika Anda memanggil MSBuild dari skrip Anda sendiri, maka Anda harus menentukan argumen.
MSBuild dan /maxcpucount:[n]
Secara default, tugas build seperti MSBuild dan Visual Studio Build menjalankan MSBuild dengan sakelar /m
. Dalam beberapa kasus, ini dapat menyebabkan masalah seperti beberapa masalah akses file proses.
Coba tambahkan /m:1
argumen ke tugas build Anda untuk memaksa MSBuild menjalankan hanya satu proses sekaligus.
Masalah penggunaan file dapat mengakibatkan pemanfaatan fitur proses bersamaan MSBuild. Tidak menentukan argumen /maxcpucount:[n]
(bentuk /m:[n]
pendek ) menginstruksikan MSBuild untuk menggunakan satu proses saja. Jika Anda menggunakan tugas MSBuild atau Visual Studio Build, Anda mungkin perlu menentukan "/m:1" untuk mengambil alih argumen "/m" yang ditambahkan secara default.
Kegagalan MSBuild terputus atau tidak konsisten
Jika Anda mengalami kegagalan MSBuild yang terputus-putus atau tidak konsisten, coba instruksikan MSBuild untuk menggunakan satu proses saja. Kesalahan terputus-terputus atau tidak konsisten mungkin menunjukkan bahwa konfigurasi target Anda tidak kompatibel dengan fitur proses bersamaan MSBuild. Lihat MSBuild dan /maxcpucount:[n].
Proses yang berhenti merespons
Proses berhenti merespons penyebab dan langkah-langkah pemecahan masalah:
Menunggu Input
Proses yang berhenti merespons mungkin menunjukkan bahwa proses sedang menunggu input.
Menjalankan agen dari baris perintah sesi interaktif yang masuk mungkin membantu mengidentifikasi apakah proses meminta dialog untuk input.
Menjalankan agen sebagai layanan mungkin membantu menghilangkan program agar tidak meminta input. Misalnya di .NET, program mungkin mengandalkan Boolean System.Environment.UserInteractive untuk menentukan apakah akan meminta. Ketika agen berjalan sebagai layanan Windows, nilainya adalah false.
Proses pencadangan
Menganalisis cadangan proses dapat membantu mengidentifikasi proses yang ditunggu oleh kebuntuan.
Proyek WiX
Membangun proyek WiX ketika pencatat MSBuild kustom diaktifkan, dapat menyebabkan Kebuntuan WiX menunggu aliran output. Menambahkan argumen /p:RunWixToolsOutOfProc=true
MSBuild tambahan akan mengatasi masalah ini.
Akhiran baris bagi beberapa platform
Saat Anda menjalankan alur di beberapa platform, Anda terkadang dapat mengalami masalah dengan akhiran baris yang berbeda. Secara historis, Linux dan macOS menggunakan karakter linefeed (LF) sementara Windows menggunakan pengembalian pengangkutan ditambah linefeed (CRLF). Git mencoba mengkompensasi perbedaan dengan secara otomatis membuat baris berakhiran LF di repositori tetapi CRLF di direktori kerja di Windows.
Sebagian besar alat Windows tidak masalah dengan akhiran khusus LF, dan perilaku otomatis ini dapat menyebabkan lebih banyak masalah daripada yang dipecahkan.
Jika Anda mengalami masalah berdasarkan akhiran baris, kami sarankan Anda mengonfigurasi Git untuk lebih memilih LF di mana saja.
Untuk melakukan ini, tambahkan .gitattributes
file ke akar repositori Anda.
Dalam file tersebut, tambahkan baris berikut:
* text eol=lf
Variabel yang memiliki ' (tanda kutip tunggal) ditambahkan
Jika alur Anda menyertakan skrip Bash yang mengatur variabel menggunakan ##vso
perintah , Anda mungkin melihat tambahan '
yang ditambahkan ke nilai variabel yang Anda tetapkan.
Ini terjadi karena interaksi dengan set -x
.
Solusinya adalah menonaktifkan set -x
sementara sebelum mengatur variabel.
Sintaks Bash untuk melakukan itu adalah set +x
.
set +x
echo ##vso[task.setvariable variable=MY_VAR]my_value
set -x
Mengapa hal ini terjadi?
Banyak skrip Bash menyertakan set -x
perintah untuk membantu penelusuran kesalahan.
Bash akan melacak dengan tepat perintah apa yang dijalankan dan menggemakannya ke stdout.
Ini akan menyebabkan agen melihat ##vso
perintah dua kali, dan yang kedua kalinya, Bash akan menambahkan karakter ke '
akhir.
Misalnya, pertimbangkan alur ini:
steps:
- bash: |
set -x
echo ##vso[task.setvariable variable=MY_VAR]my_value
Pada stdout, agen akan melihat dua baris:
##vso[task.setvariable variable=MY_VAR]my_value
+ echo '##vso[task.setvariable variable=MY_VAR]my_value'
Ketika agen melihat baris pertama, MY_VAR
akan diatur ke nilai yang benar, "my_value".
Namun, ketika melihat baris kedua, agen akan memproses semuanya hingga akhir baris.
MY_VAR
akan diatur ke "my_value'".
Pustaka tidak diinstal untuk aplikasi Python saat skrip dijalankan
Ketika aplikasi Python disebarkan, dalam beberapa kasus, alur CI/CD berjalan dan kode berhasil disebarkan, tetapi file requirements.txt yang bertanggung jawab untuk menginstal semua pustaka dependensi tidak dijalankan.
Untuk menginstal dependensi, gunakan skrip pasca-penyebaran dalam tugas penyebaran App Service. Contoh berikut menunjukkan perintah yang harus Anda gunakan dalam skrip pasca-penyebaran. Anda dapat memperbarui skrip untuk skenario Anda.
D:\home\python364x64\python.exe -m pip install -r requirements.txt
Masalah yang terkait koneksi
Untuk memecahkan masalah yang terkait dengan koneksi layanan, lihat Pemecahan masalah koneksi layanan.
Alur berhenti mendengar dari agen
Jika alur Anda gagal dengan pesan seperti We stopped hearing from agent <agent name>. Verify the agent machine is running and has a healthy network connection.
, periksa pemanfaatan sumber daya agen untuk melihat apakah mesin agen kehabisan sumber daya. Dimulai dengan Sprint 228, log Azure Pipelines berisi metrik pemanfaatan sumber daya untuk setiap langkah.
Saat menggunakan Azure DevOps Services, Anda dapat melihat pemanfaatan sumber daya di log, termasuk penggunaan disk, penggunaan memori, dan pemanfaatan CPU, dengan mengaktifkan log verbose. Ketika alur selesai, cari log untuk Agent environment resources
entri untuk setiap langkah.
2024-02-28T17:41:15.1315148Z ##[debug]Agent environment resources - Disk: D:\ Available 12342.00 MB out of 14333.00 MB, Memory: Used 1907.00 MB out of 7167.00 MB, CPU: Usage 17.23%
Untuk informasi tentang menangkap log pemanfaatan sumber daya tambahan, lihat Menangkap detail pemanfaatan sumber daya.
Mengaktifkan Storage Explorer untuk menyebarkan konten statis seperti .css dan .js ke situs web statis dari Azure DevOps melalui Azure Pipelines
Dalam skenario ini, Anda dapat menggunakan tugas Penyalinan File Azure untuk mengunggah konten ke situs web. Anda dapat menggunakan salah satu alat yang dijelaskan dalam Mengunggah konten untuk mengunggah konten ke kontainer web.
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk