Rumah >pembangunan bahagian belakang >tutorial php >Memperkenalkan Jenkins: Ujian Automatik dengan Pipelines
mata teras
Katakan untuk menguji permohonan, langkah -langkah berikut diperlukan:
composer install
php -l
Jika mana -mana langkah ini gagal, perisian harus dianggap tidak sesuai untuk penggunaan sehingga ralat diselesaikan. Memandangkan perisian menjadi lebih kompleks dan bilangan ujian meningkat dari masa ke masa, ia boleh mengambil masa beberapa minit untuk menjalankan suite ujian penuh, yang melambatkan pemaju dan, pada gilirannya, melambatkan proses pelepasan.
Untuk mengatasi masalah ini, membina pelayan boleh diperkenalkan dalam aliran kerja pembangunan. Pelayan Build menjalankan sekeping perisian yang membolehkan anda menjalankan beberapa langkah berulang kali, dan jika salah satu daripada mereka gagal, pelayan Build dapat memberitahu anda tentang masalah tersebut. Sekiranya anda terlibat dalam projek sumber terbuka, anda mungkin melihat aplikasi praktikal untuk pelayan bangunan seperti Travisci atau CircleCi. Sebagai contoh, setiap permintaan tarik untuk projek Laravel diuji oleh Travisci untuk memastikan bahawa perubahan tidak memecahkan sebarang ujian, dan Styleci kemudian memastikan bahawa perubahan kod sepadan dengan gaya kod projek.
Pipeline adalah satu set langkah -langkah yang disesuaikan sepenuhnya yang boleh dijalankan secara berurutan untuk menguji dan membina kod. Paip ditulis dalam bahasa skrip groovy dan ia mempunyai sintaks yang sangat mudah dan mudah dimulakan. Sebagai contoh, jika anda ingin menerangkan langkah ujian yang diterangkan sebelum ini sebagai saluran paip, ia mungkin kelihatan seperti ini:
Kenyataan
<code class="language-groovy">node { stage("composer_install") { sh 'composer install' } stage("php_lint") { sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l' } stage("phpunit") { sh 'vendor/bin/phpunit' } stage("codeception") { sh 'vendor/bin/codecept run' } }</code>
memberitahu Jenkins untuk memberikan nod binaan berasingan (Jenkins boleh dijalankan dalam mod tunggal-pelayan atau tetapan multi-nod). node
Terdapat pelbagai peringkat di blok, setiap peringkat melakukan operasi tertentu. Jenkins akan menjalankan setiap peringkat pada gilirannya, dan jika mana -mana peringkat gagal, seluruh binaan akan gagal dan Jenkins akan berhenti melaksanakan. node
Pasang Jenkins
Langkah pertama ialah memasang Laravel Homestead - Berikut adalah panduan yang berguna. Anda hanya perlu memulakan dan menjalankan mesin maya, kami tidak perlu mengkonfigurasi mana -mana tapak dalam fail
. homestead.yaml
untuk log masuk ke dalamnya. vagrant ssh
Homestead datang dengan semua kebergantungan yang kita perlukan, iaitu Git, PHP, dan komposer, jadi kita hanya perlu memasang Jenkins sendiri. Berikutan panduan pakej Jenkins Debian, kita perlu melaksanakan langkah -langkah berikut.
run
Seterusnya, senarai sumber pakej perlu dikemas kini supaya kebolehan mengetahui tentang repositori pakej Jenkins. Jalankan wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
.
Akhirnya, kita memerlukan kebolehan untuk mengemas kini cache pakej yang tersedia dan kemudian pasang Jenkins: echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee -a /etc/apt/sources.list
<code class="language-groovy">node { stage("composer_install") { sh 'composer install' } stage("php_lint") { sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l' } stage("phpunit") { sh 'vendor/bin/phpunit' } stage("codeception") { sh 'vendor/bin/codecept run' } }</code>
Memasang Jenkins mengambil masa kira -kira lima minit, kerana ia juga mempunyai banyak kebergantungan yang perlu dipasang.
Selepas memasang Jenkins, buka http://192.168.10.10:8080
(atau URL hos maya yang anda konfigurasi, contohnya homestead.app
) dalam penyemak imbas anda dan anda harus melihat halaman bertajuk "Unlock Jenkins".
, dan nombor rawak dan tali abjad akan dicetak ke konsol. Salin dan tampal rentetan ke dalam medan teks dalam penyemak imbas dan tekan Teruskan. sudo cat /var/lib/jenkins/secrets/initialAdminPassword
anda akan melihat dua pilihan - pilih "Pasang plugin yang dicadangkan" dan tunggu beberapa minit sehingga plugin dimuat turun dan dipasang.
Pada skrin seterusnya, masukkan butiran pengguna pentadbir dan tekan "Simpan dan Selesai".
Buat pekerjaan pertama
Setelah menubuhkan Jenkins, kami akan membuat pekerjaan binaan baru yang akan melakukan perkara berikut:
laravel/framework
, pilih "Pipeline", dan tekan OK.
laravel
<code class="language-bash">sudo apt-get update && sudo apt-get install jenkins</code>
Paparan fasa akan dikemas kini apabila setiap fasa bermula dan berakhir ketika kita menentukan dalam skrip saluran paip.
Jika anda mengklik pada panggung, lapisan akan muncul dengan output log untuk peringkat itu, yang sangat berguna untuk debugging. Sebagai alternatif, anda boleh mengklik kerja di menu di sebelah kiri dan klik Konsol.
Semua pekerjaan Jenkins mempunyai ruang kerja mereka sendiri, yang merupakan zon di mana anda boleh membuat sebarang fail sementara yang mungkin anda perlukan di zon binaan. Lokasi ruang kerja untuk pekerjaan ini boleh didapati di /var/lib/jenkins/workspace/laravel
. Secara lalai, Jenkins tidak membersihkan ruang kerja ini untuk setiap binaan. Jika anda perlu melakukan ini, anda boleh menambah fasa ke permulaan skrip saluran paip seperti berikut:
<code class="language-groovy">node { stage("composer_install") { sh 'composer install' } stage("php_lint") { sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l' } stage("phpunit") { sh 'vendor/bin/phpunit' } stage("codeception") { sh 'vendor/bin/codecept run' } }</code>
Untuk pekerjaan pertama kami, kami menyunting skrip saluran paip dalam antara muka Tetapan Kerja. Walau bagaimanapun, lebih berguna untuk menyimpan skrip ini dalam kawalan versi dengan kod kami.
Menggunakan saluran paip Jenkins, anda boleh menulis saluran paip sebagai skrip Jenkinsfile dalam direktori akar repositori kod dan ia akan ditemui dan dijalankan. Konsepnya sama dengan fail .travis.yml
atau .circleci.yml
yang mungkin sudah biasa.
Pada halaman Projek laravel/framework
GitHub, klik butang "Fork" di sudut kanan atas, dan kemudian klik profil dalam tetingkap pop timbul.
Buat cawangan baru bernama jenkinsfile
dan kemudian buat fail baru (anda boleh melakukan ini secara langsung di GitHub dan anda tidak perlu mengklon repositori jika anda tidak memerlukannya).
<code class="language-bash">sudo apt-get update && sudo apt-get install jenkins</code>Sekarang kembali ke Jenkins dan klik butang "Konfigurasi" dalam menu di sebelah kiri. Tatal ke bahagian paip dan kemas kini menu drop-down definisi dari skrip saluran paip ke SCM.
Masukkan butiran repositori yang telah anda bercabang dan klik Simpan.
Pada skrin Gambaran Keseluruhan Job, klik Bina Sekarang dalam menu di sebelah kiri. Anda harus mempunyai binaan yang berjaya.
Kebanyakan projek perisian menggunakan pelbagai cawangan di repositori untuk menentukan tahap projek yang berlainan. Contohnya:
Membangunkan cawangan mewakili versi sementara semasa
Dalam contoh ini, saya menambah pernyataan jika untuk memeriksa nama cawangan;
Selepas, terdapat pernyataan suis yang mewujudkan arkib penempatan yang berbeza dan mendaftarkannya kepada perkhidmatan penempatan kod berdasarkan nama cawangan (dalam contoh ini, saya menunjukkan bagaimana ini akan berfungsi dengan Perkhidmatan CodeDeploy Amazon Web Service).
<code class="language-groovy">node { stage("composer_install") { sh 'composer install' } stage("php_lint") { sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l' } stage("phpunit") { sh 'vendor/bin/phpunit' } stage("codeception") { sh 'vendor/bin/codecept run' } }</code>
Pekerjaan saluran paip berbilang bercabang juga mudah untuk ditubuhkan-apabila membuat projek, pilih "Pipeline Multi-Branched" sebagai jenis:
Apabila pilihan "Indeks Jenama" dijalankan (ia menggantikan item menu "Bina Sekarang" di dalam pekerjaan), Jenkins akan berulang -ulang melelehkan setiap cawangan di repositori dan untuk setiap cawangan dengan Jenkinsfile yang baru -baru ini berubah, a Binaan baru untuk cawangan itu akan dijalankan.
pergi lebih jauh
Pada skrin utama Jenkins, klik Urus Jenkins dalam menu di sebelah kiri, dan kemudian klik Plugin Manager.
Anda boleh memasang dan mengkonfigurasi berpuluh-puluh pemalam, dari ujian pemalam ke integrasi dengan perkhidmatan awan.
Sebagai contoh, jika pasukan anda menggunakan Slack, anda boleh mengaktifkan plugin pemberitahuan Slack. Ia dikonfigurasikan dalam skrin Tetapan Jenkins Utama ("Urus Jenkins" -> "Konfigurasi Sistem") dan mesej SLACK kemudiannya boleh dihantar sebagai sebahagian daripada skrip saluran paip:
Apabila Jenkins sedang berjalan dan berjalan di pelayan, pekerjaan itu dapat dikonfigurasi dengan mudah untuk membina secara automatik (atau menjalankan indeks cawangan) setiap kali komit ditolak ke repositori.
<code class="language-bash">sudo apt-get update && sudo apt-get install jenkins</code>
Untuk projek GitHub, pastikan plugin GitHub dipasang dan diaktifkan, dan kemudian membolehkan integrasi dengan perkhidmatan "Jenkins (GitHub Plugin)" dalam tetapan repositori GitHub.
Untuk bitbucket, ini sedikit lebih rumit, dan saya telah terperinci langkah -langkah yang diperlukan di blog saya.
Anda juga harus memastikan bahawa pelayan Jenkins dilindungi dengan betul - pengguna boleh dibuat secara manual di Jenkins, pengesahan yang diwakilkan ke GitHub atau Bitbucket menggunakan OAuth, atau disambungkan Jenkins ke direktori LDAP organisasi anda. Sekali lagi, Jenkins harus sentiasa dijalankan melalui SSL supaya akses kepada Jenkins tidak dapat dipintas dengan mudah.
Pemasangan Jenkins juga dilengkapi dengan "Penjana Coretan Kod" yang membolehkan anda melihat semua fungsi saluran paip yang diaktifkan (mis., Kami sudah menggunakan SH, Slacksend, Deletedir (), dan SCM). Anda boleh mencari pautan ke dalam menu kiri skrin gambaran kerja.
Ringkasan
Jika pasukan anda perlahan kerana ujian yang berjalan selama lebih dari lima minit, nyahpasang ujian ke Jenkins.
Jenkins boleh melakukan ini jika anda ingin menjana arkib penempatan secara automatik apabila versi pengeluaran atau pementasan baru tersedia.
Jika anda ingin mengawasi kualiti kod dan menemui regresi sebelum pelanggan menemui, maka Jenkins bersedia untuk membantu.
Sila tinggalkan sebarang pertanyaan atau komen di bawah dan beritahu kami saluran paip Jenkins yang paling kreatif!
Jika anda suka artikel ini, anda juga boleh mencari yang berikut berguna:
Jenkins adalah alat sumber terbuka yang popular yang memberikan banyak faedah untuk ujian automatik. Pertama, ia menyediakan integrasi berterusan dan penghantaran berterusan (CI/CD), yang membolehkan pemaju mengintegrasikan perubahan ke dalam projek lebih kerap. Ini membawa kepada pengesanan awal masalah yang berpotensi dan mengurangkan masa pembaikan. Kedua, Jenkins menyokong pelbagai pemalam, menjadikannya sangat disesuaikan dan disesuaikan dengan keperluan projek yang berbeza. Ketiga, ia memberikan hasil ujian masa nyata dan laporan terperinci, yang membantu dengan cepat mengenal pasti dan menyelesaikan masalah. Akhirnya, Jenkins menyokong Pipeline, satu set alat yang membolehkan mudah untuk penghantaran saluran paip "sebagai kod" melalui bahasa domain saluran paip (DSL).
Menyediakan Jenkins untuk ujian PHP melibatkan beberapa langkah. Pertama, anda perlu memasang Jenkins pada pelayan. Selepas pemasangan, anda boleh memasang pemalam yang diperlukan untuk ujian PHP, seperti pemalam PHP, pemalam phpunit, dll. Selepas memasang plugin, anda boleh membuat kerja Jenkins baru dan mengkonfigurasinya untuk projek PHP anda. Ini termasuk menubuhkan pengurusan kod sumber, pencetus bangunan, dan langkah -langkah bangunan. Dalam langkah membina, anda boleh menentukan arahan untuk menjalankan ujian PHP. Sebaik sahaja konfigurasi selesai, pekerjaan itu boleh dijalankan, dan Jenkins akan melakukan ujian dan memberikan laporan terperinci.
Jenkins bekerja dengan PHPUnit dengan melakukan ujian phpunit dalam pekerjaan Jenkins. Perintah PHPUNIT boleh ditentukan dalam langkah membina pekerjaan Jenkins. Apabila tugas dijalankan, Jenkins akan melakukan ujian phpunit dan menangkap hasilnya. Hasilnya kemudian dipaparkan di papan pemuka Jenkins, memberikan laporan terperinci mengenai pelaksanaan ujian. Ini termasuk bilangan ujian yang dijalankan, diluluskan, gagal, dan dilangkau, serta liputan kod.
Aliran kerja yang betul untuk aplikasi Jenkins PHP menggunakan PHPUnit biasanya termasuk langkah -langkah berikut: Pertama, lihat kod sumber dari sistem kawalan versi. Seterusnya, pasang sebarang kebergantungan, seperti komposer untuk projek PHP. Kemudian, jalankan ujian phpunit. Hasil ujian kemudian dikumpulkan dan dipaparkan di papan pemuka Jenkins. Jika sebarang ujian gagal, binaan itu ditandakan sebagai gagal. Jika tidak, binaan itu ditandakan sebagai berjaya. Aliran kerja ini boleh automatik menggunakan saluran paip Jenkins untuk integrasi dan penghantaran berterusan.
PHPUNIT dan JUNIT Hasil boleh dihuraikan di Jenkins menggunakan plugin Junit. Selepas menjalankan ujian phpunit, anda boleh menghasilkan laporan JUNIT XML. Plugin Junit di Jenkins kemudian dapat menghuraikan laporan ini. Dalam operasi selepas kerja kerja Jenkins, anda boleh menambah operasi "Terbitkan Laporan Hasil Ujian Junit" dan tentukan lokasi laporan JUNIT XML. Jenkins kemudian mengepam laporan itu dan memaparkan keputusan di papan pemuka. Ini termasuk bilangan ujian yang dijalankan, diluluskan, gagal, dan dilangkau, serta tempoh ujian dan trend.
Atas ialah kandungan terperinci Memperkenalkan Jenkins: Ujian Automatik dengan Pipelines. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!