Boiphihlelo ba mobile CICD: tekanyetso e le 'ngoe ea fastlane bakeng sa lits'ebetso tse ngata tsa mehala

Boiphihlelo ba mobile CICD: tekanyetso e le 'ngoe ea fastlane bakeng sa lits'ebetso tse ngata tsa mehala
Ke kopa ho bua ka kopanyo e tsoelang pele le thomello ea lisebelisoa tsa mehala tse sebelisang fastlane. Re kenya tšebetsong CI/CD joang lits'ebetsong tsohle tsa mehala, hore na re fihlile joang moo le se etsahetseng qetellong.

Ho se ho ntse ho e-na le boitsebiso bo lekaneng ho marang-rang holim'a sesebelisoa, seo re neng re se na sona qalong, kahoo ka boomo nke ke ka hlalosa sesebelisoa ka botlalo, empa ke tla bua feela ka seo re neng re e-na le sona ka nako eo:

Sehlooho se na le likarolo tse peli:

  • Semelo sa ho hlaha ha mobile CI/CD k'hamphaning
  • Tharollo ea tekheniki ea ho tsamaisa CI/CD bakeng sa lits'ebetso tsa N

Karolo ea pele ke nostalgia ea matsatsi a khale, 'me ea bobeli ke phihlelo eo u ka e sebelisang ho uena.

Ke kamoo e etsahetseng historing

Selemo 2015

Re sa tsoa qala ho nts'etsapele lits'ebetso tsa mehala, joale re ne re sa tsebe letho ka kopanyo e tsoelang pele, ka DevOps le lintho tse ling tse fesheneng. Nchafatso e 'ngoe le e' ngoe ea kopo e ile ea phatlalatsoa ke moqapi ka boeena ho tsoa mochining oa hae. 'Me haeba bakeng sa Android e bonolo haholo - e kopantsoe, e saennoe .apk mme ra e kenya ho Google Developer Console, ebe bakeng sa iOS sesebelisoa sa kabo sa ka nako eo ka Xcode se re siile mantsiboea a monate - liteko tsa ho khoasolla li-archive hangata li ne li fella ka liphoso mme re ile ra tlameha ho leka hape. Ho ile ha fumaneha hore moqapi ea tsoetseng pele ka ho fetisisa ha a ngole khoutu ka makhetlo a 'maloa ka khoeli, empa ho e-na le hoo o lokolla kopo.

Selemo 2016

Re ile ra hola, re ne re se re ntse re e-na le menahano ea ho lokolla bahlahisi ho tloha letsatsi lohle bakeng sa tokollo, mme kopo ea bobeli e ile ea boela ea hlaha, e ileng ea re sutumelletsa haholoanyane ho ea ho othomathiki. Selemong sona seo, re ile ra kenya Jenkins ka lekhetlo la pele 'me ra ngola mangolo a mangata a tšosang, a tšoanang haholo le ao fastlane a e bontšang litokomaneng tsa eona.

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

Ka bomalimabe, ho fihlela joale ke bahlahisi ba rona feela ba neng ba tseba hore na mangolo ana a sebetsa joang le hore na ke hobane'ng ha palo ena e sa feleng ea linotlolo e hlokahala, 'me ha ntho e' ngoe e robeha hape, ba ile ba fumana "mantsiboea a monate" bakeng sa ho hlahloba lifate.

Selemo 2017

Selemong sena re ithutile hore ho na le ntho e kang fastlane. Ho ne ho se na tlhahisoleseling e ngata joalo ka hona joale - mokhoa oa ho qala e le 'ngoe, mokhoa oa ho e sebelisa. 'Me sesebelisoa ka boeona se ne se ntse se le litšila ka nako eo: liphoso tse sa khaotseng li ne li re nyahamisa feela' me ho ne ho le thata ho lumela ho othomathike ea boselamose eo ba e tšepisitseng.

Leha ho le joalo, lits'ebeletso tsa mantlha tse kenyellelitsoeng mokokotlong oa fastlane ke gym и pilot, re ile ra khona ho e qala.

Lingoliloeng tsa rona li ntlafalitsoe hanyane.

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

Li ntlafalitsoe, haeba feela e se litekanyo tsohle tse hlokahalang bakeng sa xcodebuild, o hloka ho bonts'a - gym e tla utloisisa ka boikemelo hore na e bua ka eng. 'Me bakeng sa tokiso e ntle, o ka bolela linotlolo tse tšoanang le tsa ho xcodebuild, ke mabitso a linotlolo feela a hlakileng haholoanyane.

Lekhetlong lena, ka lebaka la boikoetliso le sebopeho sa xcpretty se hahelletsoeng, likutu tsa kaho li se li le bonolo haholoanyane. Sena se ile sa qala ho boloka nako ea ho lokisa likopano tse robehileng, 'me ka linako tse ling sehlopha sa tokollo se ne se khona ho iketsetsa sona.

Ka bomalimabe, litekanyo tsa lebelo la kopano xcodebuild и gym Ha rea ​​e etsa, empa re tla tšepa litokomane - ho fihla ho 30% ka potlako.

Ts'ebetso e le 'ngoe bakeng sa lits'ebetso tsohle

Selemo sa 2018 le hona joale

Ka 2018, mokhoa oa ho haha ​​​​le ho tsamaisa likopo o ile oa fallela ka ho feletseng ho Jenkins, bahlahisi ba ile ba khaotsa ho lokolloa ho tloha mechine ea bona, 'me ke sehlopha sa tokollo feela se nang le tokelo ea ho lokolla.

Re ne re se re ntse re batla ho ntlafatsa tlhahiso ea liteko le tlhahlobo e tsitsitseng, 'me mangolo a rona a ile a hōla le ho hōla. Hola le ho fetoha hammoho le likopo tsa rona. Ka nako eo ho ne ho e-na le likopo tse ka bang 10. Ha re nahana hore re na le liforomo tse peli, hoo e ka bang 20 "tse phelang" scripts.

Nako le nako ha re ne re batla ho kenya mohato o mocha ho script, re ne re tlameha ho kopitsa-ho beha likotoana ka har'a likhetla tsohle. Mohlomong re ka be re sebelitse ka hloko haholoanyane, empa hangata liphetoho tse joalo li ile tsa qetella ka ho thaepa, tse ileng tsa fetoha mantsiboea hore sehlopha sa tokollo se lokise mangolo le ho fumana hore na ke mohlankana ofe ea bohlale ea kentseng taelo ena le seo e hlileng e se etsang. Ka kakaretso, ho ke ke ha boleloa hore mangolo a kopano bakeng sa sethala se le seng bonyane a ne a batla a tšoana. Le hoja ka sebele ba ile ba etsa ntho e tšoanang.

Bakeng sa ho qala ts'ebetso ea kopo e ncha, ho ne ho hlokahala ho qeta letsatsi ho khetha mofuta o "ncha" oa mangolo ana, ho e lokisa le ho re "e, ea sebetsa."

Lehlabuleng la 2018, re ile ra boela ra sheba ho fastlane e ntseng e tsoela pele.

Mosebetsi oa #1: akaretsa mehato eohle ea script ebe u e ngola hape ho Fastfile

Ha re qala, mangolo a rona a ne a shebahala joaloka lesela la maoto le nang le litepisi tsohle le lithupa tse ngotsoeng ka khetla e le 'ngoe ho Jenkins. Ha re so fetohele ho lipeipi le karohano ka mothati.

Re shebile seo re nang le sona mme ra tseba mehato e 4 e lumellanang le tlhaloso ea CI/CD ea rona:

  • haha - ho kenya litšepe, ho bokella polokelo ea litaba,
  • teko - ho etsa liteko tsa yuniti ea nts'etsopele, ho bala likhatiso,
  • sonar - e hlahisa li-linters tsohle mme e romela litlaleho ho SonarQube,
  • deploy - ho romella sets'oants'o sa maiketsetso ho alpha (TestFlight).

'Me haeba u sa kenelle lintlha, u siea linotlolo tse sebelisoang liketsong, u tla fumana Fastfile ena:

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

Ebile, Fastfile ea rona ea pele e ile ea fetoha e nyarosang, ha ho nahanoa ka lithupa tseo re neng re ntse re li hloka le palo ea liparamente tseo re li kentseng sebakeng:

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

Mohlaleng o kaholimo, ke karolo feela ea liparamente tseo re hlokang ho li hlakisa: tsena ke li-parameter tsa kaho - schema, tlhophiso, mabitso a Provisione, hammoho le likarolo tsa kabo - Apple ID ea ak'haonte ea mohlahlami, phasewete, ID ea kopo, joalo-joalo. ho. E le khakanyo ea pele, re beha linotlolo tsena kaofela lifaeleng tse khethehileng - Gymfile, Matchfile и Appfile.

Hona joale ho Jenkins u ka letsetsa litaelo tse khutšoanyane tse sa fifatseng pono 'me li ka baloa habonolo ka leihlo:

# fastlane ios <lane_name>

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

Hurray, re hantle

U fumane eng? Litaelo tse hlakileng bakeng sa mohato o mong le o mong. Lingoloa tse hloekisitsoeng, tse hlophisitsoeng ka makhethe ka lifaele tsa fastlane. Re thabile, re ile ra mathela ho bahlahisi re ba kopa hore ba kenye lintho tsohle tseo ba li hlokang polokelong ea bona.

Empa re ile ra elelloa ha nako e ntse e ea hore re tla kopana le mathata a tšoanang - re ntse re tla ba le mangolo a kopano a 20 ao ka tsela e 'ngoe a neng a tla qala ho phela bophelo ba bona, ho tla ba thata le ho feta ho a hlophisa, kaha mangolo a ne a tla fallela libakeng tsa polokelo, mme re ne re se na phihlello moo. 'Me, ka kakaretso, ho ke ke ha khoneha ho rarolla bohloko ba rona ka tsela ena.

Boiphihlelo ba mobile CICD: tekanyetso e le 'ngoe ea fastlane bakeng sa lits'ebetso tse ngata tsa mehala

Mosebetsi oa #2: fumana Fastfile e le 'ngoe bakeng sa lits'ebetso tsa N

Hona joale ho bonahala eka ho rarolla bothata ha ho thata hakaalo - beha mefuta-futa, 'me re tsamaee. E, ha e le hantle, ke kamoo bothata bo ileng ba rarolloa kateng. Empa ka nako eo ha re e senya, re ne re se na tsebo ea fastlane ka boeona, leha e le ho Ruby, moo fastlane e ngotsoeng ho eona, kapa mehlala e sebetsang marang-rang - e mong le e mong ea ngotseng ka fastlane o ne a lekanyelitsoe ho mohlala bakeng sa kopo e le 'ngoe bakeng sa moetsi e mong.

Fastlane e khona ho sebetsana le maemo a fapaneng a tikoloho, 'me re se re lekile sena ka ho beha senotlolo sa Keychain:

ENV['KEYCHAIN_PASSWORD']

Ka mor'a ho sheba mangolo a rona, re khethile likarolo tse tloaelehileng:

#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

Hona joale, e le hore re qale ho sebelisa linotlolo tsena lifaeleng tsa fastlane, re ne re tlameha ho tseba hore na re ka li tsamaisa joang moo. Fastlane e na le tharollo bakeng sa sena: ho kenya mefuta e fapaneng ka dotenv. Litokomane li re haeba ho bohlokoa ho uena ho kenya linotlolo bakeng sa merero e fapaneng, theha lifaele tse 'maloa tsa tlhophiso bukeng ea fastlane. .env, .env.default, .env.development.

Eaba re etsa qeto ea ho sebelisa laebrari ena ka tsela e fapaneng hanyane. Ha re beheng polokelong ea bahlahisi eseng lingoloa tsa fastlane le tlhaiso-leseling ea eona ea meta, empa linotlolo tse ikhethang tsa ts'ebeliso ena faeleng. .env.appName.

Ka boeena Fastfile, Appfile, Matchfile и Gymfile, re ile ra e pata sebakeng se ka thōko sa polokelo. Faele e eketsehileng e nang le linotlolo tsa password tse tsoang lits'ebeletso tse ling e ne e patiloe moo - .env.
O ka bona mohlala mona.

Boiphihlelo ba mobile CICD: tekanyetso e le 'ngoe ea fastlane bakeng sa lits'ebetso tse ngata tsa mehala

Ho CI, mohala ha o so fetohe haholo; senotlolo sa tlhophiso bakeng sa sesebelisoa se itseng se kentsoe:

# 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

Pele re tsamaisa litaelo, re kenya polokelo ea rona ka mangolo. Ha e shebahale e le ntle hakaalo:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

E siile tharollo hajoale, leha Fastlane e na le tharollo ea ho jarolla Fastfile ka nke khato e molemo import_from_git, empa e sebetsa feela bakeng sa Fastfile, empa eseng bakeng sa lifaele tse ling. Haeba u batla "e ntle haholo", u ka ngola ea hau action.

Sete e tšoanang e entsoe bakeng sa lits'ebetso tsa Android le ReactNative, lifaele li sebakeng se le seng sa polokelo, empa makaleng a fapaneng. iOS, android и react_native.

Ha sehlopha sa tokollo se batla ho eketsa mohato o mocha, liphetoho ho script li ngotsoe ka MR ka git, ha ho sa na tlhokahalo ea ho batla batlōli ba mengolo e robehileng, 'me ka kakaretso, joale u tlameha ho leka ho e senya.

Joale ke 'nete

Pejana, re ne re qeta nako re boloka mangolo ohle, re a ntlafatsa le ho lokisa litlamorao tsohle tsa liapdeite. Ho ne ho soabisa haholo ha mabaka a liphoso le nako ea ho theoha ha litokollo e ne e le li-typos tse bonolo tseo ho neng ho le thata haholo ho boloka tlaleho ka har'a moqoqo oa likhetla. Hona joale liphoso tse joalo li fokotsehile ho bonyane. Liphetoho li fetisetsoa lits'ebetsong tsohle ka nako e le 'ngoe. 'Me ho nka metsotso e 15 ho kenya kopo e ncha ts'ebetsong - theha pipeline ea template ho CI' me u kenye linotlolo sebakeng sa polokelo ea moqapi.

Ho bonahala eka ntlha e nang le Fastfile bakeng sa Android le signature ea kopo e lula e sa hlalosoa; haeba sengoloa se khahla, ke tla ngola tsoelopele. Ke tla thabela ho bona lipotso kapa litlhahiso tsa hau "o ka rarolla bothata bona joang" maikutlong kapa ho Telegraph bashkirova.

Source: www.habr.com

Eketsa ka tlhaloso