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.

Cuplikan layar halaman ringkasan eksekusi alur.

Menampilkan log

Pilih pesan kesalahan untuk melihat log untuk tugas yang gagal diselesaikan.

Cuplikan layar pesan kesalahan tugas di halaman ringkasan eksekusi alur.

Halaman log ditampilkan, dengan kesalahan dipilih. Dalam contoh ini, ada kesalahan dalam cmd-line tugas, di mana echo perintah dimasukkan sebagai ech.

Cuplikan layar log diagnostik untuk eksekusi alur.

Anda dapat melihat log mentah untuk tugas dengan memilih Tampilkan log mentah, dan Anda dapat mencari log menggunakan Temukan.

Cuplikan layar opsi tampilan log di Azure DevOps.

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 .

Cuplikan layar ikon analisis tampilan pada halaman ringkasan eksekusi alur.

Cuplikan layar ikon analisis tampilan untuk Azure DevOps Server.

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.

Cuplikan layar halaman analisis kesalahan di portal Azure DevOps.

Pilih nama tugas di bawah Detail run-time untuk melihat informasi tentang tugas.

Cuplikan layar detail tugas dari analisis kesalahan.

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

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.

Cuplikan layar metrik wawasan tugas.

Untuk mengonfigurasi pengaturan ini, navigasikan ke fitur Pratinjau, temukan Wawasan Tugas untuk Eksekusi Alur Gagal, dan pilih pengaturan yang diinginkan.

Cuplikan layar wawasan tugas untuk pengaturan eksekusi alur yang gagal.

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

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

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:falsependek ). 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

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