Baru-baru ini, untuk QtProtobuf, saya bingung dengan membuat CI yang suka memerintah untuk memverifikasi alias menarik permintaan, dan tentu saja, untuk memasukkan lencana modis di README proyek. Pilihannya adalah Tindakan GitHub dan Travis CI . Jujur, saya tidak berangkat mencari, membandingkan, menganalisis, saya ingin kesederhanaan dan solusi cepat untuk tugas yang sangat sederhana. Pertama, saya menemukan CI untuk Tindakan GitHub, dan mengatur verifikasi uji coba unit dan bangunan melalui wadah buruh pelabuhan. Tetapi karena berbagai keterbatasan, Tindakan GitHub ternyata tidak cocok untuk verifikasi proyek di Windows. Saya harus beralih ke Travis CI.
KDPV_not_found.png
Pada saat menulis artikel ini di Travis CI, ada penafian seperti itu:
Windows build sedang dalam tahap akses awal. Silakan menuju forum Komunitas Travis CI untuk mendapatkan bantuan atau memposting ide.
Hal ini menimbulkan kekhawatiran, karena pada awalnya saya mencoba mengkonfigurasi semuanya melalui buruh pelabuhan dan memasukkannya ke dalam Tindakan GitHub, tetapi usaha ini gagal karena pembatasan ukuran, jenis wadah, dll. di github.
Untuk bisnis
Untuk memulai, Anda perlu mengesahkan Travis CI di GitHub, setelah itu aplikasi Travis CI akan muncul di pengaturan profil Anda. Dengan mudah, Anda dapat menentukan repositori yang dapat diakses Travis CI:

Langkah selanjutnya adalah mengkonfigurasi pemicu Travis CI. Prosedur ini sudah dilakukan dari panel administrasi Travis CI sendiri, pada saat penulisan, pemicu berikut tersedia:
- Dorong peluncuran ke brunch proyek apa pun
- Jalankan saat membuat permintaan gabungan
- Pemicu Berwaktu (cron)
Pada prinsipnya, satu set yang layak untuk membangun CI.
Setelah memilih pemicu untuk meluncurkan build, Anda perlu membuat .travis.yml , dengan deskripsi prosedur konstruksi dan, tergantung pada pemicu yang tersedia, letakkan file ini di repositori. Dokumentasi Travis CI yang tersebar dan tidak sistematis mengenai .travis.yml segera membingungkan, tetapi Anda dapat mengetahuinya jika mau.
Tugas utama yang berdiri adalah untuk mempersiapkan lingkungan untuk perakitan, karena perakitan itu sendiri dan verifikasi adalah bisnis CMake.
Kami menjelaskan prosedur perakitan di .travis.yml
Pertama, Anda perlu memilih sistem operasi yang berjalan sebagai mesin virtual di server Travis CI, dan bahasa pemrograman.
os: windows language: C++ ...
Bahasa , seperti yang saya pahami, mengotomatiskan beberapa langkah jika tidak ditentukan secara eksplisit, tetapi pengikatannya merupakan misteri bagi saya. Saya berpikir bahwa tanpa itu tidak akan ada MSVC pra-instal, tetapi selama percobaan ternyata juga ada untuk bahasa lain.
Langkah selanjutnya adalah mengunduh dan menginstal dependensi yang diperlukan. Untuk QtProtobuf, ini adalah:
- Qt 5.12.3 atau lebih tinggi
- cmake-3.1 atau lebih tinggi
- Strawberry perl 5.28 atau lebih tinggi
- GoLang 1.10 atau lebih tinggi
- Yasm 1.3 atau lebih tinggi
- Visual Studio Compiler 14.16.x
Dan di sini Travis CI sangat membantu . Di antara paket pra-instal tidak hanya Git dan MSVC, tetapi juga cmake, wget dan cokelat . Dalam prisnip di hadapan cokelat, instalasi lebih lanjut dari dependensi sangat difasilitasi. Benar, itu tetap menjadi misteri bagi saya mengapa Qt belum dikirim ke cokelat.
Untuk memulai, unduh penginstal Qt lengkap dari repositori resmi:
... before_install: - wget -q https://download.qt.io/official_releases/qt/5.13/5.13.2/qt-opensource-windows-x86-5.13.2.exe ...
Catatan: Saat mengunduh, wget membuang sejumlah besar log dengan kemajuan pengunduhan. Travis CI, seperti GitHub, memiliki batasan ukuran log pembangunan, jadi log yang tidak perlu harus dihindari. Opsi -q alias --quite menyembunyikan keluaran log wget.
Kami melakukan pemasangan dependensi yang diperlukan:
... install: - choco install golang - choco install yasm - ./qt-opensource-windows-x86-5.13.2.exe --script ./.ci/qt_installer_windows.qs ...
Dengan pemasangan GoLang dan Yasm, saya pikir seharusnya tidak ada pertanyaan. Tapi peluncuran installer Qt, saya akan lebih memperhatikan.
QtInstallerFramework mendukung otomatisasi proses instalasi dengan menulis skrip .
Skrip siap pakai untuk menginstal versi Qt tertentu cukup mudah untuk google, saya hanya akan memberikan tautan ke yang sudah ada dan memperhatikan pilihan komponen untuk instalasi:
... Controller.prototype.ComponentSelectionPageCallback = function() { var widget = gui.currentPageWidget(); widget.deselectAll(); widget.selectComponent("qt.qt5.5132.win32_msvc2017"); gui.clickButton(buttons.NextButton); } ...
Di sini saya mematikan semua komponen kotak centang dengan memanggil widget.deselectAll();
dan termasuk " qt.qt5.5132.win32_msvc2017 " yang diperlukan untuk konstruksi. Ada 2 aspek yang penting saat menulis prosedur ini:
- selectComponent berfungsi seperti komponen grafis, dan oleh karena itu dependensi dan subkomponen dipilih oleh logika yang sama seperti jika kita memilihnya dalam antarmuka grafis. Itu sebabnya tidak perlu khawatir tentang menyelesaikan dependensi.
- Nama-nama komponen dapat dilihat dalam mode instalasi "verbal". Untuk melakukan ini, saya melakukan
widget.selectAll();
di salah satu iterasi widget.selectAll();
dan memulai instalasi dengan perintah - ./qt-opensource-windows-x86-5.13.2.exe --verbose --script ./.ci/qt_installer_windows.qs
. Dalam log, Anda dapat dengan mudah menemukan semua komponen yang Anda butuhkan dan memoderasi pemasangannya menggunakan widget.selectComponent / widget.deselectComponent.
Dan poin penting terakhir yang akan saya bahas dalam tutorial ini adalah lingkungan build. Karena fakta bahwa instalasi dependensi dan perakitan berlangsung di dalam shell yang sama, setelah pengaturan Go dan Yasm di shell kami tidak ada PATH terdaftar sebelum file yang dapat dieksekusi. Karena itu, Anda harus mendaftarkan PATH, GOROOT secara manual sebelum sujud:
script: ... - setx path "%path%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - set GOROOT="c:\Go" - set PATH="%PATH%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.13.2\msvc2017;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" .. ...
Saya juga ingin memperhatikan fakta bahwa dalam CMAKE_PREFIX_PATH, dengan analogi, Anda perlu menentukan path to Go dan Yasm agar fungsi find_program berfungsi dengan benar.
Mungkin nanti saya akan menjelaskan tentang pembuatan wadah buruh pelabuhan untuk bangunan dengan Qt di atas kapal.
Semua skrip dapat ditemukan di sini.