Lingkungan pengembangan berbasis Docker ini adalah untuk kontributor baru dari Jenkins Warnings dan Cakupan plugin untuk mengurangi waktu peningkatan awal. Ini terdiri dari bagian -bagian berikut:
Saya mempresentasikan lingkungan pengembangan ini dalam pertemuan online Jenkins yang tercatat pada Januari 2022.
Lingkungan pengembangan telah diuji pada macOS, Ubuntu Linux (dalam mesin virtual yang berjalan pada macOS), dan Windows. Permintaan tarik selalu diterima.
Versi terbaru dari alat berikut:
Selain itu, versi terbaru dari alat berikut diperlukan:
Jika terjadi kesalahan, perhatikan petunjuk pemecahan masalah di bawah ini. Untuk pengguna Windows: Gunakan Git Bash untuk menjalankan skrip shell.
./bin/clone-repos-https.sh (atau ./bin/clone-repos.sh jika Anda sudah mengatur tombol SSH di github). Anda harus menunggu sampai bangunan berhasil sebelum membuka IntelliJ, jika tidak Intellij tidak akan menemukan semua kelas yang dihasilkan. Pertama kali pengguna Maven perlu menunggu beberapa menit sampai semua dependensi diunduh dari Maven Central.warnings-ng-plugin-devenv./bin/jenkins.sh . Perintah ini membangun gambar Jenkins Docker, mengunduh semua plugin terdaftar dan menginisialisasi ruang kerja Jenkins dengan beberapa pekerjaan. Ini membutuhkan beberapa menit juga (lihat langkah 9). Jika semua unduhan telah berhasil, tetapi instalasi gagal karena kesalahan, perbaiki dan jalankan mvn -V -U -e install –DskipTests untuk mencoba lagi instalasi.
Jika kesalahan "baris perintah terlalu panjang." terjadi, jalankan langkah -langkah berikut:
@argfile (Java9+)Jika tes gagal karena batas waktu tes Jenkins, jalankan langkah -langkah berikut:
-Djenkins.test.timeout=1000 . Ini meningkatkan batas batas waktu hingga 1000 detik. Anda dapat menggunakan skrip shell sederhana ( ./bin/clone-repos.sh ) untuk mengkloning dan membangun modul dalam satu langkah. Skrip memeriksa modul berikut menggunakan protokol Git SSH. Ini mengharuskan Anda telah mendaftarkan kunci publik Anda di GitHub. Jika Anda tidak memiliki kunci di github, Anda dapat menggunakan skrip ./bin/clone-repos-https.sh yang menggunakan protokol https.
Ketika Anda berencana untuk memberikan permintaan tarik untuk salah satu plugin yang Anda butuhkan untuk membuat garpu repositori dan membuat semua perubahan di garpu ini. Saya membuat dokumentasi kolaborasi GitHub dalam proyek gaya pengkodean saya.
IntelliJ (Ultimate) adalah lingkungan pengembangan utama yang didukung untuk plugin peringatan. Proyek yang telah ditentukan disimpan di folder .idea yang merujuk semua modul plugin peringatan. Proyek ini berisi preset gaya pengkodean saya dan beberapa konfigurasi bermanfaat lainnya.
Harus dimungkinkan untuk menggunakan IDE lain (Eclipse, NetBeans, Visual Studio Code) juga.
Gunakan Konfigurasi Jalankan IntelliJ yang disediakan All in [module-name] untuk menjalankan unit dan uji integrasi dari modul yang sesuai. Konfigurasi ini sudah dikonfigurasi untuk merekam cakupan cabang dari paket modul yang sesuai (gunakan aksi Run with Coverage ).
Sebelum Anda dapat men -debug perubahan, terlebih dahulu Anda harus mencari tahu di mana kode Anda berjalan: pada pengontrol atau pada agen? Jika Anda tidak yakin, maka jalankan kedua debugger jarak jauh, atur beberapa breakpoint dan tunggu debugger yang sesuai berhenti.
Konfigurasi Docker Compose memulai pengontrol Jenkins secara otomatis dalam mode 'Debug', yaitu, itu mendengarkan permintaan debug jarak jauh. Jika kode Anda berjalan di controller, maka Anda perlu memasang debugger jarak jauh di localhost:8000 (dipetakan ke port yang sama di wadah Docker). Gunakan konfigurasi debug Jenkins Controller (Remote Debugger) yang disediakan untuk menghubungkan debugger di IntelliJ.
Konfigurasi Docker Compose juga memulai agen Jenkins secara otomatis dalam mode 'Debug', yaitu, itu mendengarkan permintaan debug jarak jauh. Lampirkan debugger jarak jauh di localhost:8001 (dipetakan ke port yang sama di wadah Docker) untuk men -debug kode yang berjalan pada agen. Gunakan konfigurasi debug Jenkins Agent (Remote Debugger) yang disediakan untuk menghubungkan debugger di IntelliJ.
Tes UI dapat dimulai menggunakan UI Tests [module] (Firefox) atau UI Tests [module] (Chrome) . Perhatikan bahwa kedua peluncur memerlukan pemasangan driver selenium yang sesuai. Jika driver ini tidak diinstal di /opt/bin pada mesin lokal Anda maka Anda perlu menyesuaikan konfigurasi peluncur agar sesuai dengan pengaturan Anda.
Semua tes UI memerlukan berjalan dalam subjek tertentu yang diuji (yaitu, Jenkins Under Test, Jut), lihat Proyek Harness Tes Penerimaan untuk lebih jelasnya.
Lingkungan pengembangan ini berisi instalasi Jenkins yang disesuaikan di mana Anda dapat menggunakan plugin yang dimodifikasi, sehingga Anda dapat melihat perubahan Anda secara langsung di beberapa pekerjaan yang telah dikonfigurasi sebelumnya yang menggunakan plugin ini.
Mulai pengontrol Jenkins yang disediakan dalam proyek ini (Anda perlu menginstal Docker dan Docker-Compose). Buka terminal dan jalankan ./jenkins.sh di folder level atas. Perintah ini adalah pembungkus untuk docker-compose up : menggunakan pengaturan pengguna dan grup yang tepat sehingga izin volume Docker untuk folder rumah Jenkins diatur dengan benar. Perintah ini membuat wadah Docker untuk pengontrol Jenkins dan satu untuk agen Java. Ini akan membutuhkan waktu ketika disebut pertama kali karena gambar Docker akan disusun. Setelah gambar dibuat, dua wadah berikut akan dimulai:
Anda kemudian dapat membuka Jenkins di url http: // localhost: 8080/. Gunakan kredensial berikut untuk masuk sebagai administrator:
Direktori Home dari Jenkins Controller (Jenkins_Home) dipasang sebagai volume Docker. Yaitu, itu terlihat pada tuan rumah sebagai direktori normal di ./docker/volumes/jenkins-controller . Ini akan selamat dari sesi dan dapat diubah langsung pada host, lihat dokumentasi resmi untuk detailnya. Ini membantu untuk memeriksa file yang telah dibuat oleh pengontrol Jenkins.
Karena masalah kinerja di plugin DSL pekerjaan Jenkins, menyiapkan instance Jenkins yang baru sangat lambat. Oleh karena itu, masuk akal untuk menghapus bagian konfigurasi pekerjaan dari file jenkins.yaml Anda setelah pekerjaan telah dibuat. Anda dapat menimpa konten file ./docker/volumes/jenkins-home/jenkins.yaml dalam instance Jenkins Anda yang baru dibuat dengan konten di jenkins-no-jobs.yaml .
Volume di bawah macOS cukup lambat. Pada MacBook saya menjalankan pekerjaan Jenkins yang disediakan dari analysis-model dalam wadah Docker lebih lambat daripada menjalankan pekerjaan Jenkins yang sama dalam wadah Docker yang berjalan di mesin virtual Linux pada MacBook yang sama (terdengar agak absurd?).
Setelah Anda menyelesaikan perubahan pengembangan lokal Anda (yaitu, tes unit semuanya hijau), Anda harus menguji perubahan Anda di Jenkins. Ini juga membantu menyiapkan tes integrasi atau tes UI untuk perubahan Anda.
Jika Anda hanya memiliki perubahan dalam modul analysis-model (dan Anda tidak menambahkan metode API baru) maka Anda perlu membangun kembali dan menginstal analysis-model.jar dan setelah itu membangun kembali plugin analysis-model-api-plugin . Plugin ini kemudian perlu digunakan ke Jenkins.
Proses ini disederhanakan dengan menjalankan skrip ./bin/go.sh dalam Modul analysis-model , ia akan menginstal Modul analysis-model.jar di repositori Maven lokal Anda. Maka skrip ini akan membangun plugin yang sebenarnya dan menggunakannya ke Jenkins.
Jika Anda hanya memiliki perubahan dalam plugin peringatan-NG maka Anda perlu membangun kembali Plugin Jenkins warnings-ng.jpi dan menggunakannya ke Jenkins. Anda dapat menggunakan salah satu skrip shell berikut untuk tugas ini:
./bin/clean.sh : Membangun plugin menggunakan mvn clean install dan menggunakannya pada kesuksesan ke instance Jenkins../bin/go.sh : Membangun plugin menggunakan mvn clean install -DskipITs (lewati uji integrasi) dan menyebarkannya pada keberhasilan ke dalam Jenkins Instace../bin/skip.sh : Membangun plugin menggunakan mvn clean install -DskipTests (melompati semua tes dan analisis statis) dan menggunakannya pada keberhasilan ke instance Jenkins.Todo
Jika Anda memiliki perubahan di salah satu plugin Foresics (implementasi API atau GIT) maka Anda perlu membangun kembali plugin Jenkins ini dan menyebarkannya ke instance Jenkins.
Untuk menyederhanakan proses ini, jalankan skrip ./go.sh di folder plugin yang sesuai, itu akan membangun plugin dan menggunakannya pada kesuksesan ke Jenkins.
Sebelum membuat perubahan besar, silakan menghubungi saya. Biasanya, dimungkinkan untuk membuat perubahan kompatibel ke belakang.
Skrip build dari bagian terakhir juga dapat dimulai menggunakan salah satu peluncur IntelliJ Build and Deploy [module-name] . Peluncur ini membangun plugin yang sesuai dan menggunakannya ke Jenkins.
Tes UI dapat dimulai menggunakan konfigurasi peluncur IntelliJ atau menggunakan skrip baris perintah. Seperti yang telah disebutkan, semua tes UI perlu dijalankan dalam subjek tertentu yang diuji. Dalam kasus kami, kami menggunakan versi Jenkins LTS terbaru yang tersedia dan set plugin yang telah ditentukan dari gambar Docker kami.
Tes UI dapat dimulai menggunakan UI Tests Warnings (Firefox) atau UI Warnings Tests (Chrome) . Perhatikan bahwa kedua peluncur memerlukan pemasangan driver selenium yang sesuai. Jika driver ini tidak diinstal di /opt/bin pada mesin lokal Anda maka Anda perlu menyesuaikan konfigurasi peluncur agar sesuai dengan pengaturan Anda.
Anda juga dapat memulai tes UI menggunakan scrips scrips yang disediakan testFirefox.sh atau testChrome.sh . Perhatikan bahwa Anda mungkin perlu mengadaptasi skrip ini juga (lihat bagian sebelumnya).