ProHoster > Blogi > Haldamine > Mobiilne CICD kogemus: üks kiirrea standard paljude mobiilirakenduste jaoks
Mobiilne CICD kogemus: üks kiirrea standard paljude mobiilirakenduste jaoks
Tahaksin rääkida mobiilirakenduste pidevast integreerimisest ja kohaletoimetamisest, kasutades kiirlainet. Kuidas juurutame CI/CD kõigis mobiilirakendustes, kuidas me selleni jõudsime ja mis lõpuks juhtus.
Tööriista kohta on võrgus juba piisavalt materjali, millest meil alguses nii puudus, nii et ma ei kirjelda seda tööriista üksikasjalikult, vaid viitan ainult sellele, mis meil siis oli:
Tehniline lahendus N-rakenduste jaoks mõeldud CI/CD kasutuselevõtuks
Esimene osa on rohkem nostalgia vanade aegade järele ja teine on kogemus, mida saad enda jaoks rakendada.
Nii see ajalooliselt juhtus
Aasta 2015
Alustasime just mobiilirakenduste arendamisega, siis ei teadnud me pidevast integreerimisest, DevOpsist ja muust moekast veel midagi. Iga rakenduse värskenduse käivitas arendaja ise oma masinast. Ja kui Androidi jaoks on see üsna lihtne - kokku pandud, allkirjastatud .apk ja laadis selle üles Google Developer Console'i, siis iOS-i jaoks jättis tollane Xcode'i kaudu levitamise tööriist meile toredad õhtud – arhiivi allalaadimise katsed lõppesid sageli vigadega ja tuli uuesti proovida. Selgus, et kõige arenenum arendaja ei kirjuta koodi mitu korda kuus, vaid pigem annab rakenduse välja.
Aasta 2016
Kasvasime üles, meil olid juba mõtted, kuidas arendajaid tervest päevast vabastamiseks vabastada, ja ilmus ka teine rakendus, mis lükkas meid ainult rohkem automatiseerimise poole. Samal aastal installisime Jenkinsi esimest korda ja kirjutasime hunniku hirmutavaid skripte, mis on väga sarnased neile, mida fastlane oma dokumentatsioonis näitab.
Kahjuks teadsid seni ainult meie arendajad, kuidas need skriptid töötavad ja milleks seda lõputut võtmevirna vaja on ning kui midagi jälle katki läks, said nad logide analüüsimiseks “ilusad õhtud”.
Aasta 2017
Sel aastal saime teada, et on olemas selline asi nagu fastlane. Infot ei olnud nii palju kui praegu – kuidas seda alustada, kuidas seda kasutada. Ja tööriist ise oli tol ajal veel toores: pidevad vead valmistasid meile ainult pettumuse ja nende lubatud maagilist automatiseerimist oli raske uskuda.
Peamised fastlane tuumas sisalduvad utiliidid on aga gym и pilot, meil õnnestus see käivitada.
Neid on täiustatud, kasvõi sellepärast, et mitte kõiki vajalikke parameetreid xcodebuild, peate märkima - gym saab iseseisvalt aru, kus ja mis asub. Ja täpsemaks häälestamiseks saate määrata samad klahvid, mis sisse lülitatud xcodebuild, ainult klahvide nimetused on selgemad.
Seekord on tänu jõusaalile ja sisseehitatud xcpretty vormindajale ehituslogid muutunud palju loetavamaks. See hakkas säästma katkiste sõlmede parandamise aega ja mõnikord sai vabastamismeeskond selle ise välja mõelda.
Kahjuks kokkupaneku kiiruse mõõtmised xcodebuild и gym Me ei teinud seda, kuid me usaldame dokumentatsiooni – kuni 30% kiirendus.
Üks protsess kõigi rakenduste jaoks
Aasta 2018 ja praegune
2018. aastaks kolis rakenduste loomise ja kasutuselevõtu protsess täielikult üle Jenkinsi, arendajad lõpetasid oma masinatest väljalaskmise ja väljalaskeõigus oli ainult väljalaskemeeskonnal.
Tahtsime juba täiustada testide käivitamist ja staatilist analüüsi ning meie skriptid kasvasid ja kasvasid. Kasvas ja muutus koos meie rakendustega. Sel ajal oli rakendusi umbes 10. Arvestades, et meil on kaks platvormi, on see umbes 20 "elava" skripti.
Iga kord, kui tahtsime skriptile uue sammu lisada, pidime tükid kõigisse kestaskriptidesse kopeerima ja kleepima. Võib-olla oleks võinud hoolikamalt töötada, kuid sageli lõppesid sellised muudatused kirjavigadega, mis kujunesid väljalaskemeeskonna õhtuteks skriptide parandamiseks ja uurimiseks, milline tark mees selle käsu lisas ja mida see tegelikult teeb. Üldiselt ei saa öelda, et ühe platvormi kokkupaneku skriptid oleksid vähemalt mõnevõrra sarnased. Kuigi nad tegid kindlasti sama asja.
Uue rakenduse protsessi käivitamiseks oli vaja kulutada päev, et valida nendest skriptidest "värske" versioon, siluda see ja öelda, et "jah, see töötab".
2018. aasta suvel vaatasime taaskord veel areneva kiirteele poole.
Ülesanne nr 1: võtke kokku kõik skripti sammud ja kirjutage need Fastfile'i ümber
Kui me alustasime, nägid meie skriptid Jenkinsis välja nagu jalalapp, mis koosnes kõigist sammudest ja karkudest ühes kestaskriptis. Me ei ole veel torujuhtmele ja etapiviisilisele jagamisele üle läinud.
Vaatasime, mis meil on, ja tuvastasime 4 sammu, mis sobivad meie CI/CD kirjeldusega:
Ja kui te ei lasku detailidesse, jättes välja toimingutes kasutatavad klahvid, saate selle Fastfile'i:
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
Tegelikult osutus meie esimene Fastfile koletuks, arvestades mõningaid veel vajaminevaid karkusid ja asendatud parameetrite arvu:
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
Ülaltoodud näites on ainult osa parameetritest, mida peame määrama: need on ehitusparameetrid - skeem, konfiguratsioon, pakkumise profiili nimed, aga ka levitamise parameetrid - arendajakonto Apple ID, parool, rakenduse ID jne. peal. Esimese ligikaudsusena panime kõik need võtmed spetsiaalsetesse failidesse - Gymfile, Matchfile и Appfile.
Nüüd saate Jenkinsis kutsuda lühikesi käske, mis ei hägusta vaadet ja on silmaga hõlpsasti loetavad:
Mis sa said? Selged käsud iga sammu jaoks. Puhastatud skriptid, mis on kenasti fastlane-failidesse paigutatud. Rõõmustades jooksime arendajate juurde, paludes neil kõik vajalik oma hoidlatesse lisada.
Kuid mõistsime õigeaegselt, et seisame silmitsi samade raskustega - meil on ikkagi 20 montaažiskripti, mis ühel või teisel viisil hakkavad elama oma elu, neid on raskem redigeerida, kuna skriptid liiguvad hoidlatesse, ja meil polnud sinna ligipääsu. Ja üldiselt pole meie valu niimoodi võimalik lahendada.
Ülesanne nr 2: hankige N rakenduse jaoks üks Fastfile
Nüüd tundub, et ülesande lahendamine polegi nii keeruline – pane muutujad paika ja läheme. Jah, tegelikult see probleem lahendatigi. Kuid sel hetkel, kui me asja ära keerasime, ei olnud meil teadmisi fastlane'i enda ega Ruby kohta, milles fastlane on kirjutatud, ega kasulikke näiteid võrgust - kõik, kes siis fastlane'ist kirjutasid, piirdusid ühe rakenduse näitega. üks arendaja.
Fastlane saab hakkama keskkonnamuutujatega ja oleme seda juba proovinud võtmehoidja parooli määramisega:
ENV['KEYCHAIN_PASSWORD']
Pärast skriptide vaatamist tuvastasime ühised osad:
#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
Nüüd, et hakata neid võtmeid fastlane failides kasutama, pidime välja mõtlema, kuidas need sinna toimetada. Fastlane’il on selleks lahendus: muutujate laadimine dotenv kaudu. Dokumentatsioon ütleb, et kui teil on oluline laadida võtmeid erinevatel eesmärkidel, looge fastlane kataloogis mitu konfiguratsioonifaili .env, .env.default, .env.development.
Ja siis otsustasime seda raamatukogu veidi teistmoodi kasutada. Asetame arendajate hoidlasse mitte fastlane'i skriptid ja selle metateave, vaid selle rakenduse unikaalsed võtmed failis .env.appName.
Ise Fastfile, Appfile, Matchfile и Gymfile, peitsime selle eraldi hoidlasse. Sinna peideti täiendav fail teiste teenuste paroolivõtmetega - .env.
Näete näidet siin.
CI puhul pole kõne palju muutunud, lisatud on konkreetse rakenduse konfiguratsioonivõti:
Jätsin selle lahenduse praeguseks, kuigi Fastlane'il on lahendus Fastfile'i allalaadimiseks tegevusimport_from_git, kuid see töötab ainult Fastfile'i, kuid mitte muude failide puhul. Kui soovite "tõesti ilusat", võite kirjutada oma action.
Sarnane komplekt tehti Androidi rakenduste ja ReactNative jaoks, failid on samas hoidlas, kuid erinevates harudes iOS, android и react_native.
Kui väljalaskemeeskond soovib lisada mõne uue sammu, salvestatakse skripti muudatused MR-i kaudu gitis, katkiste skriptide süüdlasi pole enam vaja otsida ja üldiselt tuleb nüüd proovida seda murda.
Nüüd on see kindel
Varem kulutasime aega kõigi skriptide hooldamisele, värskendamisele ja kõigi uuenduste tagajärgede parandamisele. Oli suur pettumus, kui väljaannete vigade ja seisakute põhjused olid lihtsad kirjavead, mida oli kestaskriptide segaduses nii raske jälgida. Nüüd on sellised vead viidud miinimumini. Muudatused juurutatakse kõikides rakendustes korraga. Ja uue rakenduse lisamiseks protsessi kulub 15 minutit – seadistage CI-s mallikonveier ja lisage võtmed arendaja hoidlasse.
Tundub, et Androidi jaoks mõeldud Fastfile'i ja rakenduse signatuuri mõte jääb selgitamata, kui artikkel on huvitav, siis kirjutan jätku. Mul on hea meel näha kommentaarides või Telegramis teie küsimusi või ettepanekuid "kuidas te selle probleemi lahendaksite". baškirova.