ProHoster > Blog > Rêveberî > Tecrûbeya CICD-a mobîl: yek standardek fastlane ji bo gelek serîlêdanên mobîl
Tecrûbeya CICD-a mobîl: yek standardek fastlane ji bo gelek serîlêdanên mobîl
Ez dixwazim li ser yekbûn û radestkirina domdar ji bo sepanên mobîl bi karanîna fastlane biaxivim. Em çawa CI/CD-ê li ser hemî serlêdanên mobîl bicîh dikin, em çawa gihîştin wir û di dawiyê de çi qewimî.
Jixwe materyalek têr li ser torê li ser amûrê heye, ku di destpêkê de kêmasiya me bû, ji ber vê yekê ez ê bi zanebûn amûrê bi hûrgulî rave nekim, lê tenê dê behsa tiştê ku me wê hingê hebû bikim:
Paşnava derketina CI / CD ya mobîl di pargîdaniyê de
Çareseriya teknîkî ji bo derxistina CI/CD-ê ji bo N-sepanan
Beşa yekem ji bo rojên kevn zêdetir nostaljiyek e, û ya duyemîn ezmûnek e ku hûn dikarin li xwe bicîh bikin.
Ji aliyê dîrokî ve bi vî rengî bû
Sal 2015
Me nû dest bi pêşvebirina sepanên mobîl kir, wê hingê me tiştek di derbarê yekbûna domdar, di derbarê DevOps û tiştên din ên modê de nizanibû. Her nûvekirina serîlêdanê ji hêla pêşdebir bixwe ji makîneya xwe ve hate derxistin. Û heke ji bo Android-ê ew pir hêsan e - civandin, îmze kirin .apk û ew li Google Developer Console barkir, dûv re ji bo iOS-ê amûra belavkirinê ya wê demê bi navgîniya Xcode-ê ji me re êvarên mezin hişt - hewildanên dakêşana arşîvê bi gelemperî bi xeletiyan qediyan û me neçar ma ku dîsa biceribîne. Derket holê ku pêşdebirê herî pêşkeftî mehê çend caran kodê nanivîse, lê berevajî serîlêdanê derdixe.
Sal 2016
Em mezin bûn, me jixwe ramanên me hebûn ka meriv çawa ji rojek tevahî ji bo serbestberdanê pêşdebiran azad dike, û serîlêdanek duyemîn jî xuya bû, ku tenê me bêtir ber bi otomasyonê ve dikişîne. Di heman salê de, me ji bo yekem car Jenkins saz kir û komek senaryoyên tirsnak, pir dişibihe yên ku fastlane di belgeyên xwe de nîşan dide.
Mixabin, heya nuha tenê pêşdebirên me dizanibûn ka ev nivîsar çawa dixebitin û çima ev stûna bêdawî ya bişkokan hewce ye, û gava ku tiştek dîsa şikest, wan ji bo analîzkirina têketin "êvarên spehî" wergirtin.
Sal 2017
Îsal em hîn bûn ku tiştek bi navê fastlane heye. Bi qasî niha agahdarî tune bû - meriv çawa dest pê dike, meriv wê çawa bikar tîne. Û hacet bi xwe jî di wê demê de xav bû: xeletiyên domdar tenê me bêhêvî kirin û dijwar bû ku meriv bi otomasyona efsûnî ya ku wan soz dabû bawer bike.
Lêbelê, karûbarên sereke yên ku di navgîniya fastlane de hene hene gym и pilot, me dest pê kir.
Ew çêtir bûne, heke tenê ji ber ku ne hemî pîvanên ku ji bo wan hewce ne xcodebuild, divê hûn destnîşan bikin - gym dê serbixwe fêm bike ku li ku û çi derewan dike. Û ji bo hûrgulîkirina bêtir, hûn dikarin heman bişkojkên wekî di nav de diyar bikin xcodebuild, tenê navê kilîtan zelaltir e.
Vê carê, bi saya werzîşê û formattera xcpretty ya çêkirî, têketinên çêkirinê pir xwendatir bûne. Vê yekê dest pê kir ku dem li ser rastkirina meclîsên şikestî xilas bike, û carinan tîmê berdanê dikaribû wê bi serê xwe fêhm bike.
Mixabin, pîvandinên leza civînê xcodebuild и gym Me wiya nekir, lê em ê bi belgeyê bawer bikin - heya 30% bilez.
Pêvajoyek yekane ji bo hemî serlêdanan
Sala 2018 û niha
Di sala 2018-an de, pêvajoya çêkirin û derxistina serlêdanan bi tevahî çû Jenkins, pêşdebiran berdana ji makîneyên xwe rawestand, û tenê tîmê berdanê mafê berdanê hebû.
Me berê dixwest ku destpêkirina ceribandin û analîzên statîk çêtir bikin, û nivîsarên me mezin û mezin bûn. Bi serîlêdanên me re mezin bû û guherî. Wê demê nêzî 10 sepan hebûn.Li gorî ku du platformên me hene, yanî nêzî 20 senaryoyên “zindî”.
Her gava ku me dixwest em gavek nû li senaryoyê zêde bikin, me neçar ma ku perçeyan di hemî nivîsarên şêlê de kopî-paste bikin. Dibe ku me dikaribû bi baldarî bixebitin, lê pir caran guhertinên weha bi tîpên tîpan qediyan, yên ku ji bo tîmê berdanê vediguherin êvaran da ku senaryoyan rast bikin û fêr bibin ka kîjan zilamê jîr ev ferman lê zêde kiriye û ew bi rastî çi dike. Bi gelemperî, meriv nikare bêje ku nivîsarên ji bo kombûnê ji bo yek platformê bi kêmî ve hinekî dişibin hev. Her çend wan bê guman heman tişt kir.
Ji bo destpêkirina pêvajoyek ji bo serîlêdanek nû, pêdivî bû ku rojek were derbas kirin ku guhertoyek "teze" ya van nivîsan hilbijêrin, jêbirin û bibêjin "erê, ew dixebite."
Di havîna 2018-an de, me careke din li leza ku hîna pêşkeftî ye nihêrî.
Karê #1: Hemî gavên skrîptê bi kurtî berhev bike û wan di Fastfile de ji nû ve binivîsîne
Dema ku me dest pê kir, senaryoyên me dişibihin ku di Jenkins de ji hemî gav û kincên ku di yek skrîpta şêlê de pêk tê, senaryoyên me dixuya. Em hê neçûne xeta boriyê û dabeşkirina bi qonax.
Me li tiştên ku me hene mêze kir û 4 gavên ku li gorî danasîna CI/CD-ya me ne diyar kirin:
test - ceribandinên yekîneya pêşdebiran dimeşîne, vegirtinê hesab dike,
sonar - hemî lîberan dide destpêkirin û raporan ji SonarQube re dişîne,
bicihkirin - şandina hunerek ji alpha (TestFlight).
Û heke hûn neçin hûrguliyan, bişkojkên ku di çalakiyan de têne bikar anîn bernedin, hûn ê vê Fastpelê bistînin:
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
Bi rastî, Fastfile-ya meya yekem cinawir derket, li ber çavê xwe hin hûrgelên ku em hîn jî hewce ne û hejmara parametreyên ku me li şûna wan digirin:
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
Di mînaka li jor de, tenê beşek ji pîvanên ku divê em diyar bikin: ev parametreyên avakirinê ne - şema, mîheng, navên Profîla Pêşkêşker, û her weha pîvanên belavkirinê - Apple ID ya hesabê pêşdebir, şîfre, nasnameya serîlêdanê, û hwd. li. Wekî nêzîkatiya yekem, me van hemî kilît di pelên taybetî de datîne - Gymfile, Matchfile и Appfile.
Naha di Jenkins de hûn dikarin fermanên kurt ên ku dîtinê şepirze nakin û bi çavan bi hêsanî têne xwendin bang bikin:
Te çi girt? Ji bo her gav fermanan paqij bikin. Skrîpta paqij kirin, di pelên fastlane de bi rêkûpêk hatine rêz kirin. Bi şabûn, em reviyan cem pêşdebiran û ji wan pirsî ku her tiştê ku ew hewce ne li depoyên xwe zêde bikin.
Lê me di wextê xwe de fêm kir ku em ê bi heman dijwariyan re rû bi rû bimînin - dê hîn jî 20 nivîsarên meclîsê hebin ku dê bi rengekî din dest bi jiyana xwe bikin, sererastkirina wan dê dijwartir be, ji ber ku senaryo dê biçin depoyan, û me negihîşt wir. Û bi giştî jî bi vî awayî êþa me çareser nabe.
Karê # 2: Ji bo N serlêdanan yek Fastfile bistînin
Naha dixuye ku çareserkirina pirsgirêkê ne ew qas dijwar e - guherbaran saz bikin, û em biçin. Erê, bi rastî, bi vî rengî pirsgirêk çareser bû. Lê di wê kêlîkê de ku me ew xera kir, ne pisporiya me di fastlane bixwe de, ne jî di Ruby de, ku tê de fastlane tê nivîsandin, û ne jî mînakên bikêr li ser torê hebûn - her kesê ku wê hingê li ser fastlane nivîsand, ji bo yek serîlêdanê ji bo mînakek sînorkirî bû. yek pêşdebiran.
Fastlane dikare guhêrbarên jîngehê bi rê ve bibe, û me berê jî bi danîna şîfreya Keychain ev ceriband:
ENV['KEYCHAIN_PASSWORD']
Piştî ku li nivîsarên xwe nihêrîn, me beşên hevpar nas kirin:
#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
Naha, ji bo ku em dest bi karanîna van bişkokan di pelên fastlane de bikin, neçar mabû ku em fêhm bikin ka meriv wan çawa li wir radest dike. Fastlane ji bo vê yekê çareseriyek heye: barkirina guherbaran bi rêya dotenv. Di belgeyê de tê gotin ku heke ji bo we girîng e ku hûn bişkojkan ji bo mebestên cihêreng bar bikin, di pelrêça fastlane de gelek pelên vesazkirinê biafirînin. .env, .env.default, .env.development.
Û paşê me biryar da ku em vê pirtûkxaneyê hinekî cuda bikar bînin. Ka em di depoya pêşdebiran de ne nivîsarên fastlane û agahdariya meta wê, lê bişkojkên bêhempa yên vê serîlêdanê di pelê de bi cîh bikin. .env.appName.
Xwe bi xwe dikin Fastfile, Appfile, Matchfile и Gymfile, me ew di depoyek cuda de veşart. Pelek din bi bişkojkên şîfreyê yên ji karûbarên din ve li wir veşartî bû - .env.
Hûn dikarin mînakek bibînin vir.
Li ser CI, bang pir neguherî; ji bo serîlêdanek taybetî mifteyek mîhengê hate zêdekirin:
Vê çareseriyê ji bo nuha hiştin, her çend Fastlane ji bo dakêşana Fastfile bi rê ve çareseriyek heye çalakîimport_from_git, lê ew tenê ji bo Fastfile dixebite, lê ne ji bo pelên din. Heke hûn "bi rastî xweşik" dixwazin, hûn dikarin ya xwe binivîsin action.
Komek wusa ji bo serîlêdanên Android û ReactNative hate çêkirin, pel di heman depoyê de ne, lê di şaxên cûda de iOS, android и react_native.
Gava ku tîmê serbestberdanê dixwaze hin gavek nû lê zêde bike, guhertinên di skrîptê de bi riya MR-ê di git-ê de têne tomar kirin, êdî ne hewce ye ku li sûcdarên nivîsarên şikestî bigerin, û bi gelemperî, naha divê hûn hewl bidin ku wê bişkînin.
Niha ew guman e
Berê, me wext derbas kir ku hemî nivîsan diparêzin, wan nûve dikin û hemî encamên nûvekirinê rast dikin. Gava ku sedemên xeletî û domdariya di weşanan de xeletiyên hêsan bûn ku şopandina wan di nav tevliheviya nivîsarên şêlê de ew qas dijwar bû, pir xemgîn bû. Niha xeletiyên bi vî rengî kêm bûne. Guhertin bi yekcarî li hemî serlêdanan têne kirin. Û 15 hûrdeman digire da ku serîlêdanek nû têxe pêvajoyê - li ser CI boriyek şablonê saz bike û mifteyan li depoya pêşdebiran zêde bike.
Wusa dixuye ku xala bi Fastfile ji bo Android û îmzeya serîlêdanê nayê ravekirin; heke gotar balkêş be, ez ê berdewamiyê binivîsim. Ez ê kêfxweş bibim ku pirs an pêşniyarên we "hûn ê vê pirsgirêkê çawa çareser bikin" di şîroveyan an li ser Telegram de bibînim bashkirova.