ProHoster > Blog > Administrazioa > Mugikorreko CICD esperientzia: mugikorretarako aplikazio askorentzat fastlane estandar bat
Mugikorreko CICD esperientzia: mugikorretarako aplikazio askorentzat fastlane estandar bat
Fastlane erabiltzen duten aplikazio mugikorretarako etengabeko integrazioari eta entregari buruz hitz egin nahiko nuke. Nola inplementatzen dugun CI/CD aplikazio mugikor guztietan, nola iritsi garen eta azkenean zer gertatu den.
Dagoeneko nahikoa material dago sarean tresnari buruz, hasieran hain falta zitzaigun, beraz, nahita ez dut tresna zehatz-mehatz deskribatuko, baina orduan genuena bakarrik aipatuko dut:
N aplikazioetarako CI/CD zabaltzeko soluzio teknikoa
Lehen zatia garai zaharrekiko nostalgia gehiago da, eta bigarrena zeure buruari aplikatzeko moduko esperientzia bat da.
Horrela gertatu zen historikoki
2015. urtea
Mugikorretarako aplikazioak garatzen hasi berri ginen, gero ez genekien ezer etengabeko integrazioaz, DevOps eta modako beste gauzei buruz. Aplikazioen eguneratze bakoitza garatzaileak berak zabaldu zuen bere makinatik. Eta Android-erako nahiko erraza bada: muntatua, sinatuta .apk eta Google Developer Consolera kargatu zuen, gero iOS-erako orduan Xcode bidezko banaketa tresnak arratsalde bikainak utzi zizkigun - artxiboa deskargatzeko saiakerak askotan akatsak izaten ziren eta berriro saiatu behar izan genuen. Garatzaile aurreratuenak ez duela kodea idazten hilean behin baino gehiagotan, aplikazioa askatzen du.
2016. urtea
Hazi ginen, jada pentsatuta geneukan garatzaileak askatzeko egun osotik askatzeko moduari buruz, eta bigarren aplikazio bat ere agertu zen, eta horrek automatizaziora gehiago bultzatu gintuen. Urte horretan bertan, Jenkins instalatu genuen lehen aldiz eta gidoi beldurgarri mordoa idatzi genuen, fastlane-k bere dokumentazioan erakusten dituenen oso antzekoak.
Zoritxarrez, orain arte gure garatzaileek bakarrik zekiten script hauek nola funtzionatzen zuten eta zergatik behar zen gako-pila amaigabe hori, eta zerbait berriro hautsi zenean, "arratsalde zoragarriak" lortu zituzten erregistroak aztertzeko.
2017. urtea
Aurten fastlane bezalako gauza bat dagoela jakin dugu. Ez zegoen orain bezainbeste informazio: nola hasi, nola erabili. Eta tresna bera oraindik gordina zen garai hartan: etengabeko akatsek hutsik egiten gintuzten eta kosta egiten zitzaigun agintzen zuten automatizazio magikoan sinestea.
Hala ere, fastlane nukleoan sartzen diren utilitate nagusiak hauek dira gym ΠΈ pilot, hastea lortu dugu.
Hobetu egin dira, besterik ez bada, ez direlako beharrezkoak diren parametro guztiak xcodebuild, adierazi behar duzu - gym modu independentean ulertuko du non eta zer dagoen. Eta doikuntza gehiago lortzeko, tekla berdinak zehaztu ditzakezu xcodebuild, gakoen izendapena baino ez da argiagoa.
Oraingoan, gimnasioari eta xcpretty formateatu integratuari esker, eraikitze-erregistroak askoz ere irakurgarriagoak izan dira. Honek apurtutako muntaiak konpontzen denbora aurrezten hasi zen, eta batzuetan kaleratze-taldeak bere kabuz asmatu zezakeen.
Zoritxarrez, muntaketa abiadura neurketak xcodebuild ΠΈ gym Ez dugu egin, baina dokumentazioan fidatuko gara: % 30eko abiadura.
Prozesu bakarra eskaera guztietarako
2018 urtea eta gaur egungoa
2018rako, aplikazioak eraikitzeko eta zabaltzeko prozesua Jenkinsera erabat mugitu zen, garatzaileek beren makinetatik askatzeari utzi zioten eta kaleratze-taldeak bakarrik zuen kaleratzeko eskubidea.
Dagoeneko probak eta analisi estatikoen abian jartzea hobetu nahi genuen, eta gure gidoiak hazi eta hazi egin ziren. Gure aplikazioekin batera hazi eta aldatu egin zen. Garai hartan 10 bat aplikazio zeuden.Bi plataforma ditugula kontuan hartuta, 20 bat gidoi βbiziβ dira.
Gidoiari urrats berri bat gehitu nahi genion bakoitzean, piezak kopiatu-itsatsi behar izaten genituen shell script guztietan. Beharbada, arreta handiagoz lan egin genezake, baina askotan horrelako aldaketak akatsetan amaitzen ziren, kaleratze-taldeak script-ak konpondu eta komando hau eta zer egiten duen jakiteko zein tipo adimendun gehitu zuen. Oro har, ezin da esan plataforma baterako muntatzeko gidoiak gutxienez antzeko samarrak zirenik. Zalantzarik gabe gauza bera egin zuten arren.
Aplikazio berri baterako prozesu bat hasteko, egun bat eman behar zen script horien bertsio "freskoa" hautatzeko, arazketa eta "bai, funtzionatzen duela" esateko.
2018ko udan, berriro ere garatzen ari den fastlanerantz begiratu genuen.
1. ataza: laburbildu script-urrats guztiak eta berridatzi Fastfile-n
Hasi ginenean, gure gidoiak Jenkins-en shell script bakarreko pauso eta makulu guztiekin osatutako oinetako bat zirudien. Oraindik ez gara kanalizaziora eta etapaka zatiketara aldatu.
Daukaguna aztertu eta gure CI/CDaren deskribapenarekin bat datozen 4 urrats identifikatu ditugu:
sonar - linter guztiak abiarazten ditu eta SonarQube-ra txostenak bidaltzen ditu,
inplementatu β artefaktu bat alphara bidaltzea (TestFlight).
Eta xehetasunetan sartzen ez bazara, ekintzetan erabilitako gakoak alde batera utzita, Fastfile hau jasoko duzu:
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
Izan ere, gure lehenengo Fastfile izugarria izan zen, oraindik behar genituen makulu batzuk eta ordezkatu genituen parametro kopurua kontuan hartuta:
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
Goiko adibidean, zehaztu behar ditugun parametroen zati bat bakarrik: hauek dira eraikitzeko parametroak - eskema, konfigurazioa, hornidura-profilaren izenak, baita banaketa-parametroak ere - garatzailearen kontuaren Apple IDa, pasahitza, aplikazioaren IDa, etab. on. Lehen hurbilketa gisa, gako horiek guztiak fitxategi berezietan jartzen ditugu - Gymfile, Matchfile ΠΈ Appfile.
Orain Jenkins-en ikuspegia lausotzen ez duten eta begiz erraz irakur daitezkeen komando laburrak dei ditzakezu:
Zer lortu duzu? Garbitu komandoak urrats bakoitzeko. Scriptak garbituak, txukun antolatuta fastlane fitxategietan. Pozik, garatzaileengana korrika joan ginen beren biltegietan behar zuten guztia gehitzeko eskatuz.
Baina denborarekin konturatu ginen zailtasun berberak topatuko genituela - oraindik 20 muntaia-gidoi izango genituzke nola edo hala beren bizitza bizitzen hasiko zirenak, zailagoa izango zen editatzea, gidoiak biltegietara eramango baitziren. eta ez genuen han sarbiderik. Eta, oro har, ezin izango da gure mina horrela konpondu.
2. ataza: lortu Fastfile bakar bat N aplikazioetarako
Orain badirudi arazoa konpontzea ez dela hain zaila - ezarri aldagaiak, eta goazen. Bai, egia esan, horrela konpondu zen arazoa. Baina izorratu genuen momentuan, ez geneukan ez fastlane-n bertan, ez Ruby-n, zeinetan fastlane idazten den, ezta sarean adibide erabilgarriak ere - orduan fastlane-ri buruz idazten zuten guztiak aplikazio baterako adibide batera mugatu ziren. garatzaile bat.
Fastlane-k ingurune-aldagaiak kudea ditzake, eta dagoeneko probatu dugu Keychain pasahitza ezarriz:
ENV['KEYCHAIN_PASSWORD']
Gure gidoiak aztertu ondoren, zati komunak identifikatu ditugu:
#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
Orain, gako hauek fastlane fitxategietan erabiltzen hasteko, han nola entregatu asmatu behar genuen. Fastlanek irtenbide bat du horretarako: aldagaiak dotenv bidez kargatzea. Dokumentazioak dio helburu ezberdinetarako gakoak kargatzea garrantzitsua bada, sortu hainbat konfigurazio fitxategi fastlane direktorioan .env, .env.default, .env.development.
Eta orduan liburutegi hau apur bat desberdin erabiltzea erabaki genuen. Jar ditzagun garatzaileen biltegian ez fastlane scriptak eta bere meta informazioa, baizik eta aplikazio honen gako bakarrak fitxategian. .env.appName.
beraiek Fastfile, Appfile, Matchfile ΠΈ Gymfile, aparteko biltegi batean ezkutatu dugu. Beste zerbitzu batzuetako pasahitz-gakoak dituen fitxategi gehigarri bat ezkutatu da bertan - .env.
Adibide bat ikus dezakezu Hemen.
CIn, deia ez da asko aldatu; aplikazio zehatz baterako konfigurazio-gako bat gehitu da:
Momentuz irtenbide hau utzi, nahiz eta Fastlane-k Fastfile bidez deskargatzeko irtenbide bat duen ekintzaimport_from_git, baina Fastfilerako bakarrik funtzionatzen du, baina ez beste fitxategietarako. βBenetan ederraβ nahi baduzu, zeurea idatz dezakezu action.
Android aplikazioetarako eta ReactNativerako antzeko multzo bat egin zen, fitxategiak biltegi berean daude, baina adar ezberdinetan iOS, android ΠΈ react_native.
Kaleratze-taldeak urrats berriren bat gehitu nahi duenean, gidoiaren aldaketak MR bidez grabatzen dira git-en, jada ez dago apurtutako scripten errudunak bilatu beharrik, eta, oro har, orain hausten saiatu behar duzu.
Orain hori da ziur
Aurretik, denbora eman genuen script guztiak mantentzen, eguneratzen eta eguneratzeen ondorio guztiak konpontzen. Oso etsigarria izan zen bertsioetan akatsen eta geldialdi-denboraren arrazoiak shell script-en nahasian jarraitzea hain zaila zen akats sinpleak zirenean. Orain horrelako akatsak gutxienera murrizten dira. Aldaketak aplikazio guztietan zabaltzen dira aldi berean. Eta 15 minutu behar dira aplikazio berri bat prozesuan jartzeko: konfiguratu txantiloi kanalizazioa CI-n eta gehitu gakoak garatzailearen biltegian.
Badirudi Fastfile-ren Android-erako eta aplikazioaren sinaduraren kontua argitu gabe geratzen dela; artikulua interesgarria bada, jarraipen bat idatziko dut. Pozik egongo naiz zure galdera edo iradokizunak "nola konponduko zenuke arazo hau" iruzkinetan edo Telegramen bashkirova.