Integrasikan Jenkins dengan GitLab untuk secara otomatis membangun dan menerapkan aplikasi Enterprise Distributed Application Service (EDAS). Saat Anda mendorong kode ke GitLab, webhook akan memicu Jenkins untuk menarik kode tersebut, menjalankan build Maven, dan menerapkan aplikasi ke EDAS melalui plugin toolkit-maven-plugin.
Alur kerja ini mendukung aplikasi yang diterapkan pada kluster Elastic Compute Service (ECS) maupun kluster Kubernetes.
Cara kerja
Dorong kode ke GitLab -> Webhook GitLab memicu Jenkins -> Maven membangun proyek -> toolkit-maven-plugin menerapkan ke EDASAnda mendorong kode ke repositori GitLab.
Webhook GitLab memberi tahu Jenkins tentang perubahan tersebut.
Jenkins menarik kode terbaru dan menjalankan build Maven.
Plugin
toolkit-maven-pluginmemanggil skrip API POP EDAS untuk menerapkan aplikasi yang telah diperbarui.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Akun Alibaba Cloud dengan ID AccessKey dan Rahasia AccessKey dari akun yang digunakan untuk mengaktifkan EDAS. Login ke Konsol Alibaba Cloud untuk membuatnya jika diperlukan.
Aplikasi yang telah dibuat dan diterapkan di Konsol EDAS. Untuk petunjuknya, lihat Buat dan terapkan aplikasi pada kluster ECS dan Buat dan terapkan aplikasi pada kluster Kubernetes.
ID aplikasi dari tab Basic Information di Applications pada panel navigasi sebelah kiri Konsol EDAS.
Instans GitLab yang dikelola sendiri atau Alibaba Cloud Code untuk hosting kode sumber.
Instalasi Jenkins yang berfungsi.
Maven yang telah diinstal pada server build.
Konfigurasikan proyek Maven
Tambahkan plugin toolkit-maven-plugin ke file pom.xml proyek Anda untuk menentukan pengaturan penerapan EDAS. Untuk konfigurasi lengkap plugin, lihat Gunakan plugin toolkit-maven-plugin untuk memperbarui aplikasi yang diterapkan di kluster ECS.
Setelah mengonfigurasi plugin, kami menyarankan Anda menggunakan Maven pada server yang dikelola sendiri untuk memverifikasi apakah konfigurasi tersebut valid:
mvn clean package toolkit:deployBuild dan penerapan yang berhasil mengonfirmasi bahwa proyek Maven Anda siap untuk otomatisasi Jenkins.
Instal plugin Jenkins
Di Konsol Jenkins, buka System Management > Plugins.
Instal plugin berikut:
Plug-in Tujuan git client plugin, git plugin Menarik kode sumber dari repositori Git GitLab hook plug-in Memulai build Jenkins melalui webhook GitLab
Konfigurasikan Maven di Jenkins
Di Konsol Jenkins, buka Manage Jenkins > Global Tool Configuration.
Pilih versi Maven Anda dan konfigurasikan jalur instalasinya.
Siapkan autentikasi SSH antara Jenkins dan GitLab
Buat pasangan kunci SSH di server Jenkins dan tambahkan kunci publik ke GitLab agar Jenkins dapat menarik kode tanpa autentikasi manual.
Di server Jenkins, buat pasangan kunci SSH RSA untuk pengguna yang menjalankan Jenkins. Untuk detailnya, lihat dokumentasi SSH GitLab.
Di GitLab, buka Settings > Deploy Keys.
Klik New Deploy Key dan tempel kunci publik dari server Jenkins.
Buat pekerjaan Jenkins
Di halaman utama Jenkins, klik New Item, masukkan nama pekerjaan, lalu pilih Freestyle Project.
Di bawah tab Source Code Management, pilih Git dan konfigurasikan parameter berikut:
Parameter Deskripsi Repository URL URL repositori Git untuk proyek Anda Credentials Pilih None jika pasangan kunci SSH RSA pengguna yang menjalankan Jenkins telah ditambahkan ke GitLab proyek Git ini. Jika tidak, kesalahan akan dikembalikan Di bawah tab Build Triggers, pilih Poll SCM.
Di bawah tab Build Environments, pilih Add Timestamps to the Console Output.
Di bawah tab Build, klik Add Build Step lalu pilih Invoke Top-level Maven Targets.
Konfigurasikan langkah build Maven:
Parameter Nilai Maven Version Pilih versi yang telah Anda konfigurasikan di Global Tool Configuration Goals clean package toolkit:deploy
Konfigurasikan webhook GitLab
Hubungkan GitLab ke Jenkins agar setiap dorongan kode secara otomatis memicu build.
Di proyek GitLab Anda, buka Setting > Web Hooks.
Di bidang URL, masukkan URL webhook dalam format berikut. Ganti placeholder dengan nilai aktual Anda:
Placeholder Deskripsi Contoh <jenkins-server>Alamat IP atau hostname server Jenkins 123.57.xx.xxx<port>Port pendengar Jenkins 8080<git-repository-url>URL SSH Git proyek git@code.aliyun.com:tdy218/hello-edas.githttp://<jenkins-server>:<port>/git/notifyCommit?url=<git-repository-url>http://123.57.xx.xxx:8080/git/notifyCommit?url=git@code.aliyun.com:tdy218/hello-edas.gitKlik Test Hook untuk memverifikasi koneksi webhook.
Verifikasi penerapan
Setelah menyelesaikan konfigurasi, dorong commit ke repositori GitLab Anda. Webhook akan memicu Jenkins, yang kemudian menjalankan Maven dan menerapkan aplikasi ke EDAS.
Untuk memeriksa hasil build:
Buka halaman pekerjaan Jenkins dan klik Build Number > Console Output.
Penerapan yang berhasil menghasilkan output seperti berikut:
15:58:51 [INFO] Deploy application successfully! 15:58:51 [INFO] ------------------------------------------------------------------------ 15:58:51 [INFO] BUILD SUCCESS 15:58:51 [INFO] ------------------------------------------------------------------------ 15:58:51 [INFO] Total time: 24.330 s 15:58:51 [INFO] Finished at: 2018-12-25T15:58:51+08:00 15:58:51 [INFO] Final Memory: 23M/443M 15:58:51 [INFO] ------------------------------------------------------------------------ 15:58:51 Finished: SUCCESSJika penerapan gagal, login ke Konsol EDAS, lalu klik Applications di panel navigasi sebelah kiri. Klik nama aplikasi Anda, lalu di panel navigasi sebelah kiri, klik Change Records untuk melihat detail penerapan dan mengidentifikasi penyebab kegagalan.
Terapkan proyek Maven multi-modul
Untuk proyek multi-modul, penyiapan pekerjaan Jenkins sama seperti pada Buat pekerjaan Jenkins. Perbedaannya adalah Anda memerlukan dua langkah build Invoke Top-level Maven Targets alih-alih satu. Bangun modul induk terlebih dahulu untuk menyelesaikan dependensi, lalu bangun dan terapkan submodul.
Konfigurasikan dua langkah build sebagai berikut:
| Langkah build | Goals | Tujuan |
|---|---|---|
| Pertama | clean install | Bangun modul induk dan selesaikan dependensi |
| Kedua | clean package toolkit:deploy | Bangun dan terapkan submodul target |
Contoh: Proyek demo berikut memiliki struktur seperti ini:
edas-app-demo/ (parent module)
├── detail/ (submodule)
├── itemcenter/ (submodule)
└── itemcenter-api/ (submodule)Untuk menerapkan submodul itemcenter, jalankan clean install pada modul induk terlebih dahulu, lalu jalankan clean package toolkit:deploy pada submodul itemcenter.