Rumah >pembangunan bahagian belakang >tutorial php >Menyediakan dan membina projek PHP di Jenkins
Takeaways Key
Pertama dan terpenting, kita perlu memastikan bahawa kita mempunyai alat seperti phpunit dan php-codesniffer yang tersedia. Kita boleh melakukan ini dalam dua cara yang berbeza. Sama ada kami memasang pakej pada pelayan Jenkins kami melalui pir atau komposer di seluruh dunia, atau kami menentukan kebergantungan dalam fail komposer.json kami. Saya memutuskan untuk pergi dengan kaedah yang terakhir, jadi kami dapat dengan mudah mengawal versi alat -alat ini pada mesin tempatan kami sendiri serta pada Jenkins. Oleh itu, kita mulakan dengan menambahkan baris berikut ke fail komposer.json dan menjalankan kemas kini komposer.
"require-dev": { "squizlabs/php_codesniffer": "~1.5.*", "phpmd/phpmd": "~2.1.*", "sebastian/phpcpd": "~2.0.*", "pdepend/pdepend": "~2.0.*", "phploc/phploc": "~2.0.*", "phpunit/phpunit": "~4.3.*", "theseer/phpdox": "~0.7.*", },
Jika anda ingin mengetahui lebih lanjut mengenai apa yang setiap pakej lakukan, lihat artikel Bruno mengenai alat PHP QA.
Sediakan Ant"require-dev": { "squizlabs/php_codesniffer": "~1.5.*", "phpmd/phpmd": "~2.1.*", "sebastian/phpcpd": "~2.0.*", "pdepend/pdepend": "~2.0.*", "phploc/phploc": "~2.0.*", "phpunit/phpunit": "~4.3.*", "theseer/phpdox": "~0.7.*", },
Ant membantu anda mengautomasikan proses membina perisian. Anda menentukan tugas, yang dipanggil sasaran, dalam fail konfigurasi. ANT akan membaca fail ini dan melakukan tindakan yang sesuai. Anda boleh menentukan kebergantungan untuk menunjukkan di mana perintah semut harus melaksanakan tugas -tugas ini. Fail konfigurasi adalah fail binaan.xml yang dipanggil. Kami akan menambah ini kepada projek kami, jadi Ant boleh melaksanakan tugas -tugas ini pada pelayan Jenkins kami. Kami akan menggunakan templat yang disediakan oleh Sebastian Bergmann yang boleh didapati di sini. Kami menambah ini ke akar projek kami.
untuk menjalankan semut, anda boleh memulakan pembentukan semut pada baris arahan. Ini bermakna semut akan menjalankan sasaran binaan. Sekiranya tiada parameter diberikan, ANT akan menjalankan sasaran seperti yang ditunjukkan dalam konfigurasi sebagai lalai, yang dalam kes ini juga dibina.
mari kita lihat lebih dekat pada sasaran binaan.
sudo apt-get install ant
Sasarannya kosong, bagaimanapun, ia bergantung kepada banyak sasaran lain. Ia akan mula -mula menjalankan sasaran Sediakan dan kemudian teruskan dengan sasaran serat sehingga setiap sasaran telah dijalankan. Mari kita lihat sasaran PhPLOC-CI sebagai contoh.
<span><span><span><target</span> name<span>="build"</span> depends<span>="prepare,lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpcpd-ci,phpunit,phpdox"</span> description<span>=""</span>/></span></span>
Sasaran ini agak mudah difahami. Anda akan melihatnya bergantung pada sasaran yang disediakan. Oleh kerana itu sudah dijalankan oleh sasaran binaan, ia tidak akan berjalan lagi. Kemudian kita mendapat executable, iaitu phploc, yang akan dilaksanakan oleh ANT. Anda memasang ini lebih awal dengan komposer. Akhir sekali, kita akan melihat hujah -hujah khusus PHPLOC. ANT akan menjalankan input baris arahan berikut berdasarkan konfigurasi sasaran ini.
<span><span><span><target</span> name<span>="phploc-ci"</span> depends<span>="prepare"</span> description<span>="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment."</span>></span> </span> <span><span><span><exec</span> executable<span>="${toolsdir}phploc"</span>></span> </span> <span><span><span><arg</span> value<span>="--count-tests"</span>/></span> </span> <span><span><span><arg</span> value<span>="--log-csv"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/build/logs/phploc.csv"</span>/></span> </span> <span><span><span><arg</span> value<span>="--log-xml"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/build/logs/phploc.xml"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/src"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/tests"</span>/></span> </span> <span><span><span></exec</span>></span> </span><span><span><span></target</span>></span></span>
$ {toolsdir} dan $ {basedir} adalah 2 pembolehubah. Bergantung pada bagaimana mereka dikonfigurasikan, mereka mungkin memberi kesan kepada output baris perintah keseluruhan
Seperti yang ditunjukkan di atas, jika anda hanya mahu mencetuskan sasaran ini, anda harus menjalankan ant phploc-ci pada baris arahan.
Perhatikan bahawa arahan PHPLOC ini akan mengeluarkan fail phploc.csv dan fail phploc.xml. Plugin yang dipasang di Jenkins sebelum ini akan membaca fail -fail ini dan menukarnya kepada graf, sebagai contoh. Dalam artikel seterusnya kita akan menyelam lebih mendalam ke dalam topik ini.
Jika anda melihat melalui fail binaan.xml keseluruhan, anda akan melihat bahawa ia bergantung kepada 3 fail konfigurasi berasingan lain untuk alat tertentu; BUILD/PHPMD.XML, BUILD/PHPDOX.XML dan BUILD/PHPUNIT.XML. Fail konfigurasi ini diminta oleh alat sebenar. Untuk mengetahui lebih lanjut, lihat dokumen masing -masing.
Perhatikan bahawa phpunit.xml sangat diilhamkan oleh fail phpunit.xml.dist asal dari Symfony2 kerana kita berurusan dengan projek Symfony2. menukar fail build.xml
"require-dev": { "squizlabs/php_codesniffer": "~1.5.*", "phpmd/phpmd": "~2.1.*", "sebastian/phpcpd": "~2.0.*", "pdepend/pdepend": "~2.0.*", "phploc/phploc": "~2.0.*", "phpunit/phpunit": "~4.3.*", "theseer/phpdox": "~0.7.*", },
kita juga boleh membersihkan beberapa arahan. Fail Build.xml semasa mendefinisikan bahawa kami di satu pihak mempunyai direktori Src dan sebaliknya direktori ujian. Oleh kerana Symfony2 termasuk ujian dalam direktori SRC, kita boleh mengeluarkan semua laluan ke direktori ujian seperti contoh ini.
sudo apt-get install ant
Walaupun tidak diperlukan, saya lebih suka menyimpan segala -galanya yang bersih sehingga ia sesuai dengan projek kami dengan betul.
Akhir sekali, konfigurasi semasa untuk phpDox seperti yang ditunjukkan dalam fail Build.xml semasa menulis artikel ini tidak berfungsi dengan versi terkini dalam kes saya. Saya menukar sasaran seperti di bawah, jadi ia betul membaca fail konfigurasi kami.
<span><span><span><target</span> name<span>="build"</span> depends<span>="prepare,lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpcpd-ci,phpunit,phpdox"</span> description<span>=""</span>/></span></span>
Segala -galanya telah ditubuhkan untuk memastikan semua alat QA kami akan berjalan seperti yang diharapkan. Walau bagaimanapun, projek kami hanya sedikit lebih rumit. Jika anda menganalisis repositori, anda akan melihat bahawa kebergantungan dikawal oleh komposer dan bower. Oleh kerana ia adalah projek Symfony, kami juga memerlukan fail parameter.yml lalai. Kita perlu menangani keperluan ini untuk dapat menubuhkan projek dengan betul pada Jenkins.
mari kita mulakan dengan fail parameter.yml. Kami boleh bekerja dengan kandungan lalai parameter.yml.dist, jadi kami hanya akan menyalin fail itu. Kami mulakan dengan membuat sasaran baru bernama Copy-Parameter yang melaksanakan arahan CP.
<span><span><span><target</span> name<span>="phploc-ci"</span> depends<span>="prepare"</span> description<span>="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment."</span>></span> </span> <span><span><span><exec</span> executable<span>="${toolsdir}phploc"</span>></span> </span> <span><span><span><arg</span> value<span>="--count-tests"</span>/></span> </span> <span><span><span><arg</span> value<span>="--log-csv"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/build/logs/phploc.csv"</span>/></span> </span> <span><span><span><arg</span> value<span>="--log-xml"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/build/logs/phploc.xml"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/src"</span>/></span> </span> <span><span><span><arg</span> path<span>="${basedir}/tests"</span>/></span> </span> <span><span><span></exec</span>></span> </span><span><span><span></target</span>></span></span>
seterusnya adalah komposer dan bower. Saya memutuskan untuk memasang ini secara global di pelayan Jenkins dengan melaksanakan arahan berikut.
phploc --count-tests --log-csv /build/logs/phploc.csv --log-xml /build/logs/phploc.xml /src /tests
[ed: Perhatikan bahawa jika anda menjalankan semua ini dalam VM yang dihoskan pada Windows, BowerPhp akan menjadi pilihan yang lebih baik daripada Bower.]
sekarang mari buat sasaran untuk komposer.
<span><span><span><property</span> name<span>="toolsdir"</span> value<span>="bin/"</span> /></span></span>
Adalah penting untuk menetapkan symfony_env untuk menguji jadi Symfony tahu ia perlu membersihkan direktori cache ujiannya.
mari kita teruskan dengan Bower.
<span><span><span><arg</span> path<span>="${basedir}/tests"</span>/></span></span>
Perkara terakhir yang perlu kita lakukan, adalah untuk memastikan sasaran ini dilaksanakan. Oleh itu, kami menukar sasaran binaan dan menambah 3 sasaran yang baru dibuat mengikut urutan yang kami mahu melaksanakannya.
<span><span><span><target</span> name<span>="phpdox"</span> depends<span>="phploc-ci,phpcs-ci,phpmd-ci"</span> description<span>="Generate project documentation using phpDox"</span>></span> </span> <span><span><span><exec</span> executable<span>="${toolsdir}phpdox"</span>></span> </span> <span><span><span><arg</span> value<span>="--file"</span> /></span> </span> <span><span><span><arg</span> value<span>="${basedir}/build/phpdox.xml"</span> /></span> </span> <span><span><span></exec</span>></span> </span> <span><span><span></target</span>></span></span>
Perkara terakhir yang perlu kita lakukan ialah menyediakan fail .gitignore kami. Sekiranya anda ingin menjalankan sasaran semut pada mesin tempatan anda, direktori binaan anda akan diisi dengan fail log yang anda tidak mahu komited ke repositori anda. Oleh itu, kami menambah baris berikut ke fail .gitignore.
<span><span><span><target</span> name<span>="copy-parameters"</span> description<span>="Copy parameters.yml file"</span>></span> </span> <span><span><span><exec</span> executable<span>="cp"</span> failonerror<span>="true"</span>></span> </span> <span><span><span><arg</span> path<span>="app/config/parameters.yml.dist"</span> /></span> </span> <span><span><span><arg</span> path<span>="app/config/parameters.yml"</span> /></span> </span> <span><span><span></exec</span>></span> </span> <span><span><span></target</span>></span></span>
Mungkin anda mendapat sedikit keliru dengan semua perubahan yang kami buat. Untuk kemudahan anda, berikut adalah pautan langsung kepada komit dengan semua perubahan yang kami nyatakan di atas.
Projek kami sudah siap. Mari kembali ke Jenkins dan konfigurasikannya. Ini akan menjadi bahagian paling mudah dalam artikel ini.
Sejak projek kami terletak di GitHub, saya cadangkan anda memasang plugin GitHub dalam Jenkins. Jika anda menggunakan pelayan git anda sendiri, anda hanya boleh memasang plugin git biasa. Jika anda tidak pasti cara memasang plugin, periksa artikel sebelumnya.
Apabila anda kembali ke gambaran keseluruhan, anda perlu mengklik item baru di menu kiri. Sebagai nama item, kami mengisi jumph. Seterusnya, kami memilih pilihan salinan item sedia ada dan isi PHP-templat sebagai projek untuk disalin dari.
Perkara terakhir yang perlu kita lakukan ialah memilih pengurusan sumber. Dalam kes kami, ini adalah git. Seterusnya, anda perlu mengisi pautan repositori. Jika anda menggunakan pautan HTTPS, anda tidak perlu memberikan sebarang kelayakan tambahan. Kita boleh menentukan cawangan mana yang harus dibina, tetapi kerana kita hanya mempunyai cawangan induk, kita akan meninggalkannya seperti itu.
Konfigurasi dilakukan - ia sangat mudah kerana kami menggunakan templat yang telah ditetapkan. Jika anda menatal ke bawah, anda akan melihat apa yang dikonfigurasikan templat untuk kami. Jangan lupa untuk menyimpan konfigurasi anda sebelum meneruskan.
Mulakan binaan
Jika anda mengklik binaan itu sendiri, anda akan mendapat menu sampingan baru dengan pilihan untuk membina khusus ini. Klik pada output konsol untuk melihat apa yang sedang berlaku. Dalam kes saya, binaan pertama gagal kerana kehilangan beberapa sambungan PHP.
output konsol datang sangat berguna untuk mengetahui mengapa projek anda gagal. Dalam kes saya, saya hanya perlu menjalankan SUDO APT-GET Pasang PhP5-CURL PhP5-XSL PhP5-SQLITE PhP5-XDEBUG untuk memasang beberapa pakej yang diperlukan. Saya mengambil beberapa binaan untuk mengetahui apa yang hilang, tetapi dengan output konsol, mudah untuk mengetahui apa yang salah. Akhirnya, inilah yang kelihatan seperti sejarah binaan saya.
Mungkin anda menjangkakan bola hijau dan bukan bola biru apabila binaan berjaya. Terdapat plugin yang tersedia untuk menunjukkan bola hijau dan bukannya biru.
Dalam artikel ini, kami berusaha untuk membina yang berjaya. Kami terpaksa menyediakan projek kami dan mewujudkan pekerjaan di Jenkins. Akhirnya kami terpaksa debug beberapa binaan pertama kami kerana kami terlupa memasang beberapa perpustakaan.
Di bahagian seterusnya, kita akan melihat semua keputusan Jenkins memberikan kembali.
Menyediakan Jenkins untuk projek PHP anda melibatkan beberapa langkah. Pertama, anda perlu memasang Jenkins pada pelayan anda. Anda boleh memuat turunnya dari laman web rasmi Jenkins dan ikuti arahan pemasangan. Setelah dipasang, anda perlu mengkonfigurasi Jenkins untuk bekerja dengan PHP. Ini melibatkan memasang plugin yang diperlukan seperti plugin PHP, plugin Git, dan lain -lain bergantung pada keperluan projek anda. Selepas memasang plugin, anda boleh membuat kerja Jenkins baru dan mengkonfigurasinya untuk membina projek PHP anda. Anda perlu menentukan lokasi kod sumber projek anda, pencetus binaan, dan langkah -langkah membina. Projek PHP. Ia mengautomasikan proses membina, menguji, dan menggunakan aplikasi PHP anda, yang dapat menjimatkan banyak masa dan usaha. Ia juga membantu memastikan bahawa kod anda sentiasa berada dalam keadaan yang boleh digunakan, yang dapat meningkatkan kualiti perisian anda. Tambahan pula, Jenkins menyokong integrasi berterusan dan penghantaran berterusan, yang dapat membantu anda menyampaikan kemas kini kepada pengguna anda dengan lebih cepat dan kerap. Jenkins boleh digunakan untuk mengautomasikan ujian untuk projek PHP anda dengan mengintegrasikan dengan pelbagai alat ujian. Sebagai contoh, anda boleh menggunakan plugin phpunit untuk menjalankan ujian unit, atau plugin selenium untuk menjalankan ujian fungsi. Anda hanya perlu mengkonfigurasi plugin ini dalam pekerjaan Jenkins anda, dan mereka secara automatik akan menjalankan ujian anda setiap kali anda membina projek anda. Ini dapat membantu menangkap pepijat lebih awal dan memastikan kod anda sentiasa berada dalam keadaan yang baik. Bahasa pengaturcaraan selain PHP. Ini termasuk Java, Python, Ruby, C#, dan banyak lagi. Anda boleh menggunakan Jenkins untuk membina, menguji, dan menggunakan aplikasi yang ditulis dalam bahasa ini dengan memasang plugin yang sesuai dan mengkonfigurasi pekerjaan Jenkins anda dengan sewajarnya.
Bagaimana saya boleh mengamankan pelayan Jenkins saya? Pertama, anda harus memastikan bahawa pelayan Jenkins anda menjalankan versi terkini, kerana ini termasuk patch keselamatan terkini. Anda juga harus mengkonfigurasi Jenkins untuk menggunakan HTTPS, yang akan menyulitkan komunikasi antara pelayan Jenkins anda dan pengguna anda. Di samping itu, anda harus menyekat akses kepada pelayan Jenkins anda dengan menggunakan mekanisme pengesahan dan kebenaran, dan mengehadkan keizinan pengguna Jenkins untuk hanya apa yang mereka perlukan untuk melaksanakan tugas mereka.
Atas ialah kandungan terperinci Menyediakan dan membina projek PHP di Jenkins. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!