Zochitika zam'manja za CICD: mulingo umodzi wa fastlane wamapulogalamu ambiri am'manja

Zochitika zam'manja za CICD: mulingo umodzi wa fastlane wamapulogalamu ambiri am'manja
Ndikufuna kulankhula za kuphatikiza kosalekeza ndi kutumiza kwa mapulogalamu a m'manja pogwiritsa ntchito fastlane. Momwe timagwiritsira ntchito CI / CD pamapulogalamu onse am'manja, momwe tidafikirako ndi zomwe zidachitika pamapeto pake.

Pali zinthu zokwanira kale pamaneti pa chida, chomwe tidasowa poyambira, kotero sindidzafotokoza dala chidacho mwatsatanetsatane, koma ndikungonena zomwe tinali nazo panthawiyo:

Nkhaniyi ili ndi magawo awiri:

  • ΠŸΡ€Π΅Π΄Ρ‹ΡΡ‚ΠΎΡ€ΠΈΡ появлСния мобильного CI/CD Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
  • Yankho laukadaulo potulutsa CI/CD ya N-applications

Gawo loyamba ndikulakalaka kwambiri masiku akale, ndipo lachiwiri ndizochitika zomwe mungagwiritse ntchito kwa inu nokha.

Umu ndi momwe zidachitikira m'mbiri

Chaka cha 2015

Tidangoyamba kupanga mapulogalamu am'manja, ndiye sitinkadziwa chilichonse chokhudza kuphatikizana kosalekeza, za DevOps ndi zinthu zina zamafashoni. Kusintha kulikonse kwa pulogalamuyo kudatulutsidwa ndi wopanga yekha kuchokera pamakina ake. Ndipo ngati kwa Android ndizosavuta - zosonkhanitsidwa, zosainidwa .apk ndikuyiyika ku Google Developer Console, ndiye pa iOS chida chogawa panthawiyo kudzera pa Xcode chinatisiya ndi madzulo abwino - kuyesa kutsitsa zakale nthawi zambiri kumatha ndi zolakwika ndipo tidayenera kuyesanso. Zinapezeka kuti wopanga mapulogalamu apamwamba kwambiri samalemba kangapo pamwezi, koma amamasula pulogalamuyi.

Chaka cha 2016

Tidakula, tinali ndi malingaliro oti titha kumasula opanga tsiku lonse kuti amasulidwe, ndipo pulogalamu yachiwiri idawonekeranso, yomwe idangokankhira ife kuzinthu zokha. Chaka chomwecho, tidayika Jenkins kwa nthawi yoyamba ndikulemba zolemba zowopsa, zofanana kwambiri ndi zomwe fastlane ikuwonetsa muzolemba zake.

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

К соТалСнию, ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ эти скрипты Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Π° эта нСскончаСмая ΠΏΠ°Ρ‡ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π΄ΠΎ сих ΠΏΠΎΡ€ Π·Π½Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наши Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π° ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· ломалось, Β«ΡˆΠΈΠΊΠ°Ρ€Π½Ρ‹Π΅ Π²Π΅Ρ‡Π΅Ρ€Π°Β» для Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠ² Π»ΠΎΠ³ΠΎΠ² ΠΈΠΌ ΠΆΠ΅ ΠΈ Π΄ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ.

Chaka cha 2017

Chaka chino taphunzira kuti pali chinthu monga fastlane. Panalibe zambiri monga zilipo tsopano - momwe mungayambitsire chimodzi, momwe mungagwiritsire ntchito. Ndipo chidacho chinali chidakali chopanda pake panthawiyo: zolakwa zosalekeza zimangotikhumudwitsa ndipo zinali zovuta kukhulupirira zamatsenga zomwe adalonjeza.

Komabe, zofunikira zazikulu zomwe zikuphatikizidwa pachimake cha fastlane ndi gym ΠΈ pilot, tinakwanitsa kuyiyambitsa.

Zolemba zathu zasinthidwa pang'ono.

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

Zasinthidwa, pokhapokha chifukwa sizinthu zonse zofunika xcodebuildmuyenera kusonyeza - gym adzamvetsetsa paokha kuti ndi chiyani. Ndipo pakukonza bwino, mutha kutchula makiyi omwewo monga in xcodebuild, kutchula makiyi okha ndi omveka bwino.

Nthawi ino, chifukwa cha masewera olimbitsa thupi komanso mawonekedwe a xcpretty omangidwa, zipika zomangira zakhala zomveka bwino. Izi zinayamba kupulumutsa nthawi pokonza misonkhano yosweka, ndipo nthawi zina gulu lotulutsa limatha kudzizindikira lokha.

Tsoka ilo, kuyeza liwiro la msonkhano xcodebuild ΠΈ gym Sitinachite, koma tikhulupirira zolembedwazo - mpaka 30% liwiro.

Njira imodzi yamapulogalamu onse

Chaka cha 2018 ndi pano

Pofika chaka cha 2018, ntchito yomanga ndi kutulutsa mapulogalamu inasamukira ku Jenkins, omanga anasiya kutulutsa makina awo, ndipo gulu lomasulidwa lokha ndilo linali ndi ufulu womasula.

Tinkafuna kale kukonza kukhazikitsidwa kwa mayeso ndi kusanthula kokhazikika, ndipo zolemba zathu zidakula ndikukula. Anakula ndikusintha pamodzi ndi mapulogalamu athu. Panthawiyo panali pafupifupi mapulogalamu a 10. Poganizira kuti tili ndi nsanja ziwiri, ndizo za 20 zolemba "zamoyo".

Nthawi zonse tikafuna kuwonjezera sitepe yatsopano, tinkafunika kukopera-kuyika zidutswazo muzolemba zonse za zipolopolo. Mwinamwake tikanagwira ntchito mosamala kwambiri, koma nthawi zambiri kusintha koteroko kumathera mu typos, zomwe zinasandulika madzulo kuti gulu lomasulidwa likonze zolembedwa ndikupeza kuti ndi munthu wanzeru ndani amene anawonjezera lamulo ili ndi zomwe likuchita. Mwambiri, sitinganene kuti zolemba za msonkhano papulatifomu imodzi zinali zofanana. Ngakhale iwo ndithudi anachita chinthu chomwecho.

Kuti muyambe ndondomeko ya pulogalamu yatsopano, kunali koyenera kuthera tsiku limodzi kuti musankhe "zatsopano" za malembawa, sinthani zolakwika ndi kunena kuti "inde, zimagwira ntchito."

M'chilimwe cha 2018, tinayang'ananso ku Fastlane yomwe ikukulabe.

Ntchito #1: fotokozani mwachidule masitepe onse ndikulembanso mu Fastfile

Pamene tinayamba, zolemba zathu zinkawoneka ngati nsalu yopangidwa ndi masitepe onse ndi ndodo mu chigoba chimodzi ku Jenkins. Sitinasinthebe ku mapaipi ndikugawa magawo ndi magawo.

Tidayang'ana zomwe tili nazo ndikuzindikira njira 4 zomwe zimagwirizana ndi CI / CD yathu:

  • kumanga - kukhazikitsa zodalira, kusonkhanitsa archive,
  • kuyesa - kuyesa mayunitsi opangira, kuwerengera kufalikira,
  • sonar - imayambitsa ma linters onse ndikutumiza malipoti ku SonarQube,
  • deploy - kutumiza chojambula ku alpha (TestFlight).

Ndipo ngati simufotokoza zambiri, kusiya makiyi omwe amagwiritsidwa ntchito pochitapo kanthu, mupeza Fastfile iyi:

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

M'malo mwake, Fastfile yathu yoyamba idakhala yowopsa, poganizira za ndodo zomwe timafunikirabe komanso kuchuluka kwa magawo omwe tidalowa m'malo:

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

Muchitsanzo pamwambapa, gawo limodzi lokha la magawo omwe tiyenera kufotokoza: awa ndi magawo omanga - schema, kasinthidwe, mayina a Provision Provision, komanso magawo ogawa - ID ya Apple ya akaunti yomanga, mawu achinsinsi, ID yofunsira, ndi zina zotero. pa. Monga kuyerekezera koyamba, timayika makiyi onsewa m'mafayilo apadera - Gymfile, Matchfile ΠΈ Appfile.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Jenkins ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Β«Π·Π°ΠΌΡ‹Π»ΠΈΠ²Π°ΡŽΡ‚Β» взгляд ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³Π»Π°Π·ΠΎΠΌ:

# fastlane ios <lane_name>

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

Hurray, ndife opambana

Munapeza chiyani? Malamulo omveka pa sitepe iliyonse. Zolemba zoyeretsedwa, zokonzedwa bwino m'mafayilo a fastlane. Posangalala, tinathamangira kwa omanga kuwapempha kuti awonjezere zonse zomwe amafunikira m'mabuku awo.

Koma tidazindikira m'kupita kwa nthawi kuti tidzakumana ndi zovuta zomwezo - tidzakhalabe ndi zolemba za msonkhano 20 zomwe mwanjira ina zimayamba kukhala ndi moyo wawo, zingakhale zovuta kuzikonza, popeza zolembazo zimasunthira kumalo osungirako zinthu, ndipo tinalibe mwayi wopita kumeneko. Ndipo, kawirikawiri, sikungatheke kuthetsa ululu wathu motere.

Zochitika zam'manja za CICD: mulingo umodzi wa fastlane wamapulogalamu ambiri am'manja

Ntchito #2: pezani Fastfile imodzi ya mapulogalamu a N

Tsopano zikuwoneka kuti kuthetsa vutoli sikovuta kwambiri - ikani zosinthika, ndipo tiyeni tipite. Inde, m’chenicheni, umo ndi mmene vutolo linathetsedwa. Koma panthawi yomwe tidasokoneza, tinalibe ukatswiri pa fastlane palokha, kapena Ruby, momwe fastlane amalembera, kapena zitsanzo zothandiza pa intaneti - aliyense amene adalemba za fastlane ndiye anali wocheperako ku chitsanzo cha ntchito imodzi wopanga m'modzi.

Fastlane imatha kuthana ndi zosintha zachilengedwe, ndipo tayesa kale izi pokhazikitsa mawu achinsinsi a Keychain:

ENV['KEYCHAIN_PASSWORD']

Titayang'ana zolemba zathu, tidazindikira magawo omwe timakonda:

#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

Tsopano, kuti tiyambe kugwiritsa ntchito makiyi awa mumafayilo a fastlane, tinayenera kudziwa momwe tingawaperekere kumeneko. Fastlane ili ndi yankho la izi: kutsitsa zosintha kudzera pa dotenv. Zolembazo zimati ngati kuli kofunikira kuti muyike makiyi pazifukwa zosiyanasiyana, pangani mafayilo angapo osinthika mufoda ya fastlane. .env, .env.default, .env.development.

Ndiyeno tinaganiza zogwiritsa ntchito laibulaleyi mosiyana pang'ono. Tiyeni tiyike munkhokwe ya omanga osati zolemba za fastlane ndi zambiri za meta, koma makiyi apadera a pulogalamuyi mufayilo. .env.appName.

Nokha Fastfile, Appfile, Matchfile ΠΈ Gymfile, ΠΌΡ‹ спрятали Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’ΡƒΠ΄Π° ΠΆΠ΅ спрятали Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ-паролями ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвисов β€” .env.
Mutha kuwona chitsanzo apa.

Zochitika zam'manja za CICD: mulingo umodzi wa fastlane wamapulogalamu ambiri am'manja

На CI Π²Ρ‹Π·ΠΎΠ² Π½Π΅ сильно помСнялся, добавился ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ прилоТСния:

# 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

Tisanayendetse malamulo, timayika chosungira chathu ndi zolemba. Sizikuwoneka bwino kwambiri:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Adasiya yankho ili pakadali pano, ngakhale Fastlane ili ndi yankho kutsitsa Fastfile kudzera kuchitapo import_from_git, koma imagwira ntchito pa Fastfile yokha, koma osati mafayilo ena. Ngati mukufuna "wokongola kwambiri", mukhoza kulemba nokha action.

Seti yofananira idapangidwira mapulogalamu a Android ndi ReactNative, mafayilo ali m'malo omwewo, koma m'nthambi zosiyanasiyana. iOS, android ΠΈ react_native.

Pamene gulu lomasulidwa likufuna kuwonjezera sitepe yatsopano, kusintha kwa script kumalembedwa kudzera mwa MR mu git, palibenso chifukwa chofuna kuyang'ana olakwa a malemba osweka, ndipo kawirikawiri, tsopano muyenera kuyesa kuswa.

Tsopano ndi zimenezo motsimikiza

M'mbuyomu, tidakhala ndi nthawi yosunga zolembedwa zonse, kuzisintha ndikukonza zotsatira zonse zakusintha. Zinali zokhumudwitsa kwambiri pamene zifukwa za zolakwika ndi kutsika kwa nthawi yotulutsidwa zinali zosavuta zolembera zomwe zinali zovuta kuzilemba mu jumble ya zolemba za zipolopolo. Tsopano zolakwa zoterozo zachepetsedwa kukhala zochepa. Zosintha zimaperekedwa ku mapulogalamu onse nthawi imodzi. Ndipo zimatengera mphindi 15 kuti muyike pulogalamu yatsopano munjirayo - khazikitsani payipi ya template pa CI ndikuwonjezera makiyi kunkhokwe ya wopanga.

Zikuwoneka kuti mfundoyo ndi Fastfile ya Android ndi siginecha ya pulogalamu imakhalabe yosafotokozeka; ngati nkhaniyo ili yosangalatsa, ndilemba kupitiliza. Ndikhala wokondwa kuwona mafunso kapena malingaliro anu "muthana bwanji vutoli" mu ndemanga kapena pa Telegraph bashkirova.

Source: www.habr.com

Kuwonjezera ndemanga