ProHoster > ΠΠ»ΠΎΠ³ > Pagdumala > Kasinatian sa Mobile CICD: usa ka sumbanan sa fastlane alang sa daghang mga aplikasyon sa mobile
Kasinatian sa Mobile CICD: usa ka sumbanan sa fastlane alang sa daghang mga aplikasyon sa mobile
Gusto kong maghisgot bahin sa padayon nga paghiusa ug paghatud alang sa mga mobile app gamit ang fastlane. Giunsa namo pagpatuman ang CI/CD sa tanang mobile application, giunsa namo pag-abot didto ug unsay nahitabo sa kataposan.
Adunay na igo nga materyal sa network sa himan, nga kulang namo sa sinugdanan, mao nga ako tinuyo nga dili maghulagway sa himan sa detalye, apan maghisgot lamang sa unsay naa namo kaniadto:
Background sa pagtunga sa mobile CI/CD sa kompanya
Teknikal nga solusyon alang sa paglansad sa CI/CD para sa N-aplikasyon
Ang una nga bahin labi nga nostalgia sa karaan nga mga adlaw, ug ang ikaduha usa ka kasinatian nga mahimo nimong magamit sa imong kaugalingon.
Ingon niini ang nahitabo sa kasaysayan
Tuig 2015
Bag-o lang kami nagsugod sa paghimo og mga mobile application, unya wala kami nahibal-an bahin sa padayon nga panagsama, bahin sa DevOps ug uban pang mga uso nga butang. Ang matag update sa aplikasyon gilukot sa developer mismo gikan sa iyang makina. Ug kung alang sa Android kini yano ra - gitigum, gipirmahan .apk ug gi-upload kini sa Google Developer Console, unya alang sa iOS ang himan sa pag-apod-apod pinaagi sa Xcode nagbilin kanamo nga daghang mga gabii - ang mga pagsulay sa pag-download sa archive kanunay natapos sa mga sayup ug kinahanglan namon nga sulayan pag-usab. Nahibal-an nga ang labing abante nga developer wala magsulat code daghang beses sa usa ka bulan, apan gipagawas ang aplikasyon.
Tuig 2016
Nagdako kami, nakahunahuna na kami kung giunsa ang pagpahigawas sa mga developer gikan sa usa ka tibuuk nga adlaw alang sa usa ka pagpagawas, ug ang ikaduha nga aplikasyon nagpakita usab, nga nagduso lamang kanamo nga labi pa sa automation. Sa mao gihapong tuig, among gi-install si Jenkins sa unang higayon ug nagsulat og daghang makahahadlok nga mga script, susama kaayo sa gipakita sa fastlane sa dokumentasyon niini.
Ikasubo, hangtod karon ang among mga developer lamang ang nahibal-an kung giunsa kini nga mga script ug kung ngano nga kinahanglan kini nga walaβy katapusan nga stack sa mga yawe, ug kung adunay nabuak pag-usab, nakuha nila ang "matahum nga mga gabii" alang sa pag-analisar sa mga troso.
Tuig 2017
Karong tuiga nahibal-an namon nga adunay usa ka butang sama sa fastlane. Walaβy daghang kasayuran sama sa karon - kung giunsa pagsugod ang usa, kung giunsa kini gamiton. Ug ang himan mismo dili pa krudo niadtong panahona: ang kanunay nga mga kasaypanan nakapahigawad lamang kanamo ug lisud ang pagtuo sa mahika nga automation nga ilang gisaad.
Bisan pa, ang mga nag-unang kagamitan nga gilakip sa fastlane core mao ang gym ΠΈ pilot, nakahimo kami sa pagsugod niini.
Gipauswag sila, kung tungod lamang kay dili tanan nga mga parameter nga gikinahanglan xcodebuild, kinahanglan nimo ipasabut - gym independente nga makasabut kung asa ug unsa ang bakak. Ug alang sa dugang nga pag-ayo, mahimo nimong ipiho ang parehas nga mga yawe sama sa xcodebuild, ang pagngalan lamang sa mga yawe mas klaro.
Niining higayona, salamat sa gym ug sa built-in nga xcpretty formatter, ang mga log sa pagtukod nahimong mas mabasa. Nagsugod kini sa pagdaginot ug panahon sa pag-ayo sa guba nga mga asembliya, ug usahay ang grupo sa pagpagawas makahibalo niini sa ilang kaugalingon.
Ikasubo, ang pagsukod sa gikusgon sa asembliya xcodebuild ΠΈ gym Wala namo kini buhata, apan kami mosalig sa dokumentasyon - hangtod sa 30% nga pagpadali.
Usa ka proseso alang sa tanan nga mga aplikasyon
Tuig 2018 ug karon
Sa 2018, ang proseso sa pagtukod ug pagpalupad sa mga aplikasyon hingpit nga mibalhin ngadto sa Jenkins, ang mga developers mihunong sa pagpagawas gikan sa ilang mga makina, ug ang release team lamang ang adunay katungod sa pagpagawas.
Gusto na namo nga pauswagon ang paglunsad sa mga pagsulay ug static nga pagtuki, ug ang among mga script mitubo ug mitubo. Mitubo ug nausab uban sa among mga aplikasyon. Niadtong panahona adunay mga aplikasyon sa 10. Gikonsiderar nga kami adunay duha ka plataporma, kana mga 20 ka "buhi" nga mga script.
Matag higayon nga gusto namong magdugang og bag-ong lakang sa script, kinahanglang kopyahon-paste namo ang mga piraso sa tanang shell script. Tingali mahimo pa unta nga magtrabaho kami nga labi ka mabinantayon, apan kanunay nga ang ingon nga mga pagbag-o natapos sa mga typo, nga nahimo nga mga gabii alang sa grupo sa pagpagawas aron ayohon ang mga script ug mahibal-an kung kinsa nga maalamon nga tawo ang nagdugang niini nga mando ug kung unsa gyud ang gibuhat niini. Sa kinatibuk-an, dili ikaingon nga ang mga script alang sa asembliya alang sa usa ka plataporma labing menos medyo parehas. Bisan tuod sila siguradong nagbuhat sa samang butang.
Aron makasugod ug proseso alang sa bag-ong aplikasyon, gikinahanglan nga mogugol ug usa ka adlaw aron makapili ug βpreskoβ nga bersyon niini nga mga script, i-debug kini ug isulti nga βoo, kini molihok.β
Sa ting-init sa 2018, mitan-aw kami pag-usab ngadto sa nag-uswag pa nga fastlane.
Buluhaton #1: i-summarize ang tanang lakang sa script ug isulat kini pag-usab sa Fastfile
Sa pagsugod namo, ang among mga script morag footcloth nga naglangkob sa tanang mga lakang ug crutches sa usa ka shell script sa Jenkins. Wala pa mi mobalhin sa pipeline ug division by stage.
Gitan-aw namon kung unsa ang naa kanamo ug nahibal-an ang 4 nga mga lakang nga mohaum sa paghulagway sa among CI / CD:
pagtukod - pag-instalar sa mga dependency, pag-assemble sa archive,
pagsulay - pagpadagan sa mga pagsulay sa yunit sa developer, pagkalkula sa sakup,
sonar - naglansad sa tanan nga linter ug nagpadala mga taho sa SonarQube,
deploy β pagpadala ug artifact sa alpha (TestFlight).
Ug kung dili ka moadto sa mga detalye, pagtangtang sa mga yawe nga gigamit sa mga aksyon, makuha nimo kini nga 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
Sa tinuud, ang among una nga Fastfile nahimoβg makalilisang, nga gikonsiderar ang pipila nga mga crutches nga kinahanglan pa namon ug ang gidaghanon sa mga parameter nga among gipuli:
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
Sa panig-ingnan sa ibabaw, bahin lamang sa mga parameter nga kinahanglan natong ipiho: kini ang mga parameter sa pagtukod - schema, configuration, mga ngalan sa Provision Profile, ingon man mga parameter sa pag-apod-apod - Apple ID sa developer account, password, application ID, ug uban pa sa. Ingon usa ka una nga gibanabana, among gibutang ang tanan nga mga yawe sa espesyal nga mga file - Gymfile, Matchfile ΠΈ Appfile.
Karon sa Jenkins mahimo nimong tawagan ang mubu nga mga sugo nga dili mabuak ang panan-aw ug dali nga mabasa sa mata:
Unsa imong nakuha? Tin-aw nga mga sugo alang sa matag lakang. Gilimpyohan ang mga script, maayong pagkahan-ay sa mga file sa fastlane. Nalipay, midagan kami sa mga developer nga gihangyo nga idugang ang tanan nga kinahanglan nila sa ilang mga repository.
Apan nahibal-an namon sa kadugayan nga makasugat kami sa parehas nga mga kalisud - aduna pa kami'y 20 nga mga script sa asembliya nga sa usa ka paagi o lain magsugod sa pagkinabuhi sa ilang kaugalingon nga kinabuhi, mas lisud ang pag-edit niini, tungod kay ang mga script mobalhin sa mga repositoryo, ug wala mi access didto. Ug, sa kinatibuk-an, dili posible nga masulbad ang among kasakit niining paagiha.
Buluhaton #2: pagkuha ug usa ka Fastfile para sa N nga aplikasyon
Karon ingon og ang pagsulbad sa problema dili kaayo lisud - ibutang ang mga variable, ug lakaw na. Oo, sa pagkatinuod, sa ingon niana ang problema nasulbad. Apan sa higayon nga among gibalibaran kini, wala kami kahanas sa fastlane mismo, ni sa Ruby, diin gisulat ang fastlane, o mapuslanon nga mga pananglitan sa network - ang tanan nga nagsulat bahin sa fastlane kaniadto limitado sa usa ka pananglitan alang sa usa ka aplikasyon alang sa usa ka developer.
Ang Fastlane makahimo sa pagdumala sa mga variable sa palibot, ug nasulayan na namo kini pinaagi sa pagtakda sa Keychain nga password:
ENV['KEYCHAIN_PASSWORD']
Human sa pagtan-aw sa among mga script, among giila ang komon nga mga bahin:
#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
Karon, aron masugdan ang paggamit niini nga mga yawe sa mga fastlane nga mga file, kinahanglan namon nga mahibal-an kung giunsa kini ipadala didto. Ang Fastlane adunay solusyon alang niini: loading variables pinaagi sa dotenv. Ang dokumentasyon nag-ingon nga kung importante alang kanimo ang pag-load sa mga yawe alang sa lainlaing mga katuyoan, paghimo og daghang mga file sa pag-configure sa direktoryo sa fastlane .env, .env.default, .env.development.
Ug unya nakahukom kami nga gamiton kini nga librarya sa lahi nga paagi. Ibutang nato sa repository sa mga developers dili ang mga fastlane script ug ang meta nga impormasyon niini, apan ang talagsaon nga mga yawe niini nga aplikasyon sa file .env.appName.
Ang Ilang Kaugalingon Fastfile, Appfile, Matchfile ΠΈ Gymfile, gitago namo kini sa bulag nga repository. Usa ka dugang nga file nga adunay mga yawe sa password gikan sa ubang mga serbisyo gitago didto - .env.
Makita nimo ang usa ka pananglitan dinhi.
Sa CI, ang tawag wala kaayo nagbag-o; usa ka yawe sa pag-configure alang sa usa ka piho nga aplikasyon ang gidugang:
Gibiyaan kini nga solusyon sa pagkakaron, bisan kung ang Fastlane adunay solusyon sa pag-download sa Fastfile pinaagi sa aksyonimport_from_git, apan kini magamit lamang alang sa Fastfile, apan dili alang sa ubang mga file. Kung gusto nimo ang "gwapa kaayo", mahimo nimong isulat ang imong kaugalingon action.
Ang usa ka susama nga set gihimo alang sa mga aplikasyon sa Android ug ReactNative, ang mga file naa sa parehas nga repository, apan sa lainlaing mga sanga. iOS, android ΠΈ react_native.
Kung ang grupo sa pagpagawas gusto nga magdugang usa ka bag-ong lakang, ang mga pagbag-o sa script girekord pinaagi sa MR sa git, wala na kinahanglana nga pangitaon ang mga hinungdan sa nabuak nga mga script, ug sa kinatibuk-an, karon kinahanglan nimo nga sulayan kini.
Karon mao na ang sigurado
Kaniadto, gigugol namon ang oras sa pagpadayon sa tanan nga mga script, pag-update niini ug pag-ayo sa tanan nga mga sangputanan sa mga pag-update. Makapahigawad kaayo kung ang mga hinungdan sa mga kasaypanan ug downtime sa mga pagpagawas mao ang yano nga mga typo nga lisud kaayo nga masubay sa jumble sa mga script sa shell. Karon ang ingon nga mga sayup gipamubu sa labing gamay. Ang mga pagbag-o gilunsad sa tanan nga mga aplikasyon sa usa ka higayon. Ug gikinahanglan ang 15 ka minuto aron mabutang ang usa ka bag-ong aplikasyon sa proseso - pag-set up og template pipeline sa CI ug idugang ang mga yawe sa repository sa developer.
Ingon og ang punto sa Fastfile alang sa Android ug ang pirma sa aplikasyon nagpabilin nga wala mahibal-an; kung ang artikulo makapaikag, magsulat ako usa ka pagpadayon. Malipay ako nga makita ang imong mga pangutana o sugyot "unsaon nimo masulbad kini nga problema" sa mga komento o sa Telegram bashkirova.