Mobil CICD Erfahrung: ee Fastlane Standard fir vill mobil Uwendungen
Ech wéilt iwwer kontinuéierlech Integratioun a Liwwerung fir mobil Apps mat Fastlane schwätzen. Wéi mir CI/CD op all mobilen Applikatiounen ëmsetzen, wéi mir dohinner komm sinn a wat um Enn geschitt ass.
Et gëtt scho genuch Material am Netz um Tool, wat mir am Ufank sou gefeelt hunn, also wäert ech d'Tool bewosst net am Detail beschreiwen, awer nëmmen op dat wat mir deemools haten:
Hannergrond fir d'Entstoe vu mobilen CI / CD an der Firma
Technesch Léisung fir CI / CD fir N-Applikatiounen auszerollen
Den éischten Deel ass méi Nostalgie fir déi al Deeg, an deen zweeten ass eng Erfahrung, déi Dir op Iech selwer gëlle kënnt.
Dëst ass wéi et historesch geschitt ass
2015 Joer
Mir hunn just ugefaang mobil Uwendungen z'entwéckelen, dunn wousste mir näischt iwwer kontinuéierlech Integratioun, iwwer DevOps an aner fashionable Saachen. All Applikatiounsupdate gouf vum Entwéckler selwer vu senger Maschinn ausgerullt. A wann et fir Android ganz einfach ass - zesummegesat, ënnerschriwwen .apk an huet et op d'Google Developer Console eropgelueden, dunn huet fir iOS dat deemools Verdeelungsinstrument iwwer Xcode eis super Owender hannerlooss - Versich fir den Archiv erofzelueden sinn dacks a Feeler ofgeschloss a mir hu missen nach eng Kéier probéieren. Et huet sech erausgestallt datt de fortgeschrattsten Entwéckler kee Code e puer Mol am Mount schreift, awer éischter d'Applikatioun verëffentlecht.
2016 Joer
Mir sinn opgewuess, mir hu scho Gedanken iwwer wéi d'Entwéckler vun engem ganzen Dag fir eng Verëffentlechung befreit ginn, an eng zweet Applikatioun ass och opgetaucht, déi eis nëmmen méi Richtung Automatioun gedréckt huet. Datselwecht Joer hu mir Jenkins fir d'éischte Kéier installéiert an eng Rëtsch grujeleg Scripte geschriwwen, ganz ähnlech wéi déi, déi Fastlane a senger Dokumentatioun weist.
Leider woussten bis elo nëmmen eis Entwéckler wéi dës Skripte funktionnéieren a firwat dësen endlosen Stack vu Schlësselen gebraucht gëtt, a wann erëm eppes gebrach ass, kruten se déi "schéin Owender" fir Logbicher ze analyséieren.
2017 Joer
Dëst Joer hu mir geléiert datt et sou eppes wéi Fastlane gëtt. Et war net sou vill Informatioun wéi et elo ass - wéi een ufänken, wéi se ze benotzen. An d'Instrument selwer war zu där Zäit nach ëmmer rau: konstante Feeler hunn eis nëmmen enttäuscht an et war schwéier un der magescher Automatioun ze gleewen, déi se versprach hunn.
Wéi och ëmmer, d'Haapt Utilities abegraff am Fastlane Kär sinn gym и pilot, mir hunn et fäerdeg bruecht et unzefänken.
Si goufen verbessert, wann nëmmen well net all Parameteren néideg fir xcodebuild, Dir musst uginn - gym wäert onofhängeg verstoen wou a wat läit. A fir méi Feintuning kënnt Dir déiselwecht Schlësselen spezifizéieren wéi an xcodebuild, nëmmen den Numm vun de Schlësselen ass méi kloer.
Dës Kéier, dank dem Fitnessstudio an dem agebaute xcpretty Formatter, sinn d'Build-Logbicher vill méi liesbar ginn. Dëst huet ugefaang Zäit ze spueren fir futtis Versammlungen ze fixéieren, an heiansdo konnt d'Verëffentlechungsteam et selwer erausfannen.
Leider, Assemblée Vitesse Miessunge xcodebuild и gym Mir hunn et net gemaach, awer mir vertrauen d'Dokumentatioun - bis zu 30% Geschwindegkeet.
Eenzege Prozess fir all Uwendungen
Joer 2018 a presentéieren
Bis 2018 ass de Prozess fir Uwendungen ze bauen an auszerollen komplett op Jenkins geplënnert, d'Entwéckler hunn opgehalen hir Maschinnen ze befreien, an nëmmen d'Verëffentlechungsteam hat d'Recht ze befreien.
Mir wollten schonn de Start vun Tester a statesch Analyse verbesseren, an eis Scripte sinn gewuess a gewuess. Gewuess a geännert zesumme mat eisen Uwendungen. Deemools waren et ongeféier 10 Applikatiounen, wann ee bedenkt datt mir zwou Plattformen hunn, dat sinn ongeféier 20 "lieweg" Scripten.
All Kéier wann mir en neie Schrëtt un de Skript wollten addéieren, hu mir d'Stécker an all Shell-Skripten ze kopéieren-paste. Vläicht hätte mir méi virsiichteg geschafft, awer dacks hunn esou Ännerungen an Tippfehler ofgeschloss, déi an Owender fir d'Verëffentlechungsteam verwandelt goufen fir Scripten ze fixéieren an erauszefannen, wéi en Smart Guy dëse Kommando bäigefüügt huet a wat et tatsächlech mécht. Am Allgemengen kann et net gesot ginn datt d'Skripte fir d'Versammlung fir eng Plattform op d'mannst e bësse ähnlech waren. Obwuel si sécherlech déi selwecht Saach gemaach.
Fir e Prozess fir eng nei Applikatioun unzefänken, war et néideg en Dag ze verbréngen fir eng "frësch" Versioun vun dëse Scripten ze wielen, debuggen a soen datt "jo, et funktionnéiert."
Am Summer 2018 hu mir nach eng Kéier op déi nach ëmmer entwéckelt Fastlane gekuckt.
Aufgab #1: resüméiert all Skript Schrëtt a schreift se an Fastfile ëm
Wéi mir ugefaang hunn, hunn eis Scripte ausgesinn wéi e Foussduch, deen aus all de Schrëtt a Kruuchten an engem Shell-Skript zu Jenkins besteet. Mir sinn nach net op Pipeline an Divisioun no Etapp gewiesselt.
Mir hunn gekuckt wat mir hunn an 4 Schrëtt identifizéiert déi d'Beschreiwung vun eisem CI/CD passen:
Test - Lafen Entwéckler Eenheet Tester, Berechent Ofdeckung,
sonar - lancéiert all Linters a schéckt Berichter un SonarQube,
deploy - schéckt en Artefakt op Alpha (TestFlight).
A wann Dir net an d'Detailer gitt, d'Schlësselen auszeginn, déi an Aktiounen benotzt ginn, kritt Dir dës 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
Tatsächlech huet eis éischt Fastfile monstréis erausgestallt, wann Dir e puer vun de Krutchen berücksichtegt déi mir nach ëmmer gebraucht hunn an d'Zuel vun de Parameteren déi mir ersat hunn:
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
Am Beispill hei uewen, nëmmen en Deel vun de Parameteren déi mir musse spezifizéieren: dëst sinn d'Build-Parameteren - Schema, Konfiguratioun, Provision Profil Nimm, souwéi Verdeelungsparameter - Apple ID vum Entwécklerkonto, Passwuert, Applikatioun ID, etc. op. Als éischt Approximatioun setzen mir all dës Schlësselen a spezielle Dateien - Gymfile, Matchfile и Appfile.
Elo zu Jenkins kënnt Dir kuerz Kommandoen uruffen, déi d'Vue net verschwannen a liicht vum Auge liesbar sinn:
Wat hues du kritt? Kloer Kommandoe fir all Schrëtt. Gebotzt Scripten, ordentlech a Fastlane Dateien arrangéiert. Gefreet, mir si bei d'Entwéckler gelaf a gefrot hinnen alles ze addéieren wat se an hir Repositories gebraucht hunn.
Awer mir hu mat der Zäit gemierkt datt mir déi selwecht Schwieregkeeten begéinen - mir wäerten nach ëmmer 20 Assemblée Scripten hunn, déi op déi eng oder aner Manéier hiert eegent Liewen ufänken, et wier méi schwéier se z'änneren, well d'Skripten an d'Repositories réckelen, a mir haten net Zougang do. An allgemeng wäert et net méiglech sinn eis Péng esou ze léisen.
Aufgab #2: kritt eng eenzeg Fastfile fir N Uwendungen
Elo schéngt et datt d'Léisung vum Problem net sou schwéier ass - set d'Variabelen a loosst eis goen. Jo, tatsächlech, dat ass wéi de Problem geléist gouf. Awer am Moment wou mir et geschrauft hunn, hu mir weder Expertise am Fastlane selwer, nach am Ruby, an deem Fastlane geschriwwen ass, nach nëtzlech Beispiller am Netz - jidderee deen iwwer Fastlane geschriwwen huet, war limitéiert op e Beispill fir eng Applikatioun fir eent Entwéckler.
Fastlane kann Ëmfeldvariablen handhaben, a mir hunn dëst scho probéiert andeems Dir de Keychain Passwuert setzt:
ENV['KEYCHAIN_PASSWORD']
Nodeems mir eis Skripte gekuckt hunn, hu mir déi gemeinsam Deeler identifizéiert:
#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
Elo, fir dës Schlësselen a Fastlane Dateien unzefänken, hu mir misse erausfannen wéi se dohinner liwweren. Fastlane huet eng Léisung fir dëst: Luede Variabelen iwwer dotenv. D'Dokumentatioun seet datt wann et wichteg ass fir Iech Schlësselen fir verschidden Zwecker ze lueden, erstellt verschidde Konfiguratiounsdateien am Fastlane Verzeichnis .env, .env.default, .env.development.
An dunn hu mir décidéiert dës Bibliothéik e bëssen anescht ze benotzen. Loosst eis am Repository vum Entwéckler net d'Fastlane Scripten a seng Meta Informatioun setzen, awer déi eenzegaarteg Schlësselen vun dëser Applikatioun an der Datei .env.appName.
Selwer Fastfile, Appfile, Matchfile и Gymfile, hu mir et an engem separaten Repository verstoppt. Eng zousätzlech Datei mat Passwuertschlësselen vun anere Servicer war do verstoppt - .env.
Dir kënnt e Beispill gesinn hei.
Op CI huet den Uruff net vill geännert; e Konfiguratiounsschlëssel fir eng spezifesch Applikatioun gouf derbäigesat:
Lénks dës Léisung fir elo, obwuel Fastlane eng Léisung huet fir de Fastfile erofzelueden iwwer Aktiounenimport_from_git, awer et funktionnéiert nëmme fir Fastfile, awer net fir aner Dateien. Wann Dir wëllt "wierklech schéin", Dir kënnt Är eege schreiwen action.
En ähnleche Set gouf fir Android Uwendungen a ReactNative gemaach, d'Dateien sinn am selwechte Repository, awer a verschiddene Branchen iOS, android и react_native.
Wann d'Verëffentlechungsteam e puer neie Schrëtt derbäi wëllt, ginn Ännerungen am Skript iwwer MR a git opgeholl, et ass net méi néideg fir d'Täter vu futtis Scripten ze sichen, an allgemeng, elo musst Dir probéieren et ze briechen.
Elo ass et sécher
Virdrun hu mir Zäit verbruecht fir all Skripte z'erhalen, se ze aktualiséieren an all d'Konsequenze vun Updates ze fixéieren. Et war ganz enttäuschend wann d'Grënn fir Feeler an Ënnerbriechungen an Verëffentlechungen einfache Schreiffehler waren, déi sou schwéier waren ze verfollegen am Jumble vu Shellskripter. Elo ginn esou Feeler op e Minimum reduzéiert. Ännerungen ginn op all Applikatiounen gläichzäiteg ausgerullt. An et dauert 15 Minutten fir eng nei Applikatioun an de Prozess ze setzen - eng Schabloun Pipeline op CI opzestellen an d'Schlësselen un de Repository vum Entwéckler bäizefügen.
Et schéngt, datt de Punkt mat Fastfile fir Android an Applikatioun Ënnerschrëft onerklärlech bleift; wann den Artikel interessant ass, schreiwen ech eng Fortsetzung. Ech wäert frou Är Froen oder Virschléi ze gesinn "wéi géift Dir dëse Problem léisen" an de Kommentaren oder op Telegram bashkirova.