ProHoster > Блог > Administrasi > Pengalaman CICD seluler: siji standar fastlane kanggo akeh aplikasi seluler
Pengalaman CICD seluler: siji standar fastlane kanggo akeh aplikasi seluler
Aku pengin ngomong babagan integrasi lan pangiriman sing terus-terusan kanggo aplikasi seluler nggunakake fastlane. Carane kita ngleksanakake CI / CD ing kabeh aplikasi seluler, carane kita teka lan apa kedaden ing pungkasan.
Ana cukup materi ing jaringan ing alat kasebut, sing ora ana ing wiwitan, mula aku ora bakal njlèntrèhaké alat kasebut kanthi rinci, nanging mung bakal ngrujuk marang apa sing wis ana:
Solusi teknis kanggo nggulung CI / CD kanggo N-aplikasi
Bagian pisanan luwih nostalgia kanggo jaman biyen, lan sing nomer loro yaiku pengalaman sing bisa ditrapake kanggo sampeyan dhewe.
Mangkono kedadeyan historis
2015 year
Kita mung miwiti ngembangake aplikasi seluler, banjur ora ngerti apa-apa babagan integrasi sing terus-terusan, babagan DevOps lan barang modis liyane. Saben nganyari aplikasi diluncurake dening pangembang dhewe saka mesine. Lan yen kanggo Android cukup prasaja - dirakit, ditandatangani .apk lan diunggah menyang Google Developer Console, banjur kanggo iOS alat distribusi banjur liwat Xcode ninggalake kita karo sore gedhe - nyoba kanggo ngundhuh arsip asring rampung ing kasalahan lan kita kudu nyoba maneh. Ternyata pangembang paling maju ora nulis kode kaping pirang-pirang sasi, nanging ngeculake aplikasi kasebut.
2016 year
Kita wis diwasa, kita wis duwe pikirane babagan carane mbebasake pangembang sedina muput kanggo diluncurake, lan aplikasi liya uga muncul, sing mung nyurung kita menyang otomatisasi. Ing taun sing padha, kita nginstal Jenkins kanggo pisanan lan nulis akeh skrip sing medeni, meh padha karo sing ditampilake fastlane ing dokumentasi.
Sayange, nganti saiki mung pangembang sing ngerti cara kerjane skrip kasebut lan kenapa tumpukan kunci sing ora ana telu iki dibutuhake, lan nalika ana sing rusak maneh, dheweke entuk "sore sing apik" kanggo nganalisa log.
2017 year
Taun iki kita sinau manawa ana sing diarani fastlane. Ora ana informasi akeh kaya saiki - carane miwiti, carane nggunakake. Lan alat kasebut dhewe isih mentah ing wektu kasebut: kesalahan konstan mung nguciwani kita lan angel percaya karo otomatisasi gaib sing dijanjekake.
Nanging, utilitas utama sing kalebu ing inti fastlane yaiku gym и pilot, kita bisa miwiti.
Padha wis apik, yen mung amarga ora kabeh paramèter perlu kanggo xcodebuild, sampeyan kudu nuduhake - gym independen bakal ngerti ngendi lan apa dumunung. Lan kanggo nyetel luwih apik, sampeyan bisa nemtokake tombol sing padha kaya ing xcodebuild, mung jeneng tombol sing luwih cetha.
Wektu iki, thanks kanggo gym lan formatter xcpretty sing dibangun, log mbangun dadi luwih bisa dibaca. Iki wiwit ngirit wektu kanggo ndandani rakitan sing rusak, lan kadhangkala tim rilis bisa nemtokake dhewe.
Sayange, pangukuran kacepetan perakitan xcodebuild и gym Kita ora nindakake, nanging bakal dipercaya dokumentasi - nganti 30% nyepetake.
Proses tunggal kanggo kabeh aplikasi
Taun 2018 lan saiki
Ing 2018, proses mbangun lan nggulung aplikasi rampung pindhah menyang Jenkins, pangembang mandheg ngeculake mesin, lan mung tim rilis sing duwe hak ngeculake.
Kita wis pengin nambah peluncuran tes lan analisis statis, lan skrip kita tuwuh lan tuwuh. Tuwuh lan diganti bebarengan karo aplikasi kita. Ing wektu iku, ana udakara 10 aplikasi, amarga kita duwe rong platform, yaiku 20 skrip "urip".
Saben-saben kita pengin nambah langkah anyar kanggo skrip, kita kudu nyalin-tempel potongan kasebut menyang kabeh skrip cangkang. Bisa uga kita bisa kerja kanthi luwih ati-ati, nanging asring owah-owahan kasebut rampung kanthi kesalahan ketik, sing dadi sore kanggo tim rilis kanggo ndandani skrip lan ngerteni wong sing pinter sing nambahake prentah iki lan apa sing ditindakake. Umumé, ora bisa dikandhakake manawa skrip kanggo perakitan siji platform paling ora padha. Senajan padha mesthi nindakake bab sing padha.
Kanggo miwiti proses kanggo aplikasi anyar, sampeyan kudu ngentekake sedina kanggo milih versi "seger" saka skrip kasebut, debug lan ujar manawa "ya, kerjane."
Ing musim panas 2018, kita sepisan maneh ndeleng menyang fastlane sing isih berkembang.
Tugas #1: ngringkes kabeh langkah skrip lan tulis maneh ing Fastfile
Nalika kita miwiti, script kita katon kaya footcloth kasusun saka kabeh langkah lan crutches ing siji script shell ing Jenkins. Kita durung ngalih menyang pipa lan divisi kanthi tataran.
Kita ndeleng apa sing kita duwe lan nemtokake 4 langkah sing cocog karo deskripsi CI / CD:
mbangun - nginstal dependensi, ngrakit arsip,
tes - nglakokake tes unit pangembang, ngitung jangkoan,
sonar - ngluncurake kabeh linter lan ngirim laporan menyang SonarQube,
deploy — ngirim artefak menyang alpha (TestFlight).
Lan yen sampeyan ora ngerti rincian, ngilangi tombol sing digunakake ing tumindak, sampeyan bakal entuk Fastfile iki:
default_platform(:ios)
platform :ios do
before_all do
unlock
end
desc "Build stage"
lane :build do
match
prepare_build
gym
end
desc "Prepare build stage: carthage and cocoapods"
lane :prepare_build do
pathCartfile = ""
Dir.chdir("..") do
pathCartfile = File.join(Dir.pwd, "/Cartfile")
end
if File.exist?(pathCartfile)
carthage
end
pathPodfile = ""
Dir.chdir("..") do
pathPodfile = File.join(Dir.pwd, "/Podfile")
end
if File.exist?(pathPodfile)
cocoapods
end
end
desc "Test stage"
lane :test do
scan
xcov
end
desc "Sonar stage (after run test!)"
lane :run_sonar do
slather
lizard
swiftlint
sonar
end
desc "Deploy to testflight stage"
lane :deploy do
pilot
end
desc "Unlock keychain"
private_lane :unlock do
pass = ENV['KEYCHAIN_PASSWORD']
unlock_keychain(
password: pass
)
end
end
Nyatane, Fastfile pisanan kita dadi nggegirisi, nimbang sawetara kruk sing isih dibutuhake lan jumlah paramèter sing diganti:
lane :build do
carthage(
command: "update",
use_binaries: false,
platform: "ios",
cache_builds: true)
cocoapods(
clean: true,
podfile: "./Podfile",
use_bundle_exec: false)
gym(
workspace: "MyApp.xcworkspace",
configuration: "Release",
scheme: "MyApp",
clean: true,
output_directory: "/build",
output_name: "my-app.ipa")
end
lane :deploy do
pilot(
username: "[email protected]",
app_identifier: "com.example.app",
dev_portal_team_id: "TEAM_ID_NUMBER_DEV",
team_id: "ITS_TEAM_ID")
end
Ing conto ing ndhuwur, mung bagean saka paramèter sing kudu ditemtokake: iki minangka parameter mbangun - skema, konfigurasi, jeneng Profil Provision, uga paramèter distribusi - ID Apple akun pangembang, sandhi, ID aplikasi, lan liya-liyane. ing. Minangka perkiraan pisanan, kita sijine kabeh tombol iki ing file khusus - Gymfile, Matchfile и Appfile.
Saiki ing Jenkins sampeyan bisa nelpon printah cendhak sing ora burem tampilan lan gampang diwaca dening mripat:
Apa sampeyan entuk? Mbusak printah kanggo saben langkah. Skrip sing diresiki, disusun kanthi rapi ing file fastlane. Kanthi bungah, kita mlayu menyang pangembang njaluk dheweke nambahake kabeh sing dibutuhake menyang repositori.
Nanging kita temen maujud ing wektu sing kita bakal nemokke kangelan padha - kita isih bakal duwe 20 skrip perakitan sing siji cara utawa liyane bakal miwiti kanggo urip dhewe, iku bakal luwih angel kanggo nyunting, amarga skrip bakal pindhah menyang repositori. lan kita ora duwe akses ana. Lan, ing umum, ora bakal bisa ngatasi rasa nyeri kanthi cara iki.
Tugas #2: entuk Fastfile siji kanggo aplikasi N
Saiki misale jek ngrampungake masalah kasebut ora angel - atur variabel, lan ayo. Ya, nyatane, kaya ngono masalah kasebut dirampungake. Nanging nalika kita ngaco, kita ora duwe keahlian ing fastlane dhewe, utawa ing Ruby, ing ngendi fastlane ditulis, utawa conto sing migunani ing jaringan - saben wong sing nulis babagan fastlane banjur diwatesi kanggo conto kanggo siji aplikasi. siji pangembang.
Fastlane bisa nangani variabel lingkungan, lan kita wis nyoba iki kanthi nyetel sandhi Keychain:
ENV['KEYCHAIN_PASSWORD']
Sawise ndeleng skrip, kita nemtokake bagean umum:
#for build, test and deploy
APPLICATION_SCHEME_NAME=appScheme
APPLICATION_PROJECT_NAME=app.xcodeproj
APPLICATION_WORKSPACE_NAME=app.xcworkspace
APPLICATION_NAME=appName
OUTPUT_IPA_NAME=appName.ipa
#app info
APP_BUNDLE_IDENTIFIER=com.example.appName
[email protected]
TEAM_ID=ABCD1234
FASTLANE_ITC_TEAM_ID=123456789
Saiki, kanggo miwiti nggunakake tombol kasebut ing file fastlane, kita kudu ngerti kepiye cara ngirim ing kana. Fastlane duwe solusi kanggo iki: loading variabel liwat dotenv. Dokumentasi kasebut nyatakake yen penting kanggo sampeyan mbukak kunci kanggo macem-macem tujuan, gawe sawetara file konfigurasi ing direktori fastlane. .env, .env.default, .env.development.
Banjur kita mutusake nggunakake perpustakaan iki kanthi beda. Ayo diselehake ing gudang pangembang dudu skrip fastlane lan informasi meta, nanging tombol unik aplikasi iki ing file kasebut. .env.appName.
Piyambak Fastfile, Appfile, Matchfile и Gymfile, kita ndhelikake ing gudang sing kapisah. Berkas tambahan kanthi kunci sandhi saka layanan liyane didhelikake ing kana - .env.
Sampeyan bisa ndeleng conto kene.
Ing CI, telpon ora diganti akeh tombol konfigurasi kanggo aplikasi tartamtu wis ditambahake:
Ninggalake solusi iki kanggo saiki, sanajan Fastlane duwe solusi kanggo ndownload Fastfile liwat tumindakimport_from_git, nanging mung dianggo kanggo Fastfile, nanging ora kanggo file liyane. Yen sampeyan pengin "ayu tenan", sampeyan bisa nulis dhewe action.
Set sing padha digawe kanggo aplikasi Android lan ReactNative, file kasebut ana ing repositori sing padha, nanging ing macem-macem cabang. iOS, android и react_native.
Nalika tim rilis pengin nambah sawetara langkah anyar, owah-owahan ing script direkam liwat MR ing git, ana maneh sembarang perlu kanggo nggoleki culprits saka Tulisan rusak, lan ing umum, saiki sampeyan kudu nyoba kanggo break.
Saiki wis mesthi
Sadurunge, kita ngenteni wektu kanggo njaga kabeh skrip, nganyari lan ndandani kabeh akibat saka nganyari. Iku banget kuciwo nalika alasan kanggo kasalahan lan downtime ing release padha typo prasaja sing dadi angel kanggo nglacak ing jumble saka script shell. Saiki kasalahan kuwi wis suda kanggo minimal. Owah-owahan diluncurake menyang kabeh aplikasi bebarengan. Lan butuh 15 menit kanggo nglebokake aplikasi anyar ing proses kasebut - nyiyapake pipa cithakan ing CI lan tambahake tombol menyang gudang pangembang.
Iku misale jek sing titik karo Fastfile kanggo Android lan teken aplikasi tetep unexplained yen artikel menarik, aku bakal nulis terusan. Aku bakal seneng ndeleng pitakon utawa saran sampeyan "kepiye sampeyan ngatasi masalah iki" ing komentar utawa ing Telegram bashkirova.