Buat Build Pipeline dengan Travis CI

1. Perkenalan

Dalam pengembangan perangkat lunak modern, istilah pipeline banyak digunakan. Tapi apa itu?

Secara umum, pipeline build adalah sekumpulan langkah otomatis yang memindahkan kode dari pengembangan ke produksi .

Build pipeline sangat bagus untuk mengimplementasikan alur kerja integrasi berkelanjutan untuk perangkat lunak. Mereka memungkinkan kami membuat perubahan yang lebih kecil dengan frekuensi yang lebih besar , dengan tujuan menemukan bug lebih cepat dan mengurangi dampaknya.

Dalam tutorial ini, kita akan melihat membangun pipeline build sederhana menggunakan Travis CI.

2. Langkah-langkah dalam Membangun Pipeline

Pipeline build dapat terdiri dari banyak langkah berbeda, tetapi minimal harus mencakup:

  • Kompilasi kode : dalam kasus kami, itu berarti mengkompilasi kode sumber Java ke dalam file kelas
  • Menjalankan pengujian : seperti menjalankan pengujian unit dan kemungkinan pengujian integrasi
  • Menerapkan artefak : mengemas kode yang sesuai menjadi artefak, misalnya ke dalam file jar , dan menerapkannya

Jika aplikasi menggunakan teknologi yang berbeda, maka langkah tambahan dapat disertakan dalam pipeline build . Misalnya, kami mungkin memiliki langkah tambahan yang mengecilkan file JavaScript atau menerbitkan dokumentasi API yang diperbarui.

3. Apa Itu Travis CI?

Untuk contoh pipeline build kami, kami akan menggunakan Travis CI, alat integrasi berkelanjutan berbasis cloud .

Ini memiliki sejumlah fitur yang menjadikannya pilihan tepat untuk memulai pipeline build:

  • Terintegrasi dengan cepat dengan repositori GitHub publik apa pun
  • Mendukung setiap bahasa pemrograman utama
  • Menerapkan ke beberapa platform cloud yang berbeda
  • Menawarkan berbagai alat olahpesan dan peringatan

Pada level tinggi, ini bekerja dengan memantau repositori GitHub untuk komit baru.

Saat commit baru dibuat, langkah-langkah pipeline build akan dijalankan seperti yang ditentukan dalam file konfigurasi (selengkapnya tentang ini di bawah). Jika ada langkah yang gagal, pipa akan berhenti dan itu akan memberi tahu kami.

Di luar kotak, Travis CI membutuhkan konfigurasi yang sangat sedikit. Satu-satunya konfigurasi yang diperlukan adalah menentukan bahasa pemrograman .

Kami selalu dapat menyediakan lebih banyak konfigurasi untuk menyesuaikan pipeline kami jika diperlukan. Misalnya, kita dapat membatasi cabang apa yang memicu build, menambahkan langkah tambahan ke pipeline, dan banyak lagi.

3.1. Versi Gratis dan Berbayar

Penting untuk diketahui bahwa Travis CI saat ini memiliki 2 penawaran: versi gratis dan berbayar.

Versi gratis, dilambangkan dengan nama domain .org , menawarkan kemampuan penuh untuk semua repositori GitHub publik . Tidak ada batasan jumlah build atau repositori, meskipun ada batasan resource yang diberlakukan saat pipeline Anda berjalan.

Versi berbayar, yang menggunakan nama domain .com , diperlukan untuk repositori GitHub pribadi. Ini juga menawarkan build yang lebih bersamaan dan menit build tidak terbatas dibandingkan dengan paket gratis. Ada uji coba gratis untuk 100 versi pertama untuk menguji versi berbayar.

4. Membuat Build Pipeline dengan Travis CI

Untuk tutorial ini, kami akan menggunakan versi gratis yang disebutkan di atas. Repositori publik apa pun dapat digunakan untuk membuat pipeline gratis.

Yang harus kita lakukan adalah masuk ke Travis CI dengan akun GitHub kita dan mengotorisasinya:

Setelah kami memberikan izin ke akun GitHub kami, kami siap untuk mulai mengonfigurasi pipeline build kami.

4.1. Mengonfigurasi Repositori

Awalnya, semua repositori publik kami dianggap tidak aktif. Untuk mengatasi ini, kita perlu mengaktifkan repositori kita dari halaman pengaturan akun .

Ini mencantumkan semua repositori publik kami, bersama dengan tombol sakelar. Mengklik tombol sakelar akan mengonfigurasi Travis CI untuk mulai memantau repositori itu untuk komit baru, menggunakan cabang default master:

Perhatikan bahwa setiap repositori juga memiliki tombol Pengaturan . Di sinilah kita dapat mengonfigurasi perilaku pipeline yang berbeda:

  • Tentukan peristiwa mana yang memicu pipeline (push, pull request, dan sebagainya)
  • Tetapkan variabel lingkungan yang diteruskan ke pipeline
  • Batalkan otomatis build saat acara baru dipicu

Untuk tutorial ini, pengaturan default akan berfungsi dengan baik. Nanti kita akan melihat cara mengganti beberapa perilaku default.

4.2. Membuat Konfigurasi Travis

Langkah selanjutnya adalah membuat file baru bernama .travis.yml di direktori root repositori kami. File ini berisi semua informasi yang diperlukan untuk mengkonfigurasi pipeline. Tanpa file ini, pipeline tidak akan dijalankan .

Untuk tutorial ini kita hanya perlu memasukkan konfigurasi minimal, yang menentukan bahasa pemrograman:

language: java

Itu dia! Tanpa memberikan informasi lebih lanjut, Travis CI akan menjalankan pipeline sederhana yang:

  • Mengompilasi kode sumber kami
  • Jalankan pengujian kami

Setelah kita menjalankan file .travis.yml, Travis akan memulai pembuatan pertama kita. Setiap komitmen lebih lanjut ke cabang master akan memicu build tambahan. Dasbor juga memungkinkan kita memicu pipeline secara manual kapan saja tanpa memerlukan permintaan commit atau pull.

5. Konfigurasi Tambahan

Di bagian sebelumnya, kita melihat bahwa hanya satu baris konfigurasi yang kita butuhkan untuk menjalankan pipeline build kita. Tetapi sebagian besar proyek akan membutuhkan konfigurasi tambahan untuk menerapkan pipeline yang bermakna.

Bagian ini menjelaskan beberapa konfigurasi yang lebih berguna yang mungkin ingin kita tambahkan ke pipeline kita.

5.1. Mengubah Perintah Build Default

Perintah default yang digunakan untuk membangun proyek Maven adalah:

mvn test -B

Kita dapat mengubahnya menjadi perintah apa pun dengan mengatur direktif skrip di .travis.yml :

script: mvn package -DskipTests

Dimungkinkan untuk menyatukan beberapa perintah dalam satu baris skrip menggunakan operator && .

Beberapa perintah build rumit dan dapat menjangkau beberapa baris atau memiliki logika yang kompleks. Misalnya, mereka dapat melakukan tindakan berbeda berdasarkan variabel lingkungan.

Dalam kasus ini, disarankan untuk menempatkan perintah build dalam skrip yang berdiri sendiri , dan memanggil skrip tersebut dari dalam file konfigurasi:

script: ./build.sh

5.2. Menerapkan Kode

Pengaturan build default untuk project Java cukup mengompilasi kode dan menjalankan pengujian. Artefak yang dihasilkan (file .jar, dll.) Dibuang di akhir pipeline kecuali kita menerapkannya di suatu tempat.

Travis CI mendukung berbagai layanan pihak ketiga yang terkenal. Artefak dapat disalin ke banyak sistem penyimpanan cloud populer seperti Amazon S3, Google Cloud Storage, Bintray, dan lainnya.

Itu juga dapat menerapkan kode langsung ke platform komputasi awan paling populer seperti AWS, Google App Engine, Heroku, dan banyak lagi.

Di bawah ini adalah contoh konfigurasi yang menunjukkan bagaimana kita dapat menerapkan ke Heroku. Untuk menghasilkan properti terenkripsi, kita harus menggunakan alat CLI Travis.

deploy: provider: heroku api_key: secure: "ENCRYPTED_API_KEY"

Selain itu, ini menyediakan opsi penerapan umum yang memungkinkan kita menulis skrip penerapan kita sendiri. Ini berguna jika kami perlu menerapkan artefak ke sistem pihak ketiga yang tidak didukung secara bawaan.

Misalnya, kita dapat menulis skrip shell yang menyalin artefak dengan aman ke server FTP pribadi:

deploy: provider: script script: bash ./custom-deploy.sh

5.3. Mengelola Cabang Mana yang Memicu Pipeline

Secara default, pipeline akan dieksekusi untuk setiap commit pada master . Namun, sebagian besar proyek besar menggunakan beberapa bentuk git branching untuk mengelola siklus pengembangan.

Travis CI mendukung cabang git putih dan daftar hitam untuk menentukan komit mana yang harus memicu pipeline.

Sebagai contoh, pertimbangkan konfigurasi berikut:

branches: only: - release - stable except: - master - nightly

Ini akan mengabaikan komit pada master dan cabang malam . Komitmen untuk rilis dan cabang stabil akan memicu pipeline. Perhatikan bahwa satu - satunya direktif selalu didahulukan dari direktif kecuali .

Kita juga bisa menggunakan ekspresi reguler untuk mengontrol cabang mana yang memicu pipeline:

branches: only: - /^development.*$/

Ini akan memulai pipeline hanya untuk komit di cabang yang dimulai dengan pengembangan .

5.4. Melewati Komitmen Khusus

Kita dapat menggunakan pesan git komit untuk melewati komit individu . Travis CI akan memeriksa pesan untuk pola berikut:

  • melewatkan
  • melewatkan

Di mana salah satu dari nilai berikut:

  • ci
  • travis
  • travis ci
  • travis-ci
  • travisci

Jika pesan komit cocok dengan salah satu pola ini maka pipeline tidak akan berjalan.

5.5. Menggunakan Lingkungan Build yang Berbeda

Lingkungan build default untuk proyek Java adalah Ubuntu Linux. Pipeline juga dapat dijalankan di Mac OSX atau Windows Server dengan menambahkan konfigurasi berikut ke .travis.yml :

os: osx # can also be 'windows'

Bahkan dengan Linux, ada 3 distribusi berbeda yang dapat kita pilih:

os: linux dist: xenial # other choices are 'trusty' or 'precise'

Dokumentasi platform build mencakup semua lingkungan yang tersedia dan perbedaannya.

Ingatlah bahwa jika kami mengubah platform, kami mungkin juga perlu mengubah pembuatan kustom atau menerapkan skrip untuk memastikan kompatibilitas. Ada beberapa cara untuk menangani beberapa sistem operasi dalam konfigurasi.

5.6. Menggunakan Versi JDK yang Berbeda

Kami juga dapat menguji versi JDK tertentu dengan menyetel konfigurasi berikut di file .travis.yml :

jdk: oraclejdk8

Perlu diingat bahwa lingkungan build yang berbeda, bahkan distribusi Linux yang berbeda, dapat memiliki versi JDK yang berbeda. Lihat dokumentasi untuk setiap lingkungan untuk melihat daftar lengkap versi JDK.

6. Bangun Matriks

Secara default, setiap kali pipeline kita berjalan, pipeline tersebut berjalan sebagai satu tugas. Ini berarti semua fase pipeline dijalankan secara berurutan di satu mesin virtual dengan setelan yang sama.

Namun salah satu fitur hebat Travis CI adalah kemampuannya untuk membuat matriks build. Ini memungkinkan kita menjalankan banyak pekerjaan untuk setiap komit, menggunakan nilai berbeda untuk beberapa pengaturan yang kita lihat sebelumnya.

Misalnya, kita dapat menggunakan matriks build untuk menjalankan pipeline kita di Linux dan Mac OSX, atau dengan JDK 8 dan 9.

Ada dua cara untuk membuat matriks build . Pertama, kita dapat menyediakan larik nilai untuk satu atau lebih konfigurasi bahasa dan lingkungan yang kita lihat sebelumnya. Sebagai contoh:

language: java jdk: - openjdk8 - openjdk9 os: - linux - osx

Dengan menggunakan pendekatan ini, Travis CI akan secara otomatis memperluas setiap kombinasi konfigurasi untuk membentuk banyak pekerjaan. Dalam contoh di atas, hasilnya adalah total empat pekerjaan.

Cara kedua untuk membuat matriks build adalah dengan menggunakan direktif matrix.include . Ini memungkinkan kami secara eksplisit mendeklarasikan kombinasi mana yang ingin kami jalankan:

language: java matrix: include: - jdk: openjdk8 os: linux - jdk: openjdk9 os: osx

Contoh di atas akan menghasilkan dua pekerjaan.

Sekali lagi, jika kita membangun beberapa Sistem Operasi, kita harus berhati-hati untuk memastikan skrip pembangunan dan penerapan kita berfungsi untuk semua kasus. Skrip shell tidak akan berfungsi di Windows, misalnya. Kita harus menggunakan pernyataan bersyarat yang tepat untuk menangani Sistem Operasi yang berbeda.

Ada lebih banyak opsi yang memberikan kontrol yang lebih terperinci atas pekerjaan mana yang akan dibuat, dan cara menangani kegagalan.

7. Kesimpulan

Di artikel ini, kami membuat pipeline build sederhana menggunakan Travis CI. Menggunakan sebagian besar konfigurasi di luar kotak, kami membuat pipeline yang membuat kode dan menjalankan pengujian.

Kami juga melihat contoh kecil tentang seberapa dapat dikonfigurasi Travis CI. Ia bekerja dengan berbagai bahasa pemrograman dan platform cloud pihak ketiga. Satu kelemahannya adalah saat ini hanya bekerja dengan repositori GitHub.