Mobile CICD usus: unum fastlane vexillum pro multis applicationibus mobilibus
Libet loqui de continua integratione et traditione pro applis mobilibus utendo fastlane. Quomodo CI/CD in omnibus applicationibus mobilibus deducendi sumus, quomodo ibi venimus et quid in fine factum est.
Iam satis materiae est in retiaculis in instrumento, quod initio tam deerat, ut non singillatim instrumentum describam, sed solum ad id quod tunc habuimus referemus;
Technical solution for volubilem CI/CD pro N-applicationibus
Prima pars priscis magis peractorum est, secunda est experientia quam tibi adhibere potes.
Ita historice factum est
anno 2015
Modo nos applicationes mobiles evolvere coepimus, tum nihil de integra integratione continua, de DevOpis et aliis rebus modum novimus. Quisque eget ipsum elit, eget scelerisque ex. Et si Android satis simplex convenerunt, signatum est .apk et eam ad Google Developer Console imposuisti, tunc pro iOS instrumenti distributionis per Xcode cum magnis vesperis nobis reliquit - conatus ad archivum saepe in erroribus deponi et iterum tentare debebamus. Contigit elit antecedens non pluries in mense codicem scribere, sed applicationem emittere.
anno 2016
Creverant, iam cogitabamus quomodo tincidunt liberaret a toto die ad remissionem, et altera applicatio etiam apparuit, quae solum nos magis ad automationem impulit. Eodem anno Jenkins primum instituimus et fasciculum scriptorum FORMIDULOSUS scripsimus, simillimum illis quae fastlane in suis documentis ostendit.
Infeliciter, usque nunc tantum tincidunt nostri sciverunt quomodo haec scripta operantur et quare hic perennis clavium acervus necessarius est, et cum aliquid iterum rupit, "vesperes splendidis" pro analysione tigna tulerunt.
anno 2017
Hoc anno comperimus fastlane rem esse talem. Nulla erat tanta notitia quanta nunc est - quam ut unus ordiri possit, quomodo uti. Ipsum instrumentum tunc adhuc rudis erat: constantes errores tantum nos fefellerunt et difficile erat credere in magicis automationibus quam promiserunt.
Sed praecipuae utilitates in core fastlane comprehensae sunt gym ΠΈ pilotcuravimus proficisci.
Emendatae sunt, si modo quia non omnes parametri sunt xcodebuild, Indicare debes - gym libere intelliget ubi et quid sit. Et ad subtiliorem indaginem, claves easdem specificare potes ac in xcodebuildsolum nomen clavium clarius est.
Hoc tempore, propter gym et formatorem constructum in xcpretty, ligna aedificanda multo magis legibilia facta sunt. Hoc tempus servare coepit in comitiis fractis figendi, et interdum emissio quadrigis suis propriis poterat videri.
Infeliciter, ecclesia celeritate mensuras xcodebuild ΠΈ gym Hoc non fecimus, sed documenta speramus - usque ad 30% velocitatem.
Unius processus pro omnibus applicationibus
Anno MMXVIII et praesenti
Per 2018, processus aedificationis et applicationes evolutae Jenkins perfecte motae sunt, tincidunt e machinis dimittendis cessaverunt, et solum quadrigis emissio ius solvendi habuit.
Iam voluimus emendare missionem testium et analysis statice, et scripta nostra creverunt et creverunt. Creverunt et mutaverunt cum applicationibus nostris. Illo tempore erant circiter 10 applicationes. Considerans quod duo tabulata habemus, quod est de 20 scriptis "vivis".
Quotiescumque novum gradum scriptionis addere voluimus, fragmenta crustulum in omnem testam scriptam habuimus. Fortassis diligentius laborasse potuimus, sed saepe tales mutationes in typos finitae sunt, quae in vesperas versae sunt ut turmae emissio figere scripta et cognosceret quis dolor guy hoc mandatum addidit et quid actu facit. In universum dici non potest scripta conventus pro uno suggestu fuisse saltem aliquid simile. Etsi certe idem fecerunt.
Ut processum novam applicationis inire, necesse fuit diem desumere ut versionem "novam" harum scriptorum legeret, eam debug et dicere "ita operatur."
Aestate MMXVIII, iterum spectavimus ad fastlane adhuc progredientem.
Negotium # I: Summatim omnes scriptor gradus et rescribe in Fastfile
Cum coepimus, scripta nostra vidi quasi pannum ex omnibus gradibus et fusum in una scriptura Jenkins in testa. Nondum switched ad fistulam et divisionem per scenam nondum habemus.
Inspeximus ea quae habemus et identificantur 4 gradus qui descriptioni nostrae CI/CD aptant:
test - elit cursus unitatis probat, calculandum coverage;
sonar - linters omnes immittit et nuntios mittit ad SonarQube;
explicandam - mittens artificium ad alpha (TestFlight).
Et si in details non ingredieris, omissis clavibus in actionibus adhibitis, hoc fastigium habebis:
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
Re quidem vera, primum Fastfile nostrum evasit monstrum, considerans aliquot fusculas adhuc necessarias et parametris quos substituimus;
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
In specimine supra, tantum partem parametri designare oportet: hi sunt parametri - schema, figuratio, nominum provisio provisio, necnon parametri distributio - Apple ID rationi elit, tesserae, applicationis ID, et sic reliqua. Ad primam approximationem, has omnes claves in specialibus fasciculis ponemus. Gymfile, Matchfile ΠΈ Appfile.
Nunc in Jenkins dicere potes brevia mandata quae visum non suffundunt et oculo facile lecta sunt;
Quid habuistis? Patet per singulos gradus imperata. Scripta purganda, in scriniis fastlane eleganter dispositis. Laeti venimus ad tincidunt rogantes ut omnia quae necessaria erant ad repositoria adderet.
At nos intelleximus in tempore easdem difficultates occurrere - volumus tamen 20 scripta frequentia, quae aliter vel aliter vitam suam incipiunt vivere, difficilius esset eas recensere, cum scripta repositoria moverent; nec accessum habemus ibi. Et generaliter hoc modo dolorem nostrum solvere non poterit.
Negotium # II: ut unum Fastfile ad N applicationes
Nunc videtur quod problema solvendum non ita difficile sit - variabiles ponemus, et abeamus. Ita re vera id est quomodo problema solvitur. Sed in momento, quo hoc advenivimus, neque in ipsa fastlane peritiam habuimus, neque in Ruby, in quo fastlane scriptum est, neque in retiaculis utilia exempla - omnes qui de fastlane scripserunt tunc ad exemplum unius applicationis limitatum est. quis elit.
Fastlane variabiles ambitus tractari possunt, et id iam probavimus ponendo tesseram Keychain:
ENV['KEYCHAIN_PASSWORD']
Postquam scripta nostra inspeximus, partes communes notavimus;
#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
Nunc, ut his clauibus in fasciculis fastlaneis incipiamus, debebamus instare quomodo eas ibi traderemus. Fastlane huius solutionem habet: loading variabilium per dotenv. Documenta dicit, si magni momenti est tibi claves ad diversos usus onerare, plures tabellas conformationis crea in directorio fastlane. .env, .env.default, .env.development.
Et deinde hac bibliotheca paulo aliter uti decrevimus. In repositorium tincidunt non scriptorum fastlanum eiusque meta notitia, sed singulares claves huius applicationis in tabella locamus. .env.appName.
sibi Fastfile, Appfile, Matchfile ΠΈ Gymfilein reposito separato abscondimus. Additamentum fasciculi cum clavibus clavibus ex aliis officiis ibi latebat - .env.
Potes videre exemplum hic.
In CI, vocatio non multum mutatur, clavis configurationis pro applicatione specifica addita est:
Hanc solutionem nunc reliquit, quamvis Fastlane solutionem habeat per Fastfile deprimendi actionisimport_from_git, sed tantum pro Fastfile laborat, sed non pro aliis fasciculis. Si vis "vere pulchra", scribere potes tuum action.
Similis copia applicationum Android et ReactNative facta est, lima in reposito in eodem, sed in ramis diversis. iOS, android ΠΈ react_native.
Cum turmae emissio novum gradum addere vult, mutationes in scripto scriptae per MR in git, iam non opus est reos scriptorum fractorum quaerere, et in genere, nunc illud frangere conari debes.
Nunc id est pro certo
Antea tempus omnia scriptorum conservavimus, ea adaequare et omnia consectaria renovationis destinare. Valde frustretur cum rationes errorum et temporis in emissione typos simplices erant qui tam difficile erat ut in turbatione scriptorum testarum vestigia retinerent. Reducuntur autem huiusmodi errores ad minimum. Mutationes ad omnes applicationes simul evolvuntur. Et habet 15 minuta ut novam applicationem in processu ponas pipeline templates in CI et claves addere repositorium elit.
Videtur quod punctum cum Fastfile pro Android et applicatione subscriptio inexplicabilis maneret, si articulus est interesting, continuationem scribam. Laetus sum videre interrogationes tuas vel suggestiones "quam vis hanc quaestionem solvere" in commentaria vel in Telegram bashkirova.