Buat Saluran Paip dengan Travis CI

1. Pengenalan

Dalam pembangunan perisian moden, istilah saluran paip banyak digunakan. Tetapi apa itu?

Secara umum, saluran paip binaan adalah sekumpulan langkah automatik yang memindahkan kod dari pembangunan ke pengeluaran .

Pembentukan saluran paip sangat bagus untuk melaksanakan aliran kerja integrasi berterusan untuk perisian. Mereka membolehkan kita membuat perubahan yang lebih kecil dengan frekuensi yang lebih besar , dengan tujuan untuk mencari pepijat lebih cepat dan mengurangkan kesannya.

Dalam tutorial ini, kita akan melihat pembinaan saluran paip sederhana menggunakan Travis CI.

2. Langkah dalam Membina Saluran

Saluran pembinaan boleh terdiri daripada banyak langkah yang berbeza, tetapi sekurang-kurangnya, ia harus merangkumi:

  • Menyusun kod : dalam kes kami, itu bermaksud menyusun kod sumber Java ke dalam fail kelas
  • Melaksanakan ujian : seperti menjalankan ujian unit dan kemungkinan ujian integrasi
  • Menerapkan artifak : membungkus kod yang dipatuhi menjadi artifak, menyebut ke dalam fail balang , dan menyebarkannya

Sekiranya aplikasi menggunakan teknologi yang berbeza, maka langkah tambahan dapat dimasukkan ke dalam saluran pembangunan . Sebagai contoh, kami mungkin memiliki langkah tambahan yang meminimumkan fail JavaScript atau menerbitkan dokumentasi API yang dikemas kini.

3. Apa itu Travis CI?

Untuk saluran paip sampel, kami akan menggunakan Travis CI, alat penyatuan berterusan berasaskan awan .

Ini mempunyai sebilangan ciri yang menjadikannya pilihan tepat untuk memulakan dengan membina saluran paip:

  • Cepat bergabung dengan mana-mana repositori GitHub awam
  • Menyokong setiap bahasa pengaturcaraan utama
  • Menyebarkan ke pelbagai platform awan yang berbeza
  • Menawarkan pelbagai alat pesanan dan amaran

Pada tahap tinggi, ia berfungsi dengan memantau repositori GitHub untuk melakukan komit baru.

Apabila komit baru dibuat, ia akan melaksanakan langkah-langkah saluran pembangunan seperti yang ditentukan dalam fail konfigurasi (lebih lanjut mengenai ini di bawah) Sekiranya ada langkah yang gagal, saluran paip akan berakhir dan ia akan memberitahu kami.

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

Kami sentiasa dapat memberikan lebih banyak konfigurasi untuk menyesuaikan saluran paip kami jika diperlukan. Sebagai contoh, kita dapat mengehadkan apa yang dicetuskan oleh pencetus cawangan, menambah langkah tambahan ke saluran paip, dan banyak lagi.

3.1. Versi Percuma dan Berbayar

Penting untuk mengetahui bahawa Travis CI pada masa ini mempunyai 2 persembahan: versi percuma dan berbayar.

Versi percuma, dilambangkan dengan nama domain .org , menawarkan kemampuan penuh untuk mana-mana repositori GitHub awam . Tidak ada batasan untuk jumlah binaan atau repositori, walaupun ada had sumber yang dikenakan ketika saluran paip anda berjalan.

Versi berbayar, yang menggunakan nama domain .com , diperlukan untuk repositori GitHub peribadi. Ia juga menawarkan binaan yang lebih serentak dan minit pembinaan yang tidak terhad berbanding dengan rancangan percuma. Terdapat percubaan percuma untuk 100 binaan pertama untuk menguji versi berbayar.

4. Membuat Binaan Paip dengan Travis CI

Untuk tutorial ini, kami akan menggunakan versi percuma yang dinyatakan di atas. Sebarang repositori awam boleh digunakan untuk membuat saluran paip percuma.

Yang perlu kita lakukan ialah log masuk ke Travis CI dengan akaun GitHub kami dan membenarkannya:

Setelah memberikan kebenaran ke akaun GitHub kami, kami siap untuk mulai mengkonfigurasi saluran pembangunan kami.

4.1. Mengkonfigurasi Repositori

Pada mulanya, semua repositori awam kami dianggap tidak aktif. Untuk menyelesaikannya, kami perlu mengaktifkan repositori kami dari halaman tetapan akaun .

Ini menyenaraikan semua repositori awam kami, bersama dengan butang togol. Mengklik butang togol akan mengkonfigurasi Travis CI untuk mula memantau repositori itu untuk komit baru, menggunakan cawangan induk lalai :

Perhatikan bahawa setiap repositori juga mempunyai butang Tetapan . Di sinilah kita dapat mengkonfigurasi tingkah laku saluran paip yang berbeza:

  • Tentukan peristiwa yang memicu saluran paip (push, pull request, dan sebagainya)
  • Tetapkan pemboleh ubah persekitaran yang disalurkan ke saluran paip
  • Batalkan automatik membina apabila acara baru dicetuskan

Untuk tutorial ini, tetapan lalai akan berfungsi dengan baik. Nanti kita akan melihat cara mengatasi beberapa tingkah laku lalai.

4.2. Membuat Konfigurasi Travis

Langkah seterusnya adalah membuat fail baru bernama .travis.yml di direktori root repositori kami. Fail ini mengandungi semua maklumat yang diperlukan untuk mengkonfigurasi saluran paip. Tanpa fail ini, saluran paip tidak akan dijalankan .

Untuk tutorial ini, kita hanya perlu memasukkan konfigurasi minimum kosong, yang menentukan bahasa pengaturcaraan:

language: java

Itu sahaja! Tanpa memberikan maklumat lebih lanjut, Travis CI akan melaksanakan saluran paip mudah yang:

  • Menyusun kod sumber kami
  • Menjalankan ujian kami

Sebaik sahaja kami membuat fail .travis.yml, Travis akan memulakan pembinaan pertama kami. Sebarang komitmen lebih lanjut untuk menguasai cawangan akan mencetuskan peningkatan tambahan. Papan pemuka juga memungkinkan kita memicu saluran paip secara manual setiap saat tanpa memerlukan permintaan komit atau tarikan.

5. Konfigurasi Tambahan

Pada bahagian sebelumnya, kita melihat bahawa satu baris konfigurasi adalah semua yang kita perlukan untuk menjalankan saluran pembangunan kita. Tetapi kebanyakan projek memerlukan konfigurasi tambahan untuk melaksanakan saluran paip yang bermakna.

Bahagian ini menggariskan beberapa konfigurasi yang lebih berguna yang mungkin ingin kami tambahkan ke saluran paip kami.

5.1. Menukar Perintah Binaan Lalai

Perintah lalai yang digunakan untuk membina projek Maven adalah:

mvn test -B

Kita boleh mengubahnya menjadi perintah apa pun dengan menetapkan arahan skrip di .travis.yml :

script: mvn package -DskipTests

Ada kemungkinan untuk menyatukan pelbagai arahan dalam satu baris skrip menggunakan operator && .

Beberapa arahan binaan adalah kompleks dan mungkin merangkumi beberapa baris atau mempunyai logik yang kompleks. Sebagai contoh, mereka mungkin melakukan tindakan yang berbeza berdasarkan pemboleh ubah persekitaran.

Dalam kes ini, disarankan untuk meletakkan perintah build dalam skrip yang berdiri sendiri , dan memanggil skrip itu dari dalam fail konfigurasi:

script: ./build.sh

5.2. Menyebarkan Kod

Tetapan binaan lalai untuk projek Java hanya menyusun kod dan menjalankan ujian. Artifak yang dihasilkan (fail .jar, dll.) Dibuang di hujung saluran paip kecuali kita menyebarkannya ke suatu tempat.

Travis CI menyokong pelbagai perkhidmatan pihak ketiga yang terkenal. Artifak dapat disalin ke banyak sistem penyimpanan awan yang popular seperti Amazon S3, Penyimpanan Awan Google, Bintray, dan banyak lagi.

Ia juga dapat menyebarkan kod secara langsung ke platform pengkomputeran awan yang paling popular seperti AWS, Google App Engine, Heroku, dan banyak lagi.

Di bawah ini adalah contoh konfigurasi yang menunjukkan bagaimana kita dapat menyebarkan ke Heroku. Untuk menghasilkan sifat yang dienkripsi, kita harus menggunakan alat Travis CLI.

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

Selain itu, ia menyediakan pilihan penyebaran generik yang membolehkan kita menulis skrip penyebaran kita sendiri. Ini berguna jika kita perlu menyebarkan artifak ke sistem pihak ketiga yang tidak disokong secara asli.

Sebagai contoh, kita dapat menulis skrip shell yang menyalin artifak dengan selamat ke pelayan FTP peribadi:

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

5.3. Menguruskan Cabang Mana Yang Mencetuskan Saluran Paip

Secara lalai, saluran paip akan dijalankan untuk setiap komit pada master . Walau bagaimanapun, kebanyakan projek besar menggunakan beberapa bentuk git bercabang untuk menguruskan kitaran pembangunan.

Travis CI menyokong senarai putih dan hitam cawangan git untuk menentukan komitmen mana yang harus mencetuskan saluran paip.

Sebagai contoh, pertimbangkan konfigurasi berikut:

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

Ini akan mengabaikan komitmen pada tuan dan cawangan malam . Komitmen untuk melepaskan dan cabang yang stabil akan mencetuskan saluran paip. Perhatikan bahawa satu- satunya arahan selalu diutamakan daripada arahan kecuali .

Kami juga dapat menggunakan ungkapan biasa untuk mengawal cabang mana yang memicu saluran paip:

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

Ini akan memulakan saluran paip hanya untuk komit pada cawangan yang bermula dengan pengembangan .

5.4. Melangkau Komitmen Khusus

Kita boleh menggunakan mesej git komit untuk melewatkan komit individu . Travis CI akan memeriksa mesej untuk corak berikut:

  • ponteng
  • ponteng

Di manakah ada nilai berikut:

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

Sekiranya mesej komit sesuai dengan mana-mana corak ini maka saluran paip tidak akan berjalan.

5.5. Menggunakan Persekitaran Binaan yang berbeza

Persekitaran binaan lalai untuk projek Java adalah Ubuntu Linux. Saluran paip juga dapat dijalankan pada Mac OSX atau Windows Server dengan menambahkan konfigurasi berikut ke dalam .travis.yml :

os: osx # can also be 'windows'

Walaupun dengan Linux, terdapat 3 pengedaran berbeza yang dapat kita pilih:

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

Dokumentasi platform binaan merangkumi semua persekitaran yang ada dan perbezaannya.

Ingatlah bahawa jika kita mengubah platform, kita mungkin juga perlu mengubah binaan tersuai atau menyebarkan skrip untuk memastikan keserasian. Terdapat beberapa cara untuk menangani pelbagai sistem operasi dalam konfigurasi.

5.6. Menggunakan Versi JDK yang berbeza

Kami juga dapat menguji versi JDK tertentu dengan menetapkan konfigurasi berikut dalam fail .travis.yml :

jdk: oraclejdk8

Perlu diingat bahawa persekitaran binaan yang berbeza, bahkan pengedaran Linux yang berbeza, boleh mempunyai versi JDK yang berbeza. Rujuk dokumentasi untuk setiap persekitaran untuk melihat senarai lengkap versi JDK.

6. Bina Matriks

Secara lalai, setiap kali saluran paip kami berjalan, ia berfungsi sebagai satu tugas. Ini bermaksud semua fasa saluran dijalankan secara berurutan pada mesin maya tunggal dengan tetapan yang sama.

Tetapi salah satu ciri hebat Travis CI adalah kemampuan membuat matriks binaan. Ini membolehkan kita menjalankan beberapa pekerjaan untuk setiap komit, menggunakan nilai yang berbeza untuk beberapa tetapan yang kita lihat sebelumnya.

Sebagai contoh, kita boleh menggunakan matriks build untuk menjalankan saluran paip kita pada Linux dan Mac OSX, atau dengan kedua-dua JDK 8 dan 9.

Terdapat dua cara untuk membuat matriks binaan . Pertama, kita dapat memberikan pelbagai nilai untuk satu atau lebih konfigurasi bahasa dan persekitaran yang kita lihat sebelumnya. Sebagai contoh:

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

Dengan menggunakan pendekatan ini, Travis CI secara automatik akan mengembangkan setiap kombinasi konfigurasi untuk membentuk pelbagai pekerjaan. Dalam contoh di atas, hasilnya akan menjadi empat jumlah pekerjaan.

Cara kedua untuk membuat matriks binaan adalah dengan menggunakan arahan matrik.sertakan . Ini membolehkan kami menyatakan secara jelas 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 menggunakan beberapa Sistem Operasi, kita harus berhati-hati untuk memastikan skrip binaan dan penyebaran kita berfungsi untuk semua kes. Skrip shell tidak akan berfungsi pada Windows, misalnya. Kita mesti menggunakan pernyataan bersyarat yang betul untuk menangani Sistem Operasi yang berbeza.

Terdapat lebih banyak pilihan yang memberikan kawalan yang lebih terperinci mengenai pekerjaan mana yang akan dibuat, dan bagaimana menangani kegagalan.

7. Kesimpulannya

Dalam artikel ini, kami membuat saluran paip sederhana menggunakan Travis CI. Menggunakan kebanyakan konfigurasi di luar kotak, kami membuat saluran paip yang membina kod dan menjalankan ujian.

Kami juga melihat contoh kecil betapa Travis CI boleh dikonfigurasi. Ia berfungsi dengan pelbagai bahasa pengaturcaraan dan platform awan pihak ketiga. Satu kelemahannya ialah ia hanya berfungsi dengan repositori GitHub.