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:

Ang artikulo naglangkob sa duha ka bahin:

  • 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.

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

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.

Ang among mga script gipaayo og gamay.

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

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:

# fastlane ios <lane_name>

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

Hurray, maayo kami

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.

Kasinatian sa Mobile CICD: usa ka sumbanan sa fastlane alang sa daghang mga aplikasyon sa mobile

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.

Kasinatian sa Mobile CICD: usa ka sumbanan sa fastlane alang sa daghang mga aplikasyon sa mobile

Sa CI, ang tawag wala kaayo nagbag-o; usa ka yawe sa pag-configure alang sa usa ka piho nga aplikasyon ang gidugang:

# 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

Sa wala pa ipadagan ang mga sugo, among gikarga ang among repository sa mga script. Dili kaayo nindot tan-awon:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Gibiyaan kini nga solusyon sa pagkakaron, bisan kung ang Fastlane adunay solusyon sa pag-download sa Fastfile pinaagi sa aksyon import_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.

Source: www.habr.com

Idugang sa usa ka comment