ProHoster > blog > Amministrazzjoni > Esperjenza CICD mobbli: standard wieħed fastlane għal ħafna applikazzjonijiet mobbli
Esperjenza CICD mobbli: standard wieħed fastlane għal ħafna applikazzjonijiet mobbli
Nixtieq nitkellem dwar l-integrazzjoni u l-kunsinna kontinwi għal apps mobbli li jużaw fastlane. Kif nimplimentaw CI/CD fuq l-applikazzjonijiet kollha tal-mowbajl, kif wasalna hemm u x’ġara fl-aħħar.
Diġà hemm biżżejjed materjal fuq in-netwerk fuq l-għodda, li tant kellna fil-bidu, għalhekk mhux se niddeskrivi l-għodda deliberatament fid-dettall, iżda nirreferi biss għal dak li kellna dak iż-żmien:
Sfond għall-emerġenza ta 'CI/CD mobbli fil-kumpanija
Soluzzjoni teknika għat-tnedija ta' CI/CD għal N-applikazzjonijiet
L-ewwel parti hija aktar nostalġija għall-antik, u t-tieni hija esperjenza li tista’ tapplika għalik innifsek.
Hekk ġara storikament
Sena 2015
Għadna kemm bdejna niżviluppaw applikazzjonijiet mobbli, imbagħad ma konna nafu xejn dwar integrazzjoni kontinwa, dwar DevOps u affarijiet oħra tal-moda. Kull aġġornament tal-applikazzjoni ġie rrolljat mill-iżviluppatur innifsu mill-magna tiegħu. U jekk għal Android huwa pjuttost sempliċi - immuntat, iffirmat .apk u tellagħha fil-Google Developer Console, imbagħad għall-iOS l-għodda tad-distribuzzjoni ta’ dak iż-żmien permezz ta’ Xcode ħallietna serati mill-aqwa – tentattivi biex tniżżel l-arkivju spiss spiċċaw fi żbalji u kellna nerġgħu nippruvaw. Irriżulta li l-iżviluppatur l-aktar avvanzat ma jiktebx kodiċi diversi drabi fix-xahar, iżda pjuttost jirrilaxxa l-applikazzjoni.
Sena 2016
Aħna kiber, diġà kellna ħsibijiet dwar kif inħelsu l-iżviluppaturi minn ġurnata sħiħa għal rilaxx, u dehret ukoll it-tieni applikazzjoni, li biss imbuttatna aktar lejn l-awtomazzjoni. Dik l-istess sena, installajna Jenkins għall-ewwel darba u ktibna mazz ta 'skripts tal-biża', simili ħafna għal dawk li fastlane juri fid-dokumentazzjoni tiegħu.
Sfortunatament, s'issa l-iżviluppaturi tagħna biss kienu jafu kif jaħdmu dawn l-iskripts u għaliex dan il-munzell bla tarf ta 'ċwievet huwa meħtieġ, u meta xi ħaġa reġgħet kissru, kisbu l-"filgħaxija sabiħa" għall-analiżi ta' zkuk.
Sena 2017
Din is-sena tgħallimna li hemm ħaġa bħal fastlane. Ma kienx hemm informazzjoni daqskemm hemm issa - kif tibda waħda, kif tużaha. U l-għodda nnifisha kienet għadha mhux raffinata dak iż-żmien: żbalji kostanti ddiżappuntawna biss u kien diffiċli li nemmnu fl-awtomazzjoni maġika li wegħdu.
Madankollu, l-utilitajiet ewlenin inklużi fil-qalba fastlane huma gym и pilot, irnexxielna nibdewha.
Ġew imtejba, jekk biss minħabba li mhux il-parametri kollha meħtieġa għall xcodebuild, trid tindika - gym se jifhem b'mod indipendenti fejn u x'jinsab. U għal aktar irfinar, tista 'tispeċifika l-istess ċwievet bħal fil xcodebuild, l-ismijiet taċ-ċwievet biss huwa aktar ċar.
Din id-darba, grazzi għall-ġinnasju u l-formatter xcpretty integrat, il-build logs saru ħafna aktar leġibbli. Dan beda jiffranka l-ħin fuq l-iffissar ta 'assemblaġġi miksura, u xi kultant it-tim ta' rilaxx jista 'jidher waħdu.
Sfortunatament, kejl tal-veloċità tal-assemblaġġ xcodebuild и gym Aħna ma għamilniex, iżda se nafdaw id-dokumentazzjoni - sa 30% ta 'veloċità.
Proċess uniku għall-applikazzjonijiet kollha
Sena 2018 u preżenti
Sal-2018, il-proċess tal-bini u t-tnedija ta 'applikazzjonijiet kompletament imċaqlaq għal Jenkins, l-iżviluppaturi waqfu jirrilaxxaw mill-magni tagħhom, u t-tim tar-rilaxx biss kellu d-dritt li jirrilaxxa.
Diġà ridna ntejbu t-tnedija tat-testijiet u l-analiżi statika, u l-iskripts tagħna kibru u kibru. Kiber u nbidlet flimkien mal-applikazzjonijiet tagħna. Dak iż-żmien kien hemm madwar applikazzjonijiet 10. Meta wieħed iqis li għandna żewġ pjattaformi, jiġifieri madwar 20 skripts "ħajja".
Kull darba li ridna nżidu pass ġdid mal-iskript, kellna nikkopja-pejstna l-biċċiet fl-iskripts tal-qoxra kollha. Forsi stajna ħdimna aktar bir-reqqa, iżda ħafna drabi bidliet bħal dawn spiċċaw f'typos, li saru filgħaxija għat-tim tar-rilaxx biex jiffissa skripts u jiskopri liema raġel intelliġenti żied dan il-kmand u x'jagħmel fil-fatt. B'mod ġenerali, ma jistax jingħad li l-iskripts għall-assemblaġġ għal pjattaforma waħda kienu tal-inqas xi ftit simili. Għalkemm żgur li għamlu l-istess ħaġa.
Sabiex jinbeda proċess għal applikazzjoni ġdida, kien meħtieġ li tqatta 'ġurnata biex tagħżel verżjoni "ġdida" ta' dawn l-iskripts, tiddibaggjaha u tgħid li "iva, taħdem."
Fis-sajf tal-2018, erġajna ħares lejn il-fastlane li għadu qed jiżviluppa.
Kompitu #1: agħmel fil-qosor il-passi kollha tal-iskrittura u erġa' iktebhom f'Fastfile
Meta bdejna, l-iskripts tagħna dehru qishom drapp tas-saqajn li jikkonsisti mill-passi u l-krozzi kollha f'kitba ta 'qoxra waħda f'Jenkins. Għadna ma qlibniex għal pipeline u diviżjoni bi stadju.
Ħarsa lejn dak li għandna u identifikajna 4 passi li jaqblu mad-deskrizzjoni tas-CI/CD tagħna:
test — it-twettiq tat-testijiet tal-unità tal-iżviluppatur, il-kalkolu tal-kopertura,
sonar - iniedi l-linters kollha u jibgħat rapporti lil SonarQube,
skjerament — jibgħat artifact lil alpha (TestFlight).
U jekk ma tidħolx fid-dettalji, billi tħalli barra ċ-ċwievet użati fl-azzjonijiet, ikollok dan il-Fastfile:
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
Fil-fatt, l-ewwel Fastfile tagħna rriżulta li kien mostruż, meta wieħed iqis xi wħud mill-krozzi li għadna bżonnna u n-numru ta 'parametri li ssostitwijna:
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
Fl-eżempju ta 'hawn fuq, parti biss mill-parametri li għandna bżonn nispeċifikaw: dawn huma l-parametri tal-bini - skema, konfigurazzjoni, ismijiet tal-Profil tal-Provvista, kif ukoll parametri ta' distribuzzjoni - ID tat-tuffieħ tal-kont tal-iżviluppatur, password, ID tal-applikazzjoni, eċċ fuq. Bħala l-ewwel approssimazzjoni, aħna npoġġu dawn iċ-ċwievet kollha f'fajls speċjali - Gymfile, Matchfile и Appfile.
Issa f'Jenkins tista' ssejjaħ kmandi qosra li ma jċajprax il-vista u li jinqraw faċilment mill-għajn:
X'ħadt? Kmandi ċari għal kull pass. Skripts imnaddfa, irranġati pulit f'fajls fastlane. Nifraħ, tlaqna lejn l-iżviluppaturi talbuhom biex iżidu dak kollu li kellhom bżonn mar-repożitorji tagħhom.
Iżda maż-żmien indunajna li se niltaqgħu ma' l-istess diffikultajiet - xorta jkollna 20 script ta' assemblaġġ li b'xi mod jew ieħor jibdew jgħixu ħajjithom, ikun aktar diffiċli li jeditjawhom, peress li l-iskripts jimxu għal repożitorji, u ma kellniex aċċess hemm. U, b'mod ġenerali, mhux se jkun possibbli li nsolvu l-uġigħ tagħna b'dan il-mod.
Kompitu #2: tikseb Fastfile wieħed għal N applikazzjonijiet
Issa jidher li s-soluzzjoni tal-problema mhix daqshekk diffiċli - issettja l-varjabbli, u ejja. Iva, fil-fatt, hekk ġiet solvuta l-problema. Iżda fil-mument meta ħriġna, la kellna għarfien espert fil-fastlane innifsu, u lanqas f'Ruby, li fih hemm miktub fastlane, u lanqas eżempji utli fuq in-netwerk - kull min kiteb dwar fastlane imbagħad kien limitat għal eżempju għal applikazzjoni waħda għal iżviluppatur wieħed.
Fastlane jista 'jimmaniġġja varjabbli ambjentali, u diġà ppruvajna dan billi waqqafna l-password Keychain:
ENV['KEYCHAIN_PASSWORD']
Wara li ħares lejn l-iskripts tagħna, identifikajna l-partijiet komuni:
#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
Issa, sabiex nibdew nużaw dawn iċ-ċwievet fil-fajls fastlane, kellna nifhmu kif inwassluhom hemmhekk. Fastlane għandu soluzzjoni għal dan: tagħbija varjabbli permezz dotenv. Id-dokumentazzjoni tgħid li jekk huwa importanti għalik li tagħbija ċwievet għal skopijiet differenti, oħloq diversi fajls ta 'konfigurazzjoni fid-direttorju fastlane .env, .env.default, .env.development.
U mbagħad iddeċidejna li nużaw din il-librerija ftit differenti. Ejja npoġġu fir-repożitorju tal-iżviluppaturi mhux l-iskripts tal-fastlane u l-meta-informazzjoni tiegħu, iżda ċ-ċwievet uniċi ta 'din l-applikazzjoni fil-fajl .env.appName.
Infushom Fastfile, Appfile, Matchfile и Gymfile, ħbejna f'repożitorju separat. Hemm moħbi fajl addizzjonali b'ċwievet tal-password minn servizzi oħra - .env.
Tista 'tara eżempju hawn.
Fuq CI, is-sejħa ma nbidlitx ħafna; ġiet miżjuda ċavetta ta' konfigurazzjoni għal applikazzjoni speċifika:
Ħalliet din is-soluzzjoni għalissa, għalkemm Fastlane għandu soluzzjoni għat-tniżżil ta ' Fastfile permezz azzjoniimport_from_git, iżda jaħdem biss għal Fastfile, iżda mhux għal fajls oħra. Jekk trid "verament sabiħa", tista 'tikteb tiegħek action.
Sar sett simili għall-applikazzjonijiet Android u ReactNative, il-fajls huma fl-istess repożitorju, iżda f'fergħat differenti iOS, android и react_native.
Meta t-tim tar-rilaxx irid iżid xi pass ġdid, il-bidliet fl-iskrittura jiġu rreġistrati permezz ta 'MR f'git, m'għadx hemm bżonn li tfittex il-ħatja ta' skripts miksura, u b'mod ġenerali, issa trid tipprova tkisserha.
Issa dak hu żgur
Preċedentement, qattajna ħin inżommu l-iskripts kollha, naġġornawhom u nirranġaw il-konsegwenzi kollha tal-aġġornamenti. Kien diżappuntanti ħafna meta r-raġunijiet għall-iżbalji u l-perijodi ta' waqfien fir-rilaxxi kienu typos sempliċi li tant kienu diffiċli biex iżżomm kont tagħhom fil-ġebla ta' skripts tal-qoxra. Issa żbalji bħal dawn huma mnaqqsa għall-minimu. Il-bidliet jiġu implimentati fl-applikazzjonijiet kollha f'daqqa. U tieħu 15-il minuta biex tpoġġi applikazzjoni ġdida fil-proċess - waqqaf pipeline mudell fuq CI u żid iċ-ċwievet mar-repożitorju tal-iżviluppatur.
Jidher li l-punt b'Fastfile għall-Android u l-firma tal-applikazzjoni għadu mhux spjegat; jekk l-artiklu huwa interessanti, nikteb kontinwazzjoni. Inkun kuntent li nara l-mistoqsijiet jew is-suġġerimenti tiegħek "kif issolvi din il-problema" fil-kummenti jew fuq Telegram bashkirova.