Nharembozha CICD ruzivo: imwe fastlane chiyero kune akawanda mafoni maapplication

Nharembozha CICD ruzivo: imwe fastlane chiyero kune akawanda mafoni maapplication
Ndinoda kutaura nezve kuenderera mberi kwekubatanidza uye kuendesa kune nharembozha uchishandisa fastlane. Mashandisiro atinoita CI/CD pane ese nharembozha, kuti takasvika sei uye chii chakaitika kumagumo.

Patova nezvakakwana panetiweki pane chishandiso, icho isu takashaya pakutanga, saka ini nemaune handisi kuzotsanangura chishandiso zvakadzama, asi ndinongo tarisa kune zvataive nazvo panguva iyoyo:

Chinyorwa chine zvikamu zviviri:

  • Kumashure kwekubuda kwe mobile CI / CD mukambani
  • Tekinoroji mhinduro yekuburitsa CI/CD yeN-maapplication

Chikamu chekutanga chishuwo chemazuva ekare, uye chechipiri chiitiko chaunogona kuzvishandisa iwe pachako.

Izvi ndizvo zvakaitika munhoroondo

Mwaka 2015

Isu takangotanga kugadzira nharembozha, saka isu takanga tisingazive chero chinhu nezvekuenderera mberi kwekubatanidzwa, nezveDevOps nezvimwe zvinhu zvefashoni. Yega yega yekuvandudza application yakatenderedzwa nemugadziri pachake kubva pamushini wake. Uye kana ye Android iri nyore - yakaunganidzwa, yakasainwa .apk ndokuiisa kuGoogle Developer Console, ipapo yeIOS iyo yekugovera chishandiso kuburikidza neXcode yakatisiya nemanheru makuru - kuyedza kudhawunirodha chengetedzo yaiwanzopera mukukanganisa uye taifanira kuedza zvakare. Zvakazoitika kuti mugadziri wepamberi haanyore kodhi kakawanda pamwedzi, asi anoburitsa application.

Mwaka 2016

Isu takakura, takanga tatova nepfungwa dzekusunungura vagadziri kubva zuva rose kuti vasunungurwe, uye yechipiri application yakaonekwa, iyo yakangotisundidzira zvakanyanya kune otomatiki. Gore rimwe chetero, takaisa Jenkins kekutanga uye takanyora magwaro akawanda anotyisa, akafanana chaizvo neaya anoratidza fastlane muzvinyorwa zvayo.

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

Nehurombo, kusvika parizvino vagadziri vedu chete ndivo vaiziva mashandiro anoita zvinyorwa izvi uye nei iyi isingaperi murwi wemakiyi ichidikanwa, uye kana chimwe chinhu chaputsika zvakare, vakawana "manheru akanaka" ekuongorora matanda.

Mwaka 2017

Gore rino takadzidza kuti kune chinhu chinonzi fastlane. Pakanga pasina ruzivo rwakawanda sezviripo iye zvino - kutanga sei, kuishandisa sei. Uye chishandiso pachacho chaive chichiri chisina kuchena panguva iyoyo: zvikanganiso zvenguva dzose zvakangotiodza mwoyo uye zvaive zvakaoma kutenda mumashiripiti otomatiki avakavimbisa.

Nekudaro, izvo zvakakosha zvinoshandiswa zvinosanganisirwa mufastlane musimboti ndizvo gym ΠΈ pilot, takakwanisa kuzvitanga.

Zvinyorwa zvedu zvakavandudzwa zvishoma.

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

Iwo akagadziridzwa, kana chete nekuti kwete ese ma paramita anodiwa xcodebuild, unofanira kuratidza - gym achazvimiririra kunzwisisa kuti kupi uye chii chiripo. Uye kune zvimwe zvakanaka-tuning, unogona kutsanangura makiyi akafanana neari mukati xcodebuild, kungodudza mazita emakiyi ndiko kujeka.

Panguva ino, nekuda kwejimu uye yakavakirwa-mukati xcpretty fomati, matanda ekuvaka ave akanyanya kunyoreka. Izvi zvakatanga kuchengetedza nguva pakugadzirisa magungano akaputsika, uye dzimwe nguva timu yekuburitsa yaigona kuzvionera yega.

Sezvineiwo, gungano kumhanya zviyero xcodebuild ΠΈ gym Hatina kuzviita, asi isu tichavimba nemagwaro - kusvika ku30% kukurumidza.

Single process kune ese maapplication

Gore ra2018 uye ikozvino

Pakazosvika 2018, maitiro ekuvaka uye kuburitsa zvikumbiro zvakatamira zvachose kuJenkins, vagadziri vakamira kuburitsa kubva kumashini avo, uye chete timu yekuburitsa yaive nekodzero yekuburitsa.

Isu tanga tichida kuvandudza kuvhurwa kwebvunzo uye static ongororo, uye zvinyorwa zvedu zvakakura nekukura. Yakakura uye yakachinja pamwe chete nemaapplication edu. Panguva iyoyo, pakanga pane zvikumbiro zve 10. Tichifunga kuti tine mapuratifomu maviri, iyo inenge makumi maviri "mapenyu" zvinyorwa.

Pese pataida kuwedzera nhanho nyowani kune script, taifanira kukopa-namira zvimedu muzvinyorwa zvese zvegoko. Zvichida tingadai takashanda zvakanyatsonaka, asi kazhinji shanduko dzakadaro dzakaguma mumataipi, ayo akachinja kuva manheru kuti timu yekuburitsa igadzirise zvinyorwa uye kuona kuti ndeupi murume akangwara akawedzera uyu murairo uye zvaanonyatsoita. Kazhinji, hazvigone kutaurwa kuti zvinyorwa zvekusangana kwepuratifomu imwe zvaive zvakada kufanana. Kunyange zvazvo ivo zvirokwazvo vakaita chinhu chimwe chetecho.

Kuti utange hurongwa hwekushandisa kutsva, zvaive zvakafanira kupedza zuva kusarudza "itsva" vhezheni yezvinyorwa izvi, gadzirisa uye uti "hongu, inoshanda."

Muzhizha ra2018, takatarisa zvakare kune ichiri kusimukira fastlane.

Basa #1: pfupikisa ese script nhanho uye nyora zvakare muFastfile

Patakatanga, zvinyorwa zvedu zvaiita sejira retsoka rine nhanho dzose uye madondoro mune imwe shell script muJenkins. Hatisati tachinja papipeline uye division by stage.

Takatarisa zvatinazvo tikaona matanho mana anoenderana nerondedzero yeCI/CD yedu:

  • kuvaka - kuisa zvinotsamira, kuunganidza iyo archive,
  • bvunzo - inomhanyisa yekuvandudza unit bvunzo, kuverenga kuvharwa,
  • sonar - inotangisa zvese linters uye inotumira mishumo kuSonarQube,
  • deploy - kutumira artifact kune alpha (TestFlight).

Uye kana ukasapinda mune zvakadzama, uchisiya makiyi anoshandiswa muzviito, iwe unowana iyi 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

Muchokwadi, yedu yekutanga Fastfile yakave yakashata, tichifunga nezvemamwe madondoro atakanga tichiri kuda uye huwandu hwema paramita atakatsiva:

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

Mumuenzaniso uri pamusoro, chikamu chete chema parameter atinoda kutsanangura: aya ndiwo maparamendi ekuvaka - schema, gadziriso, Provision Profile mazita, pamwe nekugovera paramita - Apple ID yeakaundi yekuvandudza, password, application ID, zvichingodaro. on. Sekufungidzira kwekutanga, tinoisa makiyi ese aya mumafaira akakosha - Gymfile, Matchfile ΠΈ Appfile.

Iye zvino muJenkins unogona kudana mirairo mipfupi iyo isingasvibise maonero uye inoverengeka nyore neziso:

# fastlane ios <lane_name>

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

Hurray, tiri vakuru

Chii chawawana? Mirairo yakajeka padanho rega rega. Manyoro akacheneswa, akarongwa zvakanaka mufastlane mafaera. Tichifara, takamhanyira kuvagadziri tichivakumbira kuti vawedzere zvese zvavaida kumatura avo.

Asi takaona nekufamba kwenguva kuti taizosangana nematambudziko akafanana - taizoramba tine zvinyorwa zvemagungano makumi maviri zvekuti neimwe nzira kana imwe nzira yaizotanga kurarama hupenyu hwavo, zvaizonetsa kuagadzirisa, sezvo zvinyorwa zvaizoenda kunzvimbo dzekuchengetedza, uye takanga tisina nzira yokusvika ikoko. Uye, kazhinji, hazvizogoneki kugadzirisa marwadzo edu nenzira iyi.

Nharembozha CICD ruzivo: imwe fastlane chiyero kune akawanda mafoni maapplication

Basa #2: tora imwe Fastfile yeN application

Iye zvino zvinoratidzika kuti kugadzirisa dambudziko hakuna kunyanya kuoma - gadzirisa zvinoshanduka, uye ngatiende. Hongu, chaizvoizvo, ndiyo nzira iyo dambudziko rakagadziriswa. Asi panguva iyoyo patakanga tichizviputira, isu takanga tisina hunyanzvi mufastlane pachayo, kana muRuby, umo makanyorwa fastlane, kana mienzaniso inobatsira pane network - wese akanyora nezve fastlane ipapo akaganhurirwa kumuenzaniso kune imwe application. kune mumwe mugadziri.

Fastlane inogona kubata nharaunda dzakasiyana, uye isu takatoedza izvi nekuisa Keychain password:

ENV['KEYCHAIN_PASSWORD']

Mushure mekutarisa zvinyorwa zvedu, takaona zvikamu zvakajairika:

#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

Zvino, kuti titange kushandisa makiyi aya mumafaera efastlane, taifanira kufunga kuti toaendesa sei ikoko. Fastlane ine mhinduro yeizvi: loading variables via dotenv. Zvinyorwa zvinoti kana zvakakosha kuti iwe uise makiyi ezvinangwa zvakasiyana, gadzira akati wandei mafaera ekugadzirisa mufastlane dhairekitori. .env, .env.default, .env.development.

Zvino takafunga kushandisa raibhurari iyi zvishoma zvakasiyana. Ngatiise munzvimbo yevagadziri kwete zvinyorwa zvefastlane uye ruzivo rwayo rwemeta, asi makiyi akasarudzika echishandiso ichi mufaira. .env.appName.

Ivo pachavo Fastfile, Appfile, Matchfile ΠΈ Gymfile, takaiviga mune imwe nzvimbo inochengeterwa zvinhu. Rimwe faira rine makiyi epassword kubva kune mamwe masevhisi rakavigwa ipapo - .env.
Unogona kuona muenzaniso pano.

Nharembozha CICD ruzivo: imwe fastlane chiyero kune akawanda mafoni maapplication

PaCI, kufona hakuna kuchinja zvakanyanya; kiyi yekumisikidza yeimwe application yakawedzerwa:

# 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

Tisati tashandisa mirairo, tinoisa repository yedu nemagwaro. Hazvina kutaridzika zvakanaka:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Kusiya iyi mhinduro ikozvino, kunyangwe Fastlane ine mhinduro yekurodha Fastfile kuburikidza chiito import_from_git, asi inongoshanda kuFastfile, asi kwete kune mamwe mafaera. Kana iwe uchida "zvakanaka chaizvo", unogona kunyora iwe pachako action.

Seti yakafanana yakagadzirirwa Android application uye ReactNative, mafaera ari mune imwechete repository, asi mumapazi akasiyana. iOS, android ΠΈ react_native.

Kana boka rekusunungura richida kuwedzera imwe nhanho itsva, shanduko mune script yakanyorwa kuburikidza neMR mu git, hapasisina chikonzero chekutsvaga vatadzi vezvinyorwa zvakaputsika, uye kazhinji, ikozvino unofanira kuedza kuiputsa.

Zvino ndizvo zvazviri

Kare, takapedza nguva tichichengetedza zvinyorwa zvese, tichizvivandudza nekugadzirisa zvese zvinokonzeresa. Zvaive zvinoodza moyo apo zvikonzero zvekukanganisa uye kuderera mukuburitswa zvaive nyore typos izvo zvaive zvakaoma kuchengeta track yejumble yegoko script. Iye zvino zvikanganiso zvakadaro zvakaderedzwa kusvika zvishoma. Shanduko dzinoendeswa kune ese maapplication kamwechete. Uye zvinotora maminetsi gumi neshanu kuisa application nyowani mukuita - gadza pombi yetemplate paCI uye wedzera makiyi kune inogadziridza repository.

Zvinoita sekunge iyo poindi ine Fastfile ye Android uye siginecha yekushandisa inoramba isina kutsanangurwa; kana chinyorwa ichi chinonakidza, ini ndichanyora kuenderera. Ini ndichafara kuona mibvunzo yako kana mazano "ungagadzirisa sei dambudziko iri" mune zvakataurwa kana paTeregiramu bashkirova.

Source: www.habr.com

Voeg