Rumah >pembangunan bahagian belakang >tutorial php >Memperkenalkan Jenkins: Ujian Automatik dengan Pipelines

Memperkenalkan Jenkins: Ujian Automatik dengan Pipelines

Christopher Nolan
Christopher Nolanasal
2025-02-10 15:01:09738semak imbas

Re-Introducing Jenkins: Automated Testing with Pipelines

mata teras

    Jenkins adalah pelayan binaan sumber terbuka yang popular yang menyokong ujian automatik aplikasi kompleks dan mempercepatkan proses pelepasan dengan menemui dan menyelesaikan kesilapan sebelum penggunaan.
  • Jenkins Pipeline (diperkenalkan dalam versi 2.0) adalah satu set langkah -langkah yang disesuaikan yang ditulis dalam bahasa skrip groovy untuk ujian dan kod bangunan. Jika satu langkah gagal, keseluruhan binaan akan gagal dan Jenkins akan berhenti melaksanakan.
  • Jenkins boleh dipasang dan dikonfigurasi dengan mudah menggunakan Homestead Laravel. Sebaik sahaja persediaan selesai, anda boleh membuat kerja binaan baru untuk menyemak versi terbaru projek, memasang dependensi, dan menjalankan ujian unit.
  • Paip Jenkins boleh ditulis sebagai skrip Jenkinsfile dalam direktori root asas kod, dengan itu melaksanakan kawalan versi. Anda juga boleh menyediakan pekerjaan saluran paip pelbagai cawangan untuk menjalankan operasi yang berbeza di cabang-cabang yang berlainan projek.
  • Jenkins menyokong ekosistem plug-in yang boleh dipasang dan dikonfigurasikan untuk memperluaskan keupayaan mereka, termasuk ujian pemalam dan integrasi dengan perkhidmatan awan. Ia boleh dikonfigurasikan untuk dibina secara automatik setiap kali komit ditolak ke repositori dan harus dijamin dengan betul.
kerana aplikasi menjadi lebih kompleks -termasuk kebergantungan komposer, skrip membina webpack, dan setiap pemboleh ubah persekitaran -kita tidak dapat dielakkan mencapai titik di mana menguji semua kerumitan yang berbeza ini menjadi lambat dan ia sukar, terutama apabila setiap ujian memerlukan penyingkiran dan pembinaan semula keseluruhan persekitaran. Begitu juga, gaya kod boleh condong dari masa ke masa, dan membuat arkib penempatan yang boleh digunakan untuk pengeluaran memerlukan satu set langkah tertentu.

Katakan untuk menguji permohonan, langkah -langkah berikut diperlukan:

    run
  1. untuk memastikan kebergantungan dipasang composer install
  2. run
  3. pada setiap fail php di pangkalan kod untuk memeriksa ralat sintaks php -l
  4. Jalankan phpunit untuk ujian unit
  5. menjalankan codeception untuk ujian fungsi

Re-Introducing Jenkins: Automated Testing with Pipelines 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.

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins adalah pelayan binaan sumber terbuka yang popular yang mengeluarkan versi 2.0 tahun ini. Salah satu ciri utama pelepasan baru ini ialah memasukkan plugin saluran paip (sebelum ini) sebagai ciri teras.

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

Dari contoh mudah ini, fasa tambahan ujian lain dapat ditambah dengan mudah, memberitahu Jenkins untuk menghantar pemberitahuan kendur yang berjaya atau gagal, menolak kod yang berjaya diuji ke cawangan penerbitan atau menandakan permintaan tarik sebagai penggabungan.

Pasang Jenkins

Jenkins sangat mudah dipasang, dan dalam tutorial ini kami akan menggunakan Laravel Homestead untuk menyediakan persekitaran maya yang konsisten supaya anda boleh menggunakan Jenkins secara tempatan.

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

Selepas anda bangun dan jalankan mesin maya Homestead, gunakan

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 . Perintah ini menambah kunci menandatangani kod kepada kebolehan supaya pakej Jenkins dari repositori ini dipercayai.

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

Re-Introducing Jenkins: Automated Testing with Pipelines

Dalam mesin maya, jalankan perintah berikut -

, 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

Re-Introducing Jenkins: Automated Testing with Pipelines 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". Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins kini dipasang dan dikonfigurasi!

Re-Introducing Jenkins: Automated Testing with Pipelines Buat pekerjaan pertama

Setelah menubuhkan Jenkins, kami akan membuat pekerjaan binaan baru yang akan melakukan perkara berikut:

lihat versi terbaru

  1. Memasang Ketergantungan Komposer laravel/framework
  2. Jalankan phpUnit
  3. Klik pada Buat Pautan Kerja Baru (atau Buat Pautan Projek Baru - mereka semua melakukan perkara yang sama).

Masukkan nama

, pilih "Pipeline", dan tekan OK. Re-Introducing Jenkins: Automated Testing with Pipelines

anda sekarang akan melihat editor konfigurasi untuk tugas itu. Tatal ke bahagian Pipeline dan masukkan skrip berikut:

laravel

Tekan "Simpan". Anda akan diarahkan ke halaman Gambaran Kerja dan selepas beberapa saat anda akan melihat kerja bermula. Jika ia tidak bermula, cuma klik pautan Build Now di menu kiri.

<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. Re-Introducing Jenkins: Automated Testing with Pipelines

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>

Jenkinsfile

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

Re-Introducing Jenkins: Automated Testing with Pipelines

masukkan skrip berikut dan serahkan fail:

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

Re-Introducing Jenkins: Automated Testing with Pipelines 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. Re-Introducing Jenkins: Automated Testing with Pipelines

Projek saluran paip pelbagai cawangan

Kebanyakan projek perisian menggunakan pelbagai cawangan di repositori untuk menentukan tahap projek yang berlainan. Contohnya:

Cawangan induk mewakili versi pengeluaran semasa

Membangunkan cawangan mewakili versi sementara semasa
  • cawangan/cawangan halaman baru boleh mewakili fungsi berterusan
  • Untuk setiap cawangan, anda mungkin ingin menjalankan banyak operasi tersuai - contohnya, apabila terdapat komitmen dari Master atau membangunkan cawangan, anda ingin menjalankan ujian penuh dan ujian integrasi, sementara di semua cawangan lain, hanya ujian unit adalah cukup.
  • Jenkinsfile ditulis dalam bahasa pengaturcaraan groovy, yang bermaksud kita mempunyai bahasa skrip lengkap untuk digunakan.

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:

Re-Introducing Jenkins: Automated Testing with Pipelines

Kemudian, dalam skrin konfigurasi, tetapkan menu drop-down definisi saluran paip ke skrip saluran paip di SCM dan masukkan butiran repositori.

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

populariti Jenkins sebahagian besarnya disebabkan oleh ekosistem plugin yang luas.

Pada skrin utama Jenkins, klik Urus Jenkins dalam menu di sebelah kiri, dan kemudian klik Plugin Manager.

Re-Introducing Jenkins: Automated Testing with Pipelines 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

Jenkins adalah alat yang sangat kuat yang dapat membantu meningkatkan kebolehpercayaan perisian anda dan menyelamatkan anda dan pasukan anda banyak masa. Manusia sangat buruk dalam melaksanakan tugas berulang berulang kali, tetapi komputer baik pada ini.

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:

  • ujian cypress: Panduan untuk menjalankan aplikasi web
  • Memperkenalkan ujian unit python menggunakan Unittest dan Pytest
  • bagaimana untuk menguji komponen reaksi menggunakan jest
  • belajar ujian akhir-ke-akhir dengan dalang
  • Kaedah Ujian Berterusan Tiga Tangan Tinggi

soalan yang sering ditanya mengenai Jenkins menggunakan saluran paip untuk ujian automatik

Apakah faedah menggunakan Jenkins untuk ujian automatik?

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

Bagaimana untuk menyediakan Jenkins untuk ujian PHP?

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.

Bagaimana ujian Jenkins dengan phpunit?

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.

Apakah aliran kerja yang betul untuk aplikasi Jenkins PHP menggunakan phpunit?

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.

Bagaimana untuk menghuraikan PHPUNIT dan JUNIT menghasilkan Jenkins?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn