Ahụmịhe CICD mkpanaaka: otu ọkọlọtọ fastlane maka ọtụtụ ngwa mkpanaka

Ahụmịhe CICD mkpanaaka: otu ọkọlọtọ fastlane maka ọtụtụ ngwa mkpanaka
Ọ ga-amasị m ikwu maka njikọta na nnyefe na-aga n'ihu maka ngwa mkpanaka site na iji fastlane. Otu esi etinye CI/CD na ngwa mkpanaka niile, otu anyị siri ruo ebe ahụ na ihe mere na njedebe.

Enweelarị ihe zuru oke na netwọkụ dị na ngwaọrụ ahụ, nke anyị enweghị na mbido, yabụ na m ga-ama ụma akọwaghị ngwaọrụ ahụ n'ụzọ zuru ezu, mana m ga-ezo aka na ihe anyị nwere mgbe ahụ:

Akụkọ ahụ nwere akụkụ abụọ:

  • ndabere maka mpụta nke mobile CI/CD na ụlọ ọrụ
  • Ngwọta nka maka ịtụgharị CI/CD maka ngwa N-ngwa

Akụkụ nke mbụ bụ ọtụtụ agụụ maka oge ochie, nke abụọ bụ ahụmịhe nke ị nwere ike itinye n'ọrụ n'onwe gị.

Otú a ka o si mee n'akụkọ ihe mere eme

Afọ 2015

Anyị malitere ịmalite ngwa mkpanaka, mgbe ahụ anyị amaghị ihe ọ bụla gbasara ntinye aka na-aga n'ihu, gbasara DevOps na ihe ndị ọzọ ejiji. Onye nrụpụta n'onwe ya wepụrụ mmelite ngwa ọ bụla site na igwe ya. Ma ọ bụrụ na maka gam akporo ọ dị mfe - gbakọtara, bịanyere aka na ya .apk wee bulite ya na Google Developer Console, mgbe ahụ maka iOS ngwa nkesa nkesa site na Xcode mere ka anyị nwee ọmarịcha mgbede - mbọ iji budata ebe a na-edebe ihe ochie na-ejedebe na njehie na anyị ga-anwale ọzọ. Ọ tụgharịrị na onye nrụpụta kachasị elu anaghị ede koodu ọtụtụ ugboro n'ọnwa, kama na-ewepụta ngwa ahụ.

Afọ 2016

Anyị tolitere, anyị enweelarị echiche banyere otu esi eme ka ndị mmepe nweere onwe ha otu ụbọchị dum maka ntọhapụ, ngwa nke abụọ pụtakwara, nke mere ka anyị nwekwuo ike kwupụta akpaaka. N'otu afọ ahụ, anyị wụnye Jenkins na nke mbụ wee dee ụyọkọ nke edemede egwu, yiri nke fastlane na-egosi na akwụkwọ ya.

$ 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"

N'ụzọ dị mwute, ruo ugbu a, ọ bụ naanị ndị mmepe anyị maara ka edemede ndị a si arụ ọrụ na ihe kpatara mkpa igodo a na-adịghị agwụ agwụ, na mgbe ihe mebiri ọzọ, ha nwetara "anyasị mara mma" maka nyochaa ndekọ.

Afọ 2017

N'afọ a, anyị mụtara na e nwere ihe dị ka fastlane. Enweghị ozi dị ukwuu dịka enwere ugbu a - otu esi amalite otu, otu esi eji ya. Na ngwá ọrụ n'onwe ya ka crude n'oge ahụ: mgbe niile njehie na-emechu anyị ihu na o siri ike ikwere na kpokọtara akpaaka na ha kwere nkwa.

Agbanyeghị, akụrụngwa ndị bụ isi gụnyere na isi fastlane bụ gym и pilot, anyị jisiri ike malite ya.

E meziwanyela edemede anyị ntakịrị.

$ fastlane gym  —-workspace "Example.xcworkspace" 
                --scheme "AppName" 
                —-buildlog_path "/tmp" 
                -—clean

Ha na-emeziwanye, ma ọ bụrụ na naanị n'ihi na ọ bụghị ihe niile parameters dị mkpa maka xcodebuild, mkpa ka ị gosi - gym ga-enwere onwe ya ịghọta ebe na ihe ụgha. Maka imeziwanye nke ọma, ị nwere ike ịkọwa otu igodo dị na ya xcodebuild, naanị aha igodo ahụ ka doro anya.

Oge a, ekele maka mgbatị ahụ yana usoro xcpretty arụnyere n'ime ya, ndekọ ihe nrụpụta abụrụla nke a na-ahụ anya nke ukwuu. Nke a malitere ichekwa oge iji dozie mgbakọ ndị mebiri emebi, mgbe ụfọdụ ndị otu ntọhapụ nwere ike ịchọpụta ya n'onwe ha.

N'ụzọ dị mwute, mgbakọ ọsọ nha xcodebuild и gym Anyị emeghị ya, mana anyị ga-atụkwasị akwụkwọ ahụ obi - ruo 30% speedup.

Otu usoro maka ngwa niile

Afọ 2018 na ugbu a

Ka ọ na-erule 2018, usoro nke iwulite na iwepụta ngwa na-aga kpamkpam na Jenkins, ndị mmepe kwụsịrị ịhapụ igwe ha, naanị ndị otu ntọhapụ nwere ikike ịhapụ.

Anyị chọburu imeziwanye mmalite nke ule na nyocha static, na edemede anyị toro ma tolite. Gree wee gbanwee yana ngwa anyị. N'oge ahụ, e nwere ihe dị ka ngwa 10. N'iburu n'uche na anyị nwere ikpo okwu abụọ, nke ahụ bụ ihe dịka 20 edemede "dị ndụ".

Oge ọ bụla anyị chọrọ itinye nzọụkwụ ọhụrụ na edemede ahụ, anyị ga-edegharị-mado iberibe ahụ n'ime edemede shei niile. Ikekwe anyị gaara arụ ọrụ nke ọma karị, ma ọtụtụ mgbe mgbanwe ndị dị otú ahụ na-ejedebe na typos, nke ghọrọ mgbede maka ndị otu ntọhapụ iji dozie edemede ma chọpụta onye smart guy gbakwunyere iwu a na ihe ọ na-eme n'ezie. N'ozuzu, a pụghị ikwu na ihe odide maka mgbakọ maka otu ikpo okwu dị ma ọ dịkarịa ala yiri nke ahụ. Ọ bụ ezie na ha mere otu ihe ahụ n'ezie.

Iji malite usoro maka ngwa ọhụrụ, ọ dị mkpa iji otu ụbọchị họrọ ụdị "ọhụrụ" nke scripts ndị a, wepụ ya wee kwuo na "ee, ọ na-arụ ọrụ."

N'oge okpomọkụ nke 2018, anyị lekwasịrị anya ọzọ n'ebe fastlane na-emepe emepe.

Ọrụ #1: chịkọta usoro edemede niile wee degharịa ha na Fastfile

Mgbe anyị malitere, script anyị dị ka akwa ukwu nke nwere steepụ niile na crutches n'otu mkpụrụedemede shei na Jenkins. Anyị agbanyebeghị na pipeline na nkewa site na ọkwa.

Anyị lere anya n'ihe anyị nwere wee chọpụta usoro 4 dabara na nkọwa nke CI/CD anyị:

  • wuo - ịwụnye ihe ndabere, na-achịkọta ebe nchekwa,
  • ule - na-agba ọsọ ule otu onye nrụpụta, ịgbakọ mkpuchi,
  • sonar - na-ewepụta linters niile wee ziga akụkọ na SonarQube,
  • deploy — iziga artifact na alfa (TestFlight).

Ma ọ bụrụ na ịgaghị n'ime nkọwa, na-ewepụ igodo ndị ejiri mee ihe, ị ga-enweta Fastfile a:

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

N'ezie, Fastfile mbụ anyị tụgharịrị bụrụ ihe jọgburu onwe ya, na-atụle ụfọdụ n'ime crutches anyị ka chọrọ yana ọnụọgụ paramita anyị dochiri:

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

N'ihe atụ dị n'elu, naanị akụkụ nke paramita ndị anyị kwesịrị ịkọwapụta: ndị a bụ ihe nrụpụta - atụmatụ, nhazi, aha Profaịlụ, yana nkesa nkesa - Apple ID nke akaụntụ onye nrụpụta, paswọọdụ, ID ngwa, na ndị ọzọ. na. Dị ka nke mbụ, anyị na-etinye igodo ndị a niile na faịlụ pụrụ iche - Gymfile, Matchfile и Appfile.

Ugbu a na Jenkins ị nwere ike ịkpọ iwu dị mkpirikpi nke na-adịghị eme ka anya dị mfe ma anya na-agụ ya:

# fastlane ios <lane_name>

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

Hurray, anyị dị mma

Kedu ihe ị nwetara? Kpochapụ iwu maka nzọụkwụ ọ bụla. Ederede emechara, hazie nke ọma na faịlụ fastlane. N'ịṅụrị ọṅụ, anyị gbagara ndị mmepe na-arịọ ha ka ha tinye ihe niile ha chọrọ na ebe nchekwa ha.

Ma anyị ghọtara na oge na anyị ga-ezute otu ihe isi ike - anyị ka ga-enwe 20 mgbakọ scripts nke ga-otu ụzọ ma ọ bụ ọzọ na-amalite ibi ndụ nke onwe ha, ọ ga-esi ike karị idezi ha, ebe ọ bụ na script ga-akwaga repositories. anyị enweghịkwa ohere ebe ahụ. Na, n'ozuzu, ọ gaghị ekwe omume idozi ihe mgbu anyị n'ụzọ dị otú a.

Ahụmịhe CICD mkpanaaka: otu ọkọlọtọ fastlane maka ọtụtụ ngwa mkpanaka

Ọrụ #2: nweta otu Fastfile maka ngwa N

Ugbu a, ọ dị ka idozi nsogbu ahụ abụghị ihe siri ike - dozie mgbanwe ndị ahụ, ka anyị gaa. Ee, n'ezie, nke ahụ bụ otú e si dozie nsogbu ahụ. Mana n'oge anyị na-agbagharị ya, anyị enweghị nka na fastlane n'onwe ya, ma ọ bụ na Ruby, nke edere fastlane, ma ọ bụ ọmụmaatụ bara uru na netwọkụ - onye ọ bụla dere banyere fastlane mgbe ahụ bụ naanị ihe atụ maka otu ngwa. maka otu onye nrụpụta.

Fastlane nwere ike ijikwa mgbanwe gburugburu ebe obibi, anyị anwalela nke a site na ịtọ paswọọdụ Keychain:

ENV['KEYCHAIN_PASSWORD']

Mgbe anyị lechara anya n'edemede anyị, anyị chọpụtara akụkụ ndị a na-ahụkarị:

#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

Ugbu a, ka ịmalite iji igodo ndị a na faịlụ fastlane, anyị ga-achọpụta otu esi ebufe ha ebe ahụ. Fastlane nwere ngwọta maka nke a: na-ebugharị mgbanwe site na dotenv. Akwụkwọ ahụ na-ekwu na ọ bụrụ na ọ dị mkpa ka ị na-ebu igodo maka ebumnuche dị iche iche, mepụta faịlụ nhazi dị iche iche na ndekọ fastlane. .env, .env.default, .env.development.

Ma anyị kpebiri iji ọbá akwụkwọ a dịtụ iche. Ka anyị tinye na ebe nchekwa ndị mmepe ọ bụghị script fastlane na ozi meta ya, kama igodo pụrụ iche nke ngwa a na faịlụ ahụ. .env.appName.

Onwe Ha Fastfile, Appfile, Matchfile и Gymfile, anyị zoro ya na ebe nchekwa dị iche. Ezochiri faịlụ agbakwunyere nwere igodo paswọọdụ sitere na ọrụ ndị ọzọ ebe ahụ - .env.
Ị nwere ike ịhụ ihe atụ ebe a.

Ahụmịhe CICD mkpanaaka: otu ọkọlọtọ fastlane maka ọtụtụ ngwa mkpanaka

Na CI, oku agbanwebeghị nke ukwuu; agbakwunyere igodo nhazi maka otu ngwa:

# 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

Tupu ịme iwu ndị a, anyị na-ebu scripts ebe nchekwa anyị. Ọ naghị adị mma:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Hapụ ngwọta a ugbu a, ọ bụ ezie na Fastlane nwere ngwọta maka nbudata Fastfile site na edinam import_from_git, mana ọ na-arụ ọrụ naanị maka Fastfile, mana ọ bụghị maka faịlụ ndị ọzọ. Ọ bụrụ na ịchọrọ "ezigbo mara mma", ị nwere ike ide nke gị action.

Emere otu ihe yiri nke ahụ maka ngwa gam akporo na ReactNative, faịlụ ndị ahụ dị n'otu ebe nchekwa, mana na alaka dị iche iche. iOS, android и react_native.

Mgbe ndị otu ntọhapụ chọrọ ịgbakwunye nzọụkwụ ọhụrụ, a na-edekọ mgbanwe na edemede site na MR na git, ọ dịghịzi mkpa ịchọ ndị na-eme ihe ọjọọ nke edemede ndị gbajiri agbaji, na n'ozuzu, ugbu a ị ga-agbalị imebi ya.

Ugbu a nke ahụ bụ n'ezie

Na mbụ, anyị na-etinye oge na-edobe edemede niile, na-emelite ha na idozi nsonaazụ niile nke mmelite. Ọ bụ ihe na-akụda mmụọ nke ukwuu mgbe ihe kpatara njehie na oge nkwụsị na mwepụta bụ ụdị typos dị mfe nke siri ike idobe n'ọgba aghara nke scripts shei. Ugbu a njehie dị otú ahụ na-ebelata ka opekempe. A na-atụgharị mgbanwe na ngwa niile n'otu oge. Ọ na-ewe nkeji iri na ise iji tinye ngwa ọhụrụ n'ime usoro a - guzobe pipeline template na CI ma tinye igodo na ebe nchekwa onye nrụpụta.

Ọ dị ka isi ihe dị na Fastfile maka gam akporo na mbinye aka ngwa ka enweghị nkọwa; ọ bụrụ na akụkọ ahụ na-atọ ụtọ, m ga-ede n'ihu. Ọ ga-atọ m ụtọ ịhụ ajụjụ gị ma ọ bụ aro gị "kedu ka ị ga-esi dozie nsogbu a" na nkwupụta ma ọ bụ na Telegram bashkirova.

isi: www.habr.com

Tinye a comment