Eòlas gluasadach CICD: aon inbhe fastlane airson mòran thagraidhean gluasadach

Eòlas gluasadach CICD: aon inbhe fastlane airson mòran thagraidhean gluasadach
Bu mhath leam bruidhinn mu aonachadh agus lìbhrigeadh leantainneach airson aplacaidean gluasadach a’ cleachdadh fastlane. Mar a chuireas sinn CI/CD an gnìomh air a h-uile aplacaid gluasadach, mar a fhuair sinn ann agus dè thachair aig a’ cheann thall.

Tha stuth gu leòr air an lìonra mu thràth air an acfhainn, rud a bha cho dìth oirnn an toiseach, agus mar sin a dh’aona ghnothach cha toir mi cunntas mionaideach air an inneal, ach cha toir mi iomradh ach air na bha againn an uairsin:

Tha dà phàirt anns an artaigil:

  • Cùl-fhiosrachadh mu nochdadh CI / CD gluasadach sa chompanaidh
  • Fuasgladh teignigeach airson a bhith a’ sgaoileadh CI/CD airson N-tagraidhean

Tha a 'chiad phàirt nas cianalais airson na seann làithean, agus an dàrna - eòlas a dh'fhaodas tu a chur a-steach dhut fhèin.

Seo mar a thachair e gu h-eachdraidheil

Bliadhna 2015

Tha sinn dìreach air tòiseachadh a’ leasachadh thagraidhean gluasadach, agus an uairsin cha robh fios againn càil mu aonachadh leantainneach, mu DevOps agus rudan fasanta eile. Chaidh gach ùrachadh tagraidh a chuir a-steach leis an leasaiche fhèin bhon inneal aige. Agus ma tha e gu math sìmplidh airson Android - air a chruinneachadh, air a shoidhnigeadh .apk agus chaidh a luchdachadh suas gu Google Developer Console, an uairsin airson iOS dh’ fhàg an inneal sgaoilidh aig an àm tro Xcode sinn le oidhcheannan sgoinneil - gu tric thàinig oidhirpean gus an tasglann a luchdachadh sìos gu crìch le mearachdan agus bha againn ri feuchainn a-rithist. Thionndaidh e a-mach nach eil an leasaiche as adhartaiche a ’sgrìobhadh còd grunn thursan sa mhìos, ach a’ leigeil ma sgaoil an tagradh.

Bliadhna 2016

Dh'fhàs sinn suas, bha smuaintean againn mu thràth mu mar as urrainn dhuinn luchd-leasachaidh a shaoradh bho latha slàn airson foillseachadh, agus nochd dàrna tagradh cuideachd, a thug dìreach barrachd dhuinn gu fèin-ghluasad. An aon bhliadhna sin, chuir sinn Jenkins a-steach airson a ’chiad uair agus sgrìobh sinn dòrlach de sgriobtaichean eagallach, glè choltach ris an fheadhainn a tha fastlane a’ nochdadh anns na sgrìobhainnean aige.

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

Gu mì-fhortanach, gu ruige seo cha robh fios ach aig an luchd-leasachaidh againn mar a tha na sgriobtaichean sin ag obair agus carson a tha feum air a’ chruach iuchraichean gun chrìoch seo, agus nuair a bhris rudeigin a-rithist, fhuair iad na “oidhcheannan eireachdail” airson mion-sgrùdadh a dhèanamh air logaichean.

Bliadhna 2017

Am-bliadhna dh’ ionnsaich sinn gu bheil leithid de rud ann ri fastlane. Cha robh uimhir de dh’ fhiosrachadh ann ’s a th’ ann an-dràsta - mar a thòisicheas tu air fear, mar a chleachdas tu e. Agus bha an inneal fhèin fhathast amh aig an àm sin: cha robh mearachdan seasmhach ach a’ briseadh-dùil dhuinn agus bha e duilich a chreidsinn anns an fèin-ghluasad draoidheil a gheall iad.

Ach, is e na prìomh ghoireasan a tha air an toirt a-steach do chridhe fastlane gym и pilot, chaidh againn air tòiseachadh air.

Tha na sgriobtaichean againn air an leasachadh beagan.

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

Chaidh an leasachadh, mas e a-mhàin leis nach eil a h-uile paramadair riatanach airson xcodebuild, feumaidh tu aideachadh — gym tuigidh iad gu neo-eisimeileach càite agus dè a tha na laighe. Agus airson gleusadh nas mionaidiche, faodaidh tu na h-aon iuchraichean a shònrachadh agus a tha ann xcodebuild, chan eil ach ainm nan iuchraichean nas soilleire.

An turas seo, le taing don gym agus an cruth xcpretty togte, tha na logaichean togail air fàs tòrr nas so-leughaidh. Thòisich seo air ùine a shàbhaladh air co-chruinneachaidhean briste a chàradh, agus uaireannan dh’ fhaodadh an sgioba fuasglaidh obrachadh a-mach leotha fhèin.

Gu mì-fhortanach, tomhas astar cruinneachaidh xcodebuild и gym Cha do rinn sinn e, ach bidh earbsa againn anns na sgrìobhainnean - suas ri luaths 30%.

Pròiseas singilte airson a h-uile tagradh

Bliadhna 2018 agus an-diugh

Ro 2018, ghluais pròiseas togail agus sgaoileadh thagraidhean gu tur gu Jenkins, sguir luchd-leasachaidh a bhith a’ leigeil ma sgaoil bho na h-innealan aca, agus cha robh ach an sgioba fuasglaidh aig an robh còir air an leigeil ma sgaoil.

Bha sinn mar-thà airson cur air bhog dheuchainnean agus mion-sgrùdadh statach a leasachadh, agus dh’ fhàs agus dh’ fhàs na sgriobtaichean againn. Dh'fhàs agus dh'atharraich sinn còmhla ris na tagraidhean againn. Aig an àm sin, bha timcheall air 10 tagradh ann. Leis gu bheil dà àrd-ùrlar againn, tha sin timcheall air 20 sgriobt “beò”.

Gach turas a bha sinn airson ceum ùr a chur ris an sgriobt, bha againn ri na pìosan a chopaigeadh a-steach do na sgriobtaichean sligean gu lèir. Is dòcha gum faodadh sinn a bhith air a bhith ag obair nas faiceallach, ach gu tric thàinig na h-atharrachaidhean sin gu crìch ann an typos, a thionndaidh gu oidhcheannan airson an sgioba fuasglaidh gus sgriobtaichean a chàradh agus faighinn a-mach cò an duine snasail a chuir ris an àithne seo agus dè a bhios e a’ dèanamh dha-rìribh. San fharsaingeachd, chan urrainnear a ràdh gu robh na sgriobtaichean airson co-chruinneachadh airson aon àrd-ùrlar co-dhiù rudeigin coltach. Ged a rinn iad gu cinnteach an aon rud.

Gus pròiseas tagraidh ùr a thòiseachadh, bha e riatanach latha a chaitheamh airson dreach “ùr” de na sgriobtaichean sin a thaghadh, a dheasbad agus a ràdh “tha, tha e ag obair.”

As t-samhradh 2018, choimhead sinn a-rithist a dh’ ionnsaigh an t-sreath luath a bha fhathast a’ leasachadh.

Gnìomh #1: geàrr-chunntas air na ceumannan sgriobta gu lèir agus ath-sgrìobh iad ann am Fastfile

Nuair a thòisich sinn, bha na sgriobtaichean againn a’ coimhead coltach ri aodach-coise anns an robh a h-uile ceum agus crutches ann an aon sgriobt shligean ann an Jenkins. Chan eil sinn fhathast air atharrachadh gu loidhne-phìoban agus roinneadh a rèir ìre.

Choimhead sinn air na th’ againn agus chomharraich sinn 4 ceumannan a tha iomchaidh don tuairisgeul air ar CI/CD:

  • togail - a 'stàladh eisimeileachd, a' cruinneachadh an tasglann,
  • deuchainn - ruith deuchainnean aonad leasaiche, obrachadh a-mach còmhdach,
  • sonar - a’ cur air bhog a h-uile loidhne agus a’ cur aithisgean gu SonarQube,
  • cleachdadh - a’ cur artifact gu alpha (TestFlight).

Agus mura tèid thu a-steach gu mion-fhiosrachadh, a’ fàgail às na h-iuchraichean a chaidh a chleachdadh ann an gnìomhan, gheibh thu am Fastfile seo:

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

Gu dearbh, thionndaidh a’ chiad Fastfile againn gu bhith uamhasach, a’ beachdachadh air cuid de na crutches a bha a dhìth oirnn fhathast agus an àireamh de pharamadairean a chuir sinn na àite:

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

Anns an eisimpleir gu h-àrd, chan eil ach pàirt de na paramadairean a dh’ fheumas sinn a shònrachadh: is iad seo na paramadairean togail - sgeama, rèiteachadh, ainmean Pròifil Solarachaidh, a bharrachd air paramadairean cuairteachaidh - ID Apple de chunntas an leasaiche, facal-faire, ID an tagraidh, agus mar sin air adhart. air adhart. Mar chiad tuairmse, chuir sinn na h-iuchraichean sin uile ann am faidhlichean sònraichte - Gymfile, Matchfile и Appfile.

A-nis ann an Jenkins faodaidh tu fios a chuir gu òrdughan goirid nach bi a’ cuir às don t-sealladh agus a tha furasta a leughadh leis an t-sùil:

# fastlane ios <lane_name>

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

Hurray, tha sinn air leth math

Dè fhuair thu? Òrdughan soilleir airson a h-uile ceum. Sgriobtaichean air an glanadh, air an rèiteachadh gu sgiobalta ann am faidhlichean fastlane. Le gàirdeachas, ruith sinn chun an luchd-leasachaidh ag iarraidh orra a h-uile dad a bha a dhìth orra a chur ris na stòran aca.

Ach thuig sinn ann an tìde gun tachradh sinn air na h-aon duilgheadasan – bhiodh fhathast 20 sgriobtaichean cruinneachaidh againn a thòisicheadh ​​aon dòigh no dòigh eile air am beatha fhèin a chaitheamh, bhiodh e na bu duilghe an deasachadh, leis gum biodh na sgriobtaichean a’ gluasad gu stòran, agus cha robh cothrom againn air sin. Agus, san fharsaingeachd, cha bhith e comasach ar pian fhuasgladh san dòigh seo.

Eòlas gluasadach CICD: aon inbhe fastlane airson mòran thagraidhean gluasadach

Gnìomh #2: faigh aon Fastfile airson tagraidhean N

A-nis tha e coltach nach eil e cho doirbh an duilgheadas fhuasgladh - suidhich na caochladairean, agus rachamaid. Tha, gu dearbh, sin mar a chaidh an duilgheadas fhuasgladh. Ach aig an àm nuair a chuir sinn a-mach e, cha robh eòlas sam bith againn air fastlane fhèin, no ann an Ruby, anns a bheil fastlane air a sgrìobhadh, no eisimpleirean feumail air an lìonra - bha a h-uile duine a sgrìobh mu fastlane an uairsin cuingealaichte ri eisimpleir airson aon iarrtas airson aon leasaiche.

Faodaidh Fastlane caochladairean àrainneachd a làimhseachadh, agus tha sinn air seo fheuchainn mu thràth le bhith a’ suidheachadh am facal-faire Keychain:

ENV['KEYCHAIN_PASSWORD']

Às deidh dhuinn coimhead air na sgriobtaichean againn, chomharraich sinn na pàirtean cumanta:

#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

A-nis, gus tòiseachadh air na h-iuchraichean sin a chleachdadh ann am faidhlichean fastlane, bha againn ri faighinn a-mach ciamar a lìbhrigeas sinn iad an sin. Tha fuasgladh aig Fastlane airson seo: A’ luchdachadh caochladairean tro dotenv. Tha na sgrìobhainnean ag ràdh ma tha e cudromach dhut iuchraichean a luchdachadh airson diofar adhbharan, cruthaich grunn fhaidhlichean rèiteachaidh anns an eòlaire fastlane .env, .env.default, .env.development.

Agus an uairsin chuir sinn romhainn an leabharlann seo a chleachdadh beagan eadar-dhealaichte. Nach cuir sinn ann an stòr an luchd-leasachaidh chan e na sgriobtaichean fastlane agus am fiosrachadh meta aige, ach iuchraichean sònraichte an tagraidh seo san fhaidhle .env.appName.

Iad fhèin Fastfile, Appfile, Matchfile и Gymfile, chuir sinn am falach e ann an ionad-tasgaidh air leth. Chaidh faidhle a bharrachd le iuchraichean facal-faire bho sheirbheisean eile fhalach an sin - .env.
Chì thu eisimpleir an seo.

Eòlas gluasadach CICD: aon inbhe fastlane airson mòran thagraidhean gluasadach

Air CI, chan eil an gairm air atharrachadh mòran; chaidh iuchair rèiteachaidh airson tagradh sònraichte a chur ris:

# 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

Mus ruith sinn na h-òrdughan, bidh sinn a’ luchdachadh ar stòr le sgriobtaichean. Chan eil e a’ coimhead cho snog:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Dh’ fhàg mi am fuasgladh seo airson a-nis, ged a tha fuasgladh aig Fastlane airson Fastfile a luchdachadh sìos tro gnìomha import_from_git, ach chan obraich e ach airson Fastfile, ach chan ann airson faidhlichean eile. Ma tha thu ag iarraidh “fìor bhrèagha”, faodaidh tu do chuid fhèin a sgrìobhadh action.

Chaidh seata coltach ris a dhèanamh airson tagraidhean Android agus ReactNative, tha na faidhlichean san aon stòr, ach ann an diofar mheuran iOS, android и react_native.

Nuair a tha an sgioba fuasglaidh ag iarraidh ceum ùr a chuir ris, tha atharrachaidhean san sgriobt air an clàradh tro MR ann an git, chan eil feum tuilleadh a bhith a’ coimhead airson culprits sgriobtaichean briste, agus san fharsaingeachd, a-nis feumaidh tu feuchainn ri bhriseadh.

A-nis tha sin gu cinnteach

Roimhe sin, chuir sinn seachad ùine a’ cumail suas na sgriobtaichean gu lèir, gan ùrachadh agus a’ càradh buaidh nan ùrachaidhean. Bha e na bhriseadh-dùil mòr nuair a bha na h-adhbharan airson mhearachdan agus ùine downt ann am fiosan mar typos sìmplidh a bha cho duilich sùil a chumail orra anns an àireamh de sgriobtaichean sligean. A-nis tha mearachdan mar sin air an lughdachadh chun ìre as ìsle. Tha atharrachaidhean gan sgaoileadh a-mach gu gach tagradh aig an aon àm. Agus bheir e 15 mionaidean tagradh ùr a chuir a-steach don phròiseas - cuir loidhne-phìoban teamplaid air dòigh air CI agus cuir na h-iuchraichean gu stòr an leasaiche.

Tha e coltach gu bheil a’ phuing le Fastfile airson Android agus ainm-sgrìobhte an tagraidh fhathast gun mhìneachadh; ma tha an artaigil inntinneach, sgrìobhaidh mi leantainn. Bidh mi toilichte do cheistean no molaidhean fhaicinn “ciamar a dh’ fhuasgladh tu an duilgheadas seo ”anns na beachdan no air Telegram bashkirova.

Source: www.habr.com

Cuir beachd ann