Waayo-aragnimada CICD ee mobilada: hal halbeeg oo degdeg ah oo loogu talagalay codsiyo badan oo mobilada ah

Waayo-aragnimada CICD ee mobilada: hal halbeeg oo degdeg ah oo loogu talagalay codsiyo badan oo mobilada ah
Waxaan jeclaan lahaa inaan ka hadlo isdhexgalka joogtada ah iyo gaarsiinta abka mobaylada anigoo isticmaalaya fastlane. Sida aan uga hirgelino CI/CD dhammaan codsiyada mobilada, sida aan ku gaadhnay iyo wixii dhacay dhamaadkii.

Waxaa jira qalab ku filan oo ku filan shabakada qalabka, kaas oo aan aad u yareyn bilowgii, markaa si ula kac ah uma sifayn doono qalabka si faahfaahsan, laakiin kaliya waxaan tixraaci doonaa wixii aan haysanay markaa:

Maqaalku wuxuu ka kooban yahay laba qaybood:

  • Taariikhda soo ifbaxa moobilka CI/CD ee shirkadda
  • Xalka farsamada ee soo saarista CI/CD ee codsiyada N

Qaybta hore waa nostalgia ka badan maalmihii hore, iyo tan labaad waa waayo-aragnimo in aad codsan karto naftaada.

Sidan ayay u dhacday taariikh ahaan

Sannadkii 2015

Waxaan hadda bilownay horumarinta codsiyada moobiilka, ka dib waxba kama naqaano isdhexgalka joogtada ah, oo ku saabsan DevOps iyo waxyaabo kale oo moodada ah. Cusbooneysii codsi kasta waxaa ka soo saaray horumariyaha laftiisa mishiinkiisa. Oo haddii loogu talagalay Android ay aad u fudud tahay - la soo ururiyey, saxeexay .apk oo u soo galiyay Google Developer Console, ka dib iOS qalab qaybinta ka dib Xcode waxay nooga tagtay habeeno aad u wanaagsan - isku dayga lagu soo dejiyo kaydka inta badan waxay ku dhammaatay khaladaad waxaanan isku daynay mar kale. Waxaa soo baxday in horumariyaha ugu horumarsan uusan qorin kood dhowr jeer bishii, laakiin halkii uu sii daayo codsiga.

Sannadkii 2016

Waan koray, waxaan horeyba u haysanay fikrado ku saabsan sida loo xoreeyo horumarinta maalin dhan si loo sii daayo, iyo codsi labaad ayaa sidoo kale soo muuqday, kaas oo kaliya nagu riixay si otomaatig ah. Isla sanadkaas, waxaan ku rakibnay Jenkins markii ugu horeysay oo aan ku qornay farabadan qoraallo cabsi leh, oo aad u la mid ah kuwa fastlane ayaa muujinaya dukumeentigeeda.

$ xcodebuild clean archive -archivePath build/MyApp 
    -scheme MyApp

$ xcodebuild -exportArchive 
                        -exportFormat ipa 
                        -archivePath "build/MyApp.xcarchive" 
                        -exportPath "build/MyApp.ipa" 
                        -exportProvisioningProfile "ProvisioningProfileName"

$ cd /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

$ ./altool β€”upload-app 
-f {abs path to your project}/build/{release scheme}.ipa  
-u "[email protected]" 
-p "PASS_APPLE_ID"

Nasiib darro, ilaa hadda kaliya horumariyayaasheena ayaa ogaa sida qoraalladani u shaqeeyaan iyo sababta furayaashan aan dhamaadka lahayn ee loogu baahan yahay, iyo markii ay wax jabeen mar kale, waxay heleen β€œhabeenkii quruxda badnaa” ee lagu falanqeeyay diiwaannada.

Sannadkii 2017

Sannadkan waxaan barannay in uu jiro wax la yiraahdo fastlane. Ma jirin macluumaad badan sida hadda jira - sida loo bilaabo mid, sida loo isticmaalo. Qalabkii laftiisana wuxuu ahaa mid cayriin wakhtigaas: khaladaad joogto ah ayaa naga niyad jabiyay oo way adkeyd in la rumaysto otomatiga sixirka ee ay ballanqaadeen.

Si kastaba ha ahaatee, adeegyada ugu muhiimsan ee lagu daro xudunta fastlane waa gym ΠΈ pilot, waxaan ku guuleysanay inaan bilowno.

Qoraalladayada wax yar ayaa la hagaajiyay.

$ fastlane gym  β€”-workspace "Example.xcworkspace" 
                --scheme "AppName" 
                β€”-buildlog_path "/tmp" 
                -β€”clean

Waa la hagaajiyay, haddii kaliya sababtoo ah maaha dhammaan xuduudaha lagama maarmaanka u ah xcodebuild, waxaad u baahan tahay inaad tilmaanto - gym si madax banaan u fahmi doona meesha iyo waxa beenta ah. Iyo hagaajin dheeraad ah, waxaad cayimi kartaa furayaal la mid ah kuwa ku jira xcodebuild, kaliya magacaabista furayaasha ayaa cad.

Markan, mahadda jimicsiga iyo qaabaynta xcpretty ee ku dhex dhisan, qormooyinka dhismuhu waxay noqdeen kuwo aad loo akhriyi karo. Tani waxay bilawday inay wakhti ku badbaadiso hagaajinta shirarka jajaban, mararka qaarkoodna kooxda sii dayntu waxay ogaan karaan kaligood.

Nasiib darro, cabbirada xawaaraha isu imaatinka xcodebuild ΠΈ gym Maanu samayn, laakiin waxaan aamini doonaa dukumentiyada - ilaa 30% xawaaraha.

Habka kaliya ee dhammaan codsiyada

Sannadka 2018 iyo hadda

Sannadkii 2018, habka dhisidda iyo soo-dejinta codsiyada ayaa si buuxda u guuray Jenkins, horumariyayaashu waxay joojiyeen sii-deynta mashiinadooda, oo kaliya kooxda sii-deynta ayaa xaq u leh inay sii daayaan.

Waxaan mar hore rabnay inaan horumarino bilawga imtixaanada iyo falanqaynta taagan, qoraaladayadu way koreen oo koreen. Koray oo la beddeley codsiyadayada. Waqtigaas waxaa jiray ku saabsan codsiyada 10. Iyadoo la tixgelinayo in aan haysanno laba goobood, taasi waxay ku saabsan tahay 20 qoraallada "nool".

Mar kasta oo aan rabno in aan tallaabo cusub ku darno qoraalka, waxa ay ahayd in aan koobiyeynno qaybaha dhammaan qoraallada qolofka. Waxaa laga yaabaa inaan si taxadar leh u shaqeyn karno, laakiin inta badan isbeddellada noocan oo kale ah waxay ku dhammaadeen qoraallo, kuwaas oo u beddelay fiidkii kooxda sii daayo si ay u hagaajiyaan qoraallada oo ay ogaadaan ninka caqliga leh ee ku daray amarkan iyo waxa uu dhab ahaantii sameeyo. Guud ahaan, lama odhan karo qoraallada shirka ee hal madal ayaa ugu yaraan xoogaa isku mid ahaa. Inkasta oo ay xaqiiqdii sameeyeen wax la mid ah.

Si loo bilaabo habraaca codsi cusub, waxay ahayd lagama maarmaan in la qaato maalin si loo doorto nooca "cusub" ee qoraalladan, ka saar oo tiraahdo "haa, way shaqeysaa."

Xagaagii 2018, waxaan mar kale eegnay dhanka xawaaraha sare ee weli soo koraya.

Hawsha #1: soo koob dhammaan tillaabooyinka qoraalka oo dib ugu qor Fastfile

Markii aan bilownay, qoraalladayadu waxay u ekaayeen marada cagta oo ka kooban dhammaan jaranjarooyinka iyo ulaha hal xaraf oo qolof ah oo Jenkins ah. Wali uma aan wareegin dhuumaha iyo heerka qaybinta.

Waxaan eegnay waxa aan hayno oo aan aqoonsannay 4 tillaabo oo ku habboon sharraxaadda CI/CD:

  • dhis - rakibida waxyaalaha ku tiirsan, ururinta kaydka,
  • tijaabin - socodsiinta imtixaanada unugga horumariyaha, xisaabinta caymiska,
  • sonar - waxay soo saartaa dhammaan linters waxayna u dirtaa warbixinnada SonarQube,
  • deploy β€” diritaanka artifact alfa (TestFlight).

Oo haddii aadan faahfaahinta gelin, ka tegin furayaasha loo isticmaalo falalka, waxaad heli doontaa Fastfile kan:

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

Xaqiiqdii, Fastfile-kii ugu horreeyay wuxuu u rogay inuu noqdo mid bahalnimo ah, anagoo tixgelinayna qaar ka mid ah biraha aan weli u baahanahay iyo tirada cabbirrada aan beddelnay:

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

Tusaalaha kore, kaliya qayb ka mid ah xuduudaha aan u baahanahay inaan sheegno: kuwani waa cabbirrada dhismaha - naqshadaynta, qaabeynta, magacyada Profile-ka, iyo sidoo kale cabbirrada qaybinta - Aqoonsiga Apple ee koontada horumariyaha, erayga sirta ah, aqoonsiga codsiga, iyo wixii la mid ah. on. Qiyaastii koowaad ahaan, dhammaan furayaashan waxaan gelinnay faylal gaar ah - Gymfile, Matchfile ΠΈ Appfile.

Hadda gudaha Jenkins waxaad wici kartaa amarro gaagaaban oo aan dhayalsanaynin aragtida oo ay si fudud isha u akhriyi karaan:

# fastlane ios <lane_name>

$ fastlane ios build
$ fastlane ios test
$ fastlane ios run_sonar
$ fastlane ios deploy

Hurray, aad baanu u fiican nahay

Maxaa helay? U cadee amarrada tallaabo kasta. Qoraallada la nadiifiyey, oo si habsami leh loogu habeeyey faylasha fastlane. Annaga oo faraxsan, ayaanu u orodnay horumariyayaasha inagoo ka codsanayna inay ku daraan wax kasta oo ay u baahan yihiin goobahooda.

Laakiin waxaan ogaanay in waqti in aan la kulmi doono dhibaatooyin isku mid ah - waxaan weli lahaan lahaa 20 qoraallada shirka in si uun ama si kale u bilaabi lahaa in ay ku noolaadaan naftooda u gaar ah, waxay noqon doontaa mid aad u adag in la tafatiro iyaga, tan iyo qoraallada u guuri lahaa kayd, oo annagu ma aanaan helin meeshaas. Iyo, guud ahaan, suurtogal ma noqon doonto in xanuunkayaga sidan lagu xalliyo.

Waayo-aragnimada CICD ee mobilada: hal halbeeg oo degdeg ah oo loogu talagalay codsiyo badan oo mobilada ah

Hawsha #2: hel hal Fastfile ee codsiyada N

Hadda waxay u muuqataa in xallinta dhibaatadu aanay ahayn mid aad u adag - deji doorsoomayaasha, oo aan tagno. Haa, dhab ahaantii, taasi waa sida dhibaatada loo xaliyay. Laakiin wakhtigan xaadirka ah markii aan kor u qaadnay, ma aannaan lahayn khibrad Fastlane lafteeda, ama Ruby, oo ay ku qoran tahay fastlane, ama tusaalayaal faa'iido leh oo ku saabsan shabakada - qof kasta oo wax ka qoray fastlane markaa wuxuu ku koobnaa tusaale hal codsi hal horumariye.

Fastlane waxay xamili kartaa doorsoomayaasha deegaanka, waxaanan mar hore isku daynay tan anagoo dejinayna erayga Keychain:

ENV['KEYCHAIN_PASSWORD']

Ka dib markaan eegno qoraalladayada, waxaan aqoonsannay qaybaha guud:

#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

Hadda, si aan u bilowno isticmaalka furayaashan faylalka fastlane, waxay ahayd inaan ogaano sida loo geeyo halkaas. Fastlane waxay leedahay xal tan: ku shubidda doorsoomayaasha via dotenv. Dukumeentigu wuxuu leeyahay haddii ay muhiim kuu tahay inaad ku shubto furayaasha ujeedooyin kala duwan, ku samee dhowr faylal qaabeyn ah tusaha fastlane .env, .env.default, .env.development.

Kadibna waxaan go'aansanay inaan u isticmaalno maktabadan si ka duwan. Aan dhigno kaydka horumariyayaasha ee ma dhigin qoraallada fastlane iyo macluumaadkeeda meta, laakiin furayaasha gaarka ah ee codsigan ee faylka .env.appName.

Iskood Fastfile, Appfile, Matchfile ΠΈ Gymfile, waxaan ku qarinay meel gooni ah. Fayl dheeri ah oo wata furayaasha sirta ah ee adeegyada kale ayaa lagu qariyay halkaas - .env.
Waxaad arki kartaa tusaale halkan.

Waayo-aragnimada CICD ee mobilada: hal halbeeg oo degdeg ah oo loogu talagalay codsiyo badan oo mobilada ah

On CI, wicitaanku wax badan isma bedelin; furaha qaabeynta codsi gaar ah ayaa lagu daray:

# fastlane ios <lane_name> --env appName

$ fastlane ios build --env appName
$ fastlane ios test --env appName
$ fastlane ios run_sonar --env appName
$ fastlane ios deploy --env appName

Ka hor inta aan la socodsiin amarrada, waxaan ku shubnaa kaydkayaga qoraallo. Uma eka mid aad u fiican:

git clone [email protected]/FastlaneCICD.git fastlane_temp

cp ./fastlane_temp/fastlane/* ./fastlane/
cp ./fastlane_temp/fastlane/.env fastlane/.env

Ka tag xalkan hadda, in kasta oo Fastlane uu leeyahay xal loogu talagalay soo dejinta Fastfile iyada oo loo marayo tallaabo import_from_git, laakiin waxay u shaqeysaa oo kaliya Fastfile, laakiin uma shaqeyso faylasha kale. Haddii aad rabto "aad u qurux badan", waxaad qori kartaa adigu action.

Qalab la mid ah ayaa loo sameeyay codsiyada Android iyo ReactNative, faylalyadu waxay ku yaalliin isku meel, laakiin waaxyo kala duwan iOS, android ΠΈ react_native.

Marka kooxda sii daayo ay rabaan inay ku daraan qaar ka mid ah tillaabo cusub, isbeddelada qoraalka waxaa lagu duubayaa MR in git, ma jirto baahi loo qabo in la raadiyo dembiilayaasha qoraallada jaban, iyo guud ahaan, hadda waa inaad isku daydaa inaad jebiso.

Hadda taasi waa hubaal

Markii hore, waxaan ku bixinay waqti aan ku ilaalino dhammaan qoraallada, cusbooneysiinta iyo hagaajinta dhammaan cawaaqibka cusbooneysiinta. Waxay ahayd wax aad looga xumaado markii sababaha khaladaadka iyo wakhtiga hoos u dhaca ee sii dayntu ay ahaayeen qoraallo fudud oo aad u adag in lala socdo qulqulka qoraallada qolofka. Hadda khaladaadka noocaas ah waa la dhimay ilaa ugu yaraan. Isbeddellada waxaa lagu soo rogaa dhammaan codsiyada hal mar. Waxayna qaadanaysaa 15 daqiiqo in arji cusub la geliyo hawsha - samee dhuumaha qaab-dhismeedka CI oo ku dar furayaasha kaydka horumariyaha.

Waxay u muuqataa in barta leh Fastfile ee Android iyo saxeexa codsigu uu yahay mid aan la sharraxin; haddii maqaalku xiiso leeyahay, waxaan qori doonaa sii wadida. Waan ku farxi doonaa inaan ku arko su'aalahaaga ama soo jeedinta "sideed u xallin lahayd dhibaatadan" faallooyinka ama Telegramka bashkirova.

Source: www.habr.com

Add a comment