ProHoster > Blogs > AdministrÄcija > MobilÄ CICD pieredze: viens ÄtrÄs joslas standarts daudzÄm mobilajÄm lietojumprogrammÄm
MobilÄ CICD pieredze: viens ÄtrÄs joslas standarts daudzÄm mobilajÄm lietojumprogrammÄm
Es vÄlÄtos runÄt par nepÄrtrauktu integrÄciju un mobilo lietotÅu piegÄdi, izmantojot fastlane. KÄ mÄs ievieÅ”am CI/CD visÄs mobilajÄs lietojumprogrammÄs, kÄ mÄs tur nokļuvÄm un kas notika beigÄs.
TÄ«klÄ jau ir pietiekami daudz materiÄla par rÄ«ku, kura mums tik ļoti pietrÅ«ka sÄkumÄ, tÄpÄc es apzinÄti neaprakstÄ«Å”u rÄ«ku sÄ«kÄk, bet atsaukÅ”os tikai uz to, kas mums bija toreiz:
PirmÄ daļa ir vairÄk nostalÄ£ija pÄc vecajiem laikiem, bet otrÄ ir pieredze, ko varat attiecinÄt uz sevi.
TÄ tas notika vÄsturiski
Gads 2015
MÄs tikko sÄkÄm izstrÄdÄt mobilÄs aplikÄcijas, tad neko nezinÄjÄm par nepÄrtrauktu integrÄciju, par DevOps un citÄm modernÄm lietÄm. Katru lietojumprogrammas atjauninÄjumu no savas maŔīnas izlaida pats izstrÄdÄtÄjs. Un, ja operÄtÄjsistÄmai Android tas ir pavisam vienkÄrÅ”i - salikts, parakstÄ«ts .apk un augÅ”upielÄdÄja to Google Developer Console, tad iOS toreizÄjais izplatÄ«Å”anas rÄ«ks, izmantojot Xcode, mums atstÄja lieliskus vakarus - mÄÄ£inÄjumi lejupielÄdÄt arhÄ«vu bieži beidzÄs ar kļūdÄm, un mums bija jÄmÄÄ£ina vÄlreiz. IzrÄdÄ«jÄs, ka progresÄ«vÄkais izstrÄdÄtÄjs vairÄkas reizes mÄnesÄ« neraksta kodu, bet gan izlaiž aplikÄciju.
Gads 2016
MÄs izaugÄm, mums jau bija domas par to, kÄ atbrÄ«vot izstrÄdÄtÄjus no veselas dienas izlaiÅ”anai, un parÄdÄ«jÄs arÄ« otra aplikÄcija, kas mÅ«s tikai vairÄk virzÄ«ja uz automatizÄciju. TajÄ paÅ”Ä gadÄ mÄs pirmo reizi instalÄjÄm Jenkins un uzrakstÄ«jÄm virkni biedÄjoÅ”u skriptu, kas ir ļoti lÄ«dzÄ«gi tiem, ko fastlane parÄda savÄ dokumentÄcijÄ.
DiemžÄl lÄ«dz Å”im tikai mÅ«su izstrÄdÄtÄji zinÄja, kÄ Å”ie skripti darbojas un kÄpÄc ir vajadzÄ«ga Ŕī nebeidzamÄ atslÄgu kaudze, un, kad atkal kaut kas sabojÄjÄs, viÅi saÅÄma āskaistos vakarusā žurnÄlu analÄ«zei.
Gads 2017
Å ogad mÄs uzzinÄjÄm, ka ir tÄda lieta kÄ fastlane. Nebija tik daudz informÄcijas kÄ tagad ā kÄ tÄdu iesÄkt, kÄ to izmantot. Un pats rÄ«ks tajÄ laikÄ vÄl bija neapstrÄdÄts: pastÄvÄ«gÄs kļūdas mÅ«s tikai sarÅ«gtinÄja, un bija grÅ«ti noticÄt maÄ£iskajai automatizÄcijai, ko viÅi solÄ«ja.
TomÄr galvenÄs utilÄ«tas, kas iekļautas fastlane kodolÄ, ir gym Šø pilot, mums izdevÄs to sÄkt.
Tie ir uzlaboti, kaut vai tÄpÄc, ka nav visi nepiecieÅ”amie parametri xcodebuild, jums jÄnorÄda - gym patstÄvÄ«gi sapratÄ«s, kur un kas atrodas. Lai veiktu precÄ«zÄku noregulÄjumu, varat norÄdÄ«t tos paÅ”us taustiÅus, kas norÄdÄ«ti xcodebuild, skaidrÄks ir tikai taustiÅu nosaukumi.
Å oreiz, pateicoties sporta zÄlei un iebÅ«vÄtajam xcpretty formatÄtÄjam, bÅ«vniecÄ«bas žurnÄli ir kļuvuÅ”i daudz salasÄmÄki. Tas sÄka ietaupÄ«t laiku, lai salabotu bojÄtus mezglus, un dažreiz atbrÄ«voÅ”anas komanda to varÄja izdomÄt pati.
DiemžÄl montÄžas Ätruma mÄrÄ«jumi xcodebuild Šø gym MÄs to nedarÄ«jÄm, taÄu uzticÄsimies dokumentÄcijai ā lÄ«dz pat 30% paÄtrinÄjums.
Viens process visiem lietojumiem
2018. gads un tagadne
LÄ«dz 2018. gadam lietojumprogrammu izveides un izlaiÅ”anas process pilnÄ«bÄ pÄrcÄlÄs uz Jenkins, izstrÄdÄtÄji pÄrtrauca izlaiÅ”anu no savÄm iekÄrtÄm, un tikai izlaiÅ”anas komandai bija tiesÄ«bas izlaist.
MÄs jau vÄlÄjÄmies uzlabot testu un statiskÄs analÄ«zes palaiÅ”anu, un mÅ«su skripti auga un auga. Auga un mainÄ«jÄs kopÄ ar mÅ«su lietojumprogrammÄm. TobrÄ«d bija ap 10 aplikÄciju.Å emot vÄrÄ, ka mums ir divas platformas, tie ir aptuveni 20 ādzÄ«viā skripti.
Katru reizi, kad vÄlÄjÄmies skriptam pievienot jaunu darbÄ«bu, mums bija jÄkopÄ un jÄielÄ«mÄ daļas visos Äaulas skriptos. VarbÅ«t varÄjÄm strÄdÄt rÅ«pÄ«gÄk, taÄu bieži Å”Ädas izmaiÅas beidzÄs ar drukas kļūdÄm, kas izvÄrtÄs par vakariem, kad izlaiduma komanda laboja skriptus un noskaidroja, kurÅ” gudrais puisis pievienoja Å”o komandu un ko tÄ patiesÄ«bÄ dara. KopumÄ nevar teikt, ka vienas platformas montÄžas skripti bija vismaz kaut cik lÄ«dzÄ«gi. Lai gan viÅi noteikti darÄ«ja to paÅ”u.
Lai sÄktu jaunas lietojumprogrammas procesu, bija jÄpavada diena, lai atlasÄ«tu Å”o skriptu āsvaiguā versiju, to atkļūdotu un pateiktu, ka ājÄ, tas darbojasā.
2018. gada vasarÄ atkal skatÄ«jÄmies uz joprojÄm attÄ«stoÅ”o fastlane.
1. uzdevums: apkopojiet visas skripta darbÄ«bas un pÄrrakstiet tÄs Fastfile
Kad mÄs sÄkÄm, mÅ«su skripti izskatÄ«jÄs kÄ kÄju lupatiÅa, kas sastÄv no visiem soļiem un kruÄ·iem vienÄ apvalka skriptÄ DženkinsÄ. MÄs vÄl neesam pÄrgÄjuÅ”i uz cauruļvadu un sadalÄ«Å”anu pa posmiem.
MÄs apskatÄ«jÄm to, kas mums ir, un noteicÄm 4 darbÄ«bas, kas atbilst mÅ«su CI/CD aprakstam:
tests ā izstrÄdÄtÄju vienÄ«bas testu izpilde, pÄrklÄjuma aprÄÄ·inÄÅ”ana,
hidrolokators ā palaiž visas lÄ«nijsistÄmas un nosÅ«ta ziÅojumus SonarQube,
izvietot ā artefakta nosÅ«tÄ«Å”ana uz alfa (TestFlight).
Un, ja neiedziļinÄsities detaļÄs, izlaižot darbÄ«bÄs izmantotos taustiÅus, jÅ«s iegÅ«sit Å”o 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
Faktiski mÅ«su pirmais Fastfile izrÄdÄ«jÄs briesmÄ«gs, Åemot vÄrÄ dažus mums joprojÄm nepiecieÅ”amos kruÄ·us un aizstÄto parametru skaitu:
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
IepriekÅ” minÄtajÄ piemÄrÄ norÄdÄ«ta tikai daļa no parametriem, kas mums jÄnorÄda: tie ir bÅ«vÄÅ”anas parametri ā shÄma, konfigurÄcija, nodroÅ”inÄjuma profila nosaukumi, kÄ arÄ« izplatÄ«Å”anas parametri ā izstrÄdÄtÄja konta Apple ID, parole, lietojumprogrammas ID utt. ieslÄgts. KÄ pirmo tuvinÄjumu mÄs visas Ŕīs atslÄgas ievietojam Ä«paÅ”os failos - Gymfile, Matchfile Šø Appfile.
Tagad DženkinsÄ varat izsaukt Ä«sas komandas, kas neaizmiglo skatu un ir viegli salasÄmas ar aci:
Ko tu dabÅ«ji? Skaidras komandas katram solim. IztÄ«rÄ«ti skripti, glÄ«ti sakÄrtoti fastlane failos. PriecÄdamies skrÄjÄm pie izstrÄdÄtÄjiem, lÅ«dzot pievienot visu nepiecieÅ”amo viÅu krÄtuvÄm.
Bet mÄs laikus sapratÄm, ka saskarsimies ar tÄm paÅ”Äm grÅ«tÄ«bÄm - mums joprojÄm bÅ«s 20 montÄžas skripti, kas tÄ vai citÄdi sÄks dzÄ«vot paÅ”i, tos rediÄ£Ät bÅ«s grÅ«tÄk, jo skripti pÄrcelsies uz krÄtuvÄm, un mums tur nebija piekļuves. Un vispÄr mÅ«su sÄpes tÄ atrisinÄt nebÅ«s iespÄjams.
2. uzdevums: iegÅ«stiet vienu Fastfile N lietojumprogrammÄm
Tagad Ŕķiet, ka problÄmas risinÄÅ”ana nemaz nav tik grÅ«ta ā iestati mainÄ«gos, un ejam. JÄ, patiesÄ«bÄ tÄ problÄma tika atrisinÄta. Bet tajÄ brÄ«dÄ«, kad mÄs to saskrÅ«vÄjÄm, mums nebija ne kompetences par paÅ”u fastlane, ne Ruby, kurÄ rakstÄ«ts fastlane, ne arÄ« noderÄ«gu piemÄru tÄ«klÄ - visi, kas toreiz rakstÄ«ja par fastlane, aprobežojÄs ar piemÄru vienai lietojumprogrammai. viens izstrÄdÄtÄjs.
Fastlane var apstrÄdÄt vides mainÄ«gos, un mÄs to jau esam izmÄÄ£inÄjuÅ”i, iestatot Keychain paroli:
#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
Tagad, lai sÄktu lietot Ŕīs atslÄgas fastlane failos, mums bija jÄizdomÄ, kÄ tÄs tur nogÄdÄt. Fastlane tam ir risinÄjums: mainÄ«go ielÄde, izmantojot dotenv. DokumentÄcijÄ teikts, ka, ja jums ir svarÄ«gi ielÄdÄt atslÄgas dažÄdiem mÄrÄ·iem, izveidojiet vairÄkus konfigurÄcijas failus fastlane direktorijÄ .env, .env.default, .env.development.
Un tad mÄs nolÄmÄm izmantot Å”o bibliotÄku nedaudz savÄdÄk. IzstrÄdÄtÄju repozitorijÄ ievietosim nevis fastlane skriptus un to metainformÄciju, bet gan Ŕīs lietojumprogrammas unikÄlÄs atslÄgas failÄ .env.appName.
PaÅ”i Fastfile, Appfile, Matchfile Šø Gymfile, mÄs to paslÄpÄm atseviÅ”Ä·Ä repozitorijÄ. Tur tika paslÄpts papildu fails ar paroles atslÄgÄm no citiem pakalpojumiem - .env.
JÅ«s varat redzÄt piemÄru Å”eit.
CI tÄ«klÄ zvans nav Ä«paÅ”i mainÄ«jies; ir pievienota noteiktas lietojumprogrammas konfigurÄcijas atslÄga:
PagaidÄm atstÄja Å”o risinÄjumu, lai gan Fastlane ir risinÄjums Fastfile lejupielÄdei, izmantojot rÄ«cÄ«baimport_from_git, taÄu tas darbojas tikai Fastfile, bet ne citiem failiem. Ja vÄlaties "patieÅ”Äm skaistu", varat rakstÄ«t savu action.
LÄ«dzÄ«gs komplekts tika izveidots Android lietojumprogrammÄm un ReactNative, faili atrodas vienÄ repozitorijÄ, bet dažÄdÄs filiÄlÄs iOS, android Šø react_native.
Kad izlaiduma komanda vÄlas pievienot kÄdu jaunu soli, izmaiÅas skriptÄ tiek ierakstÄ«tas caur MR iekÅ”Ä git, vairs nav jÄmeklÄ skriptu lÅ«Å”anas vaininieki un vispÄr tagad jÄmÄÄ£ina to lauzt.
Tagad tas ir noteikti
IepriekÅ” mÄs pavadÄ«jÄm laiku visu skriptu uzturÄÅ”anai, to atjauninÄÅ”anai un visu atjauninÄÅ”anas seku novÄrÅ”anai. Tas bija ļoti neapmierinoÅ”i, kad kļūdu un dÄ«kstÄves iemesli laidienos bija vienkÄrÅ”as drukas kļūdas, kurÄm bija tik grÅ«ti izsekot Äaulas skriptu jucekliem. Tagad Å”Ädas kļūdas ir samazinÄtas lÄ«dz minimumam. IzmaiÅas tiek ieviestas visÄs lietojumprogrammÄs vienlaikus. Un jaunas lietojumprogrammas ievieÅ”ana procesÄ aizÅem 15 minÅ«tes ā izveidojiet veidnes konveijeru CI un pievienojiet atslÄgas izstrÄdÄtÄja repozitorijai.
Å Ä·iet, ka jÄga ar Fastfile for Android un aplikÄcijas parakstu paliek neizskaidrota, ja raksts bÅ«s interesants, rakstÄ«Å”u turpinÄjumu. PriecÄÅ”os redzÄt jÅ«su jautÄjumus vai ieteikumus ākÄ jÅ«s atrisinÄtu Å”o problÄmuā komentÄros vai Telegram baÅ”kirova.