CI / CD Kustom untuk Persatuan

gambar

Sekarang saya akan memberi tahu Anda seperti apa proses pengembangan Unity di perusahaan kecil gamedev dan bagaimana kami meningkatkan dan mengotomasinya. Namun, 2020 ada di halaman, itu sudah cukup untuk mengemudi dengan mouse ...

Tentang mouse, ini bukan lelucon. Sampai saat ini, proses pengujian dan pengembangan game bersama kami terlihat seperti ini:

Android


  1. Pengembang menulis kode
  2. Akan Versi Android
  3. Unggah ke folder bersama di Google Drive
  4. Penguji mengunduh versi terbaru
  5. Menguji dan melempar tugas di Redmine
  6. Goto: Langkah 1

Versi iOS sedikit lebih rumit:

iOS


  1. Pengembang menulis kode
  2. Pergi ke proyek Xcode
  3. Script postbuild menambahkan lokalisasi, SDK, dan lainnya
  4. Proyek yang disusun
  5. Diarsipkan
  6. Diekspor ke file IPA (semua ini tidak dilakukan dengan sangat cepat, haha)
  7. Setelah itu, Anda dapat mengunggah IPA ke folder bersama di Google Drive
  8. Atau unggah ke TestFlight, tempat Anda bisa menunggu beberapa hari
  9. Penguji mengunduh IPA terbaru
  10. Menghubungkan perangkat, menginstal aplikasi
  11. Menguji dan melempar tugas di Redmine
  12. Goto: Langkah 1

Di sini ada kesedihan. Dan jika untuk Android, prosesnya masih bisa diterima (tidak), maka untuk iOS - semuanya sangat panjang, tidak nyaman dan salah. Selain itu, sebagian besar operasi dilakukan secara manual oleh pengembang (di sini tentang mouse) dan waktu yang mungkin dihabiskan untuk pengembangan diperlukan untuk menunggu kompilasi, ekspor proyek Xcode, dan sebagainya. Juga perlu untuk mempertimbangkan bahwa setiap orang di kantor yang sama, yaitu Anda bisa datang untuk bertanya / mengatakan sesuatu sebelum memulai seluruh proses neraka ini.

Tapi, secara umum, entah bagaimana itu berfungsi dan merilis game :)

Dan di sini baru-baru ini, dengan pengajuan Leopotam , pencinta konstruksi sepeda dan optimalisasi segalanya, saya memutuskan untuk mengotomatiskan proses ini. Hasilnya adalah skrip BASH yang dapat:

  • Unduh perubahan terbaru dari repositori GIT
  • Jalankan tes
  • Bangun APK untuk Android, dalam pengembangan dan rilis
  • Bangun proyek untuk iOS Xcode, dalam pengembangan dan rilis
  • Kompilasi
  • Arsipkan dan ekspor IPA
  • Buat manifes untuk itu
  • Hasilkan halaman HTML untuk diinstal
  • Unggah semua ini ke server menggunakan sshpass
  • Masukkan semua log dalam folder terpisah
  • Kirim pemberitahuan telegram

Dan semua ini dengan satu sentuhan tombol. Tanpa memulai Persatuan dan Xcode. Entah bagaimana lebih menyenangkan, ya?

gambar

Sekarang, ketika perakitan selesai, tester menerima pemberitahuan di Telegram dengan dua tautan ke versi Android dan iOS. Masih harus melalui mereka dan menginstal aplikasi langsung dari perangkat. Ini juga berfungsi di iOS, dan manifes khusus dihasilkan untuk ini.

Sebenarnya, ini adalah pengalaman pertama saya dalam pemrograman BASH, jadi saya tidak tahu bagaimana itu, dalam Feng Shui atau tidak, tetapi itu berfungsi dengan baik. Bagaimanapun, skrip akan diperbarui dan dimodifikasi untuk memenuhi kebutuhan proyek. Berikut adalah beberapa poin penting tentang apa yang sedang dilakukan:

Cara mulai membangun proyek Persatuan untuk platform tertentu


Manual menjelaskan semua argumen yang dapat digunakan untuk membangun. Jalankan build APK:

$UNITY -batchmode -quit -projectPath "$PATH" -executeMethod Game.BuildActions.AndroidDevelopment -buildTarget android -logFile "$LOGS_PATH/android_development.log" 

Di sini -buildTarget hanya mengatur platform, dan - executeMethod memanggil fungsi dalam proyek Unity, yang memulai build dengan parameter yang diberikan, tampilannya seperti ini:

 static void AndroidDevelopment () { PlayerSettings.SetScriptingBackend (BuildTargetGroup.Android, ScriptingImplementation.IL2CPP); PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, "DEV"); EditorUserBuildSettings.SwitchActiveBuildTarget (BuildTargetGroup.Android, BuildTarget.Android); EditorUserBuildSettings.development = true; EditorUserBuildSettings.androidETC2Fallback = AndroidETC2Fallback.Quality32Bit; BuildReport report = BuildPipeline.BuildPlayer (GetScenes (), ANDROID_DEVELOPMENT_FILE, BuildTarget.Android, BuildOptions.None); int code = (report.summary.result == BuildResult.Succeeded) ? 0 : 1; EditorApplication.Exit (code); } 

Di sini Anda dapat mengatur parameter Anda sendiri untuk bangunan, kondisi, dll. Hasilnya dikembalikan ke skrip BASH.

Cara mengompilasi dan mengekspor proyek Xcode


Setelah Unity berhasil mengeluarkan proyek Xcode, ia harus dikompilasi, diarsipkan, dan diekspor ke file IPA, ini dilakukan seperti ini:

 xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -quiet > "$LOGS_PATH/ios_build_release.log" 2>&1 

 xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -scheme "Unity-iPhone" archive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -quiet > "$LOGS_PATH/ios_archive_release.log" 2>&1 

 xcodebuild -exportArchive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -exportOptionsPlist "$IOS_RELEASE/options.plist" -exportPath $IOS_RELEASE -allowProvisioningUpdates -quiet > "$LOGS_PATH/ios_export_release.log" 2>&1 


Di sini options.plist adalah manifes khusus yang menunjukkan metode ekspor, TeamID, dan lainnya. Semua parameter yang tersedia dapat dilihat oleh perintah:

 xcodebuild -help 

Dengan semua operasi ini, Unity-iPhone.xcodeproj standar yang dihasilkan Unity ditentukan. Jika Anda memiliki xcworkspace , maka Anda perlu memeriksa ketersediaan dan penggunaannya.

Cara mengirim pesan ke Telegram dari skrip BASH


Anda perlu menemukan bot BotFather , menulis / mulai, atau / newbot, mengisi kolom dan menerima pesan dengan token dan tautan ke dokumentasi. Untuk mengirim pesan menggunakan bot, Anda harus menjalankan perintah berikut:

 curl $BOT_PROXY https://api.telegram.org/bot$BOT_TOKEN/sendMessage -m 60 -s -X POST -d chat_id=$CHAT_ID -d text="$1" > "$LOGS_PATH/bot.log" 2>&1 

Di sini CHAT_ID adalah pengenal obrolan tempat mengirim pesan. Misalnya, Anda dapat menambahkan bot ke grup tempat penguji duduk, berikan hak untuk membaca pesan. Setelah itu jalankan:

 https://api.telegram.org/bot[BOT_TOKEN]/getUpdates 

Dan dapatkan ID grup dan anggota yang menulis sesuatu. Setelah itu, tunjukkan ID grup atau anggota tertentu kepada siapa akan dikirim. Cara menemukan dan mengkonfigurasi pengiriman melalui proxy, saya pikir tidak masalah.

Fungsi lainnya, templat templat manifes dan HTML menggunakan sed dan unggah file yang diperlukan ke server menggunakan sshpass .

Parameter yang dapat diubah dengan cepat:

 # # PARAMS TO CHANGE # BRANCH='master' COMPANY='my_company' GAME_NAME='new_game' BUNDLE='com.mygames.game' TEAM='ios_team_id' REMOTE_PATH='url_my_builds_server' SSH_LOGIN='my_login' SSH_PASS='my_pass' SSH_HOST='my_builds_server.ru' SSH_PATH='~/domains/my_builds_server.ru/builds' TEMPLATE_FILE=$(PWD)'/template.html' MANIFEST_FILE=$(PWD)'/manifest.plist' VERSION_FILE=$(PWD)'/version.txt' LOGS_PATH=$PROJECT_PATH'/Logs' ANDROID_PATH=$PROJECT_PATH'/Builds/Android' BUILDS_PATH=$PROJECT_PATH'/Builds' IOS_PATH=$PROJECT_PATH'/Builds/iOS' IOS_BUILD_PATH=$PROJECT_PATH'/Builds/iOS/build' IOS_DEVELOPMENT=$PROJECT_PATH'/Builds/iOS/build/development' IOS_RELEASE=$PROJECT_PATH'/Builds/iOS/build/release' BOT_TOKEN='my_bot_token' BOT_PROXY='--proxy 185.189.211.70:8080' CHAT_ID='123456798' UNITY='/Applications/Unity/Hub/Editor/2019.3.0f1/Unity.app/Contents/MacOS/Unity' # # # 

Demo dan sumber



Tentu saja, semua ini bisa dilakukan melalui Gitlab CI / CD yang sama, sudah ada skrip yang sudah jadi untuk ini, jalankan runner, build dan test. Singkatnya, gunakan infrastruktur dan mekanisme yang sudah jadi. Tetapi Anda harus pindah ke sana dan juga mengkonfigurasinya. Mungkin kita akan membahas ini, sementara itu jauh lebih baik daripada sebelumnya. Apalagi seluruh naskah ditulis cukup cepat.

Semua otomatisasi pada tahun 2020! Robot menyuntikkan, bukan pria.

Source: https://habr.com/ru/post/id479884/


All Articles