Traikefa amin'ny CICD finday: fenitra fastlane iray ho an'ny fampiharana finday maro

Traikefa amin'ny CICD finday: fenitra fastlane iray ho an'ny fampiharana finday maro
Te hiresaka momba ny fampidirana sy fandefasana mitohy ho an'ny fampiharana finday mampiasa fastlane aho. Ahoana ny fampiharana CI/CD amin'ny fampiharana finday rehetra, ny fomba nahatongavanay tany ary ny zava-nitranga tamin'ny farany.

Efa ampy ny fitaovana ao amin'ny tambajotra amin'ny fitaovana, izay tsy ampy taminay tany am-piandohana, noho izany dia tsy holazaiko amin'ny antsipiriany ny fitaovana, fa izay nanananay ihany no holazaiko:

Mizara roa ny lahatsoratra:

  • Ny fiavian'ny CI/CD finday ao amin'ny orinasa
  • Vahaolana ara-teknika amin'ny famoahana CI/CD ho an'ny N-applications

Ny ampahany voalohany dia nostalgia kokoa ho an'ny andro taloha, ary ny faharoa dia traikefa azonao ampiharina amin'ny tenanao.

Toy izany no nitranga ara-tantara

Taona 2015

Vao nanomboka namorona fampiharana finday izahay, ary tsy nahalala na inona na inona momba ny fampidirana mitohy, DevOps, na zavatra hafa mahafinaritra. Ny mpamorona mihitsy no namoaka ny fanavaozana fampiharana tsirairay avy amin'ny milinany manokana. Ary raha ho an'ny Android Tsotra dia tsotra izany - nangonina, nosoniavina .apk ary nampidirina tao amin'ny Google Developer Console, avy eo ho an'ny iOS ny fitaovana fizarana tamin'ny Xcode dia nandao anay tamin'ny takariva mahafinaritra - ny fiezahana misintona ny arisiva matetika dia niafara tamin'ny fahadisoana ary tsy maintsy nanandrana indray izahay. Hita fa tsy manoratra kaody imbetsaka isam-bolana ny developer mandroso indrindra, fa mamoaka ny fampiharana.

Taona 2016

Nihalehibe izahay, efa nanana eritreritra momba ny fomba hanafahana ireo mpamorona mandritra ny andro iray manontolo amin'ny famoahana azy, ary nisy fampiharana faharoa niseho ihany koa, izay nanosika anay bebe kokoa mankany amin'ny automation. Tamin'io taona io ihany, nametraka an'i Jenkins voalohany izahay ary nanoratra andian-tsoratra mampatahotra, tena mitovy amin'ireo asehon'ny fastlane ao amin'ny antontan-taratasiny.

$ 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 "appleId@example.com" 
-p "PASS_APPLE_ID"

Indrisy anefa fa hatramin'izao dia ny mpamorona anay ihany no nahalala ny fomba fiasan'ireo script ireo sy ny antony ilana an'ity antontam-panalahidy tsy misy fiafarana ity, ary rehefa nisy zavatra simba indray dia nahazo ny “hariva mahafinaritra” izy ireo handinihana ny diary.

Taona 2017

Tamin'ity taona ity dia nianatra izahay fa misy ny zavatra toy ny fastlane. Tsy nisy fampahalalana betsaka toy ny ankehitriny - ny fomba hanombohana iray, ny fomba fampiasana azy. Ary ny fitaovana mihitsy tamin'izany fotoana izany: ny fahadisoana tsy tapaka ihany no nandiso fanantenana anay ary sarotra ny nino ny automatique mahagaga izay nampanantenain'izy ireo.

Na izany aza, ny fitaovana lehibe tafiditra ao amin'ny core fastlane dia gym и pilot, nahavita nanomboka izany izahay.

Nohatsaraina kely ny scripty.

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

Nohatsaraina izy ireo, raha tsy satria tsy ny masontsivana rehetra ilaina xcodebuild, mila manondro ianao - gym hahatakatra tsy miankina hoe aiza sy inona. Ary ho an'ny fanitsiana tsara kokoa dia azonao atao ny mamaritra ny fanalahidy mitovy amin'ny ao xcodebuild, ny anaran'ny lakile ihany no mazava kokoa.

Tamin'ity indray mitoraka ity, noho ny gym sy ny formatter xcpretty naorina, dia nanjary azo vakiana kokoa ny diarin'ny fananganana. Nanomboka nitsitsy fotoana tamin’ny fanamboarana ireo fivoriambe simba izany, ary indraindray ny ekipan’ny mpanafaka dia afaka naka izany samirery.

Indrisy, fandrefesana ny hafainganam-pandehan'ny fivoriambe xcodebuild и gym Tsy nanao izany izahay, fa hatoky ny antontan-taratasy izahay - haingana hatramin'ny 30%.

Dingana tokana ho an'ny fampiharana rehetra

Taona 2018 sy ankehitriny

Tamin'ny taona 2018, nifindra tanteraka tany Jenkins ny dingan'ny fananganana sy ny famoahana ireo rindranasa, najanon'ny mpamorona ny famotsorana ny milinany, ary ny ekipan'ny famoahana ihany no manana zo hamoaka.

Efa te hanatsara ny fandefasana fitsapana sy famakafakana static izahay, ary nitombo sy nitombo ny scripty. Nitombo sy niova niaraka tamin'ny fampiharanay. Tamin'izany fotoana izany dia teo amin'ny 10 ny fampiharana raha jerena fa manana sehatra roa izahay, dia eo amin'ny 20 eo ho eo ny script "velona".

Isaky ny te-hanampy dingana vaovao amin'ny script izahay dia tsy maintsy mandika-mametaka ireo tapa-taratasy amin'ny sora-baventy rehetra. Angamba mety ho niasa tamim-pitandremana kokoa izahay, fa matetika ny fiovana toy izany dia niafara tamin'ny typos, izay nivadika ho takariva ho an'ny ekipa famotsorana mba hanamboatra script ary hahitana hoe iza ilay lehilahy marani-tsaina nanampy ity baiko ity sy ny tena ataony. Amin'ny ankapobeny, tsy azo lazaina fa mitovy farafaharatsiny ny soratra momba ny fivoriambe ho an'ny lampihazo iray. Na dia azo antoka aza fa nanao toy izany koa izy ireo.

Mba hanombohana dingana ho an'ny rindranasa vaovao dia ilaina ny nandany andro iray hisafidianana dikan-teny "vaovao" amin'ireo script ireo, debug izany ary miteny hoe "eny, miasa izany."

Tamin'ny fahavaratry ny taona 2018, dia nitodika tany amin'ny lalam-be izay mbola mivoatra isika.

Asa #1: mamintina ny dingana rehetra amin'ny script ary soraty ao amin'ny Fastfile

Rehefa nanomboka izahay, dia toy ny lamban-tongotra misy ny tohatra sy tehina rehetra ao anaty script akorandriaka iray ao Jenkins ny sora-tananay. Tsy mbola nivadika ho fantsona sy fizarana isaky ny dingana isika.

Nijery izay anananay izahay ary nahita dingana 4 mifanaraka amin'ny famaritana ny CI/CD anay:

  • manangana - mametraka ny fiankinan-doha, manangona ny arisiva,
  • fitsapana - manao fitiliana unit developer, kajy ny fandrakofana,
  • sonar - mandefa ny linters rehetra ary mandefa tatitra any amin'ny SonarQube,
  • deploy — fandefasana artifact amin'ny alpha (TestFlight).

Ary raha tsy miditra amin'ny antsipiriany ianao, manala ny fanalahidy ampiasaina amin'ny hetsika, dia hahazo ity Fastfile ity ianao:

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

Raha ny marina, ny Fastfile voalohany anay dia nivadika ho goavambe, raha jerena ny sasany amin'ireo tehina izay mbola ilainay sy ny isan'ny masontsivana nosoloinay:

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: "appleId@example.com",
  app_identifier: "com.example.app",
  dev_portal_team_id: "TEAM_ID_NUMBER_DEV",
  team_id: "ITS_TEAM_ID")
end

Ao amin'ny ohatra etsy ambony, ny ampahany ihany amin'ny masontsivana tokony hofaritana: ireto ny masontsivana fananganana - schema, configuration, anaran'ny Provision Profile, ary koa ny mari-pamantarana fizarana - ID Apple amin'ny kaonty developer, tenimiafina, ID fampiharana, sns. on. Amin'ny fanombanana voalohany, apetrakay ao anaty rakitra manokana ireo fanalahidy rehetra ireo - Gymfile, Matchfile и Appfile.

Ao amin'ny Jenkins izao dia azonao atao ny miantso baiko fohy izay tsy manjavozavo ny fijery ary mora vakiana amin'ny maso:

# fastlane ios <lane_name>

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

Hira, tsara izahay

Inona no azonao? Fadio ny baiko isaky ny dingana. Nodiovina ny script, nalamina tsara tao anaty rakitra fastlane. Faly izahay, nihazakazaka nankany amin'ny mpamorona nangataka azy ireo mba hampiditra ny zavatra rehetra ilainy ao amin'ny trano fitehirizan-dry zareo.

Saingy tsapanay tamin'ny fotoana fa ho tojo fahasahiranana mitovy amin'izany izahay - mbola hanana script fivoriambe 20 izahay izay mety hanomboka hiaina ny fiainany manokana, ho sarotra kokoa ny hanova azy ireo, satria ny script dia hifindra any amin'ny repository, ary tsy afaka niditra tao izahay. Ary, amin'ny ankapobeny, tsy ho azo atao ny mamaha ny fanaintainantsika amin'izany fomba izany.

Traikefa amin'ny CICD finday: fenitra fastlane iray ho an'ny fampiharana finday maro

Asa #2: mahazo Fastfile tokana ho an'ny rindranasa N

Amin'izao fotoana izao dia toa tsy sarotra loatra ny famahana ny olana - mametraka ny fari-piadidiana, ary andao. Eny, raha ny marina, izany no fomba namaha ny olana. Saingy amin'izao fotoana izao rehefa nopotehinay izany, dia tsy nanana fahaiza-manao momba ny fastlane mihitsy izahay, na tao amin'ny Ruby, izay nanoratana ny fastlane, na ohatra mahasoa amin'ny tambajotra - izay rehetra nanoratra momba ny fastlane dia voafetra ho ohatra iray ho an'ny fampiharana iray developer iray.

Ny Fastlane dia afaka mitantana ny fari-piainan'ny tontolo iainana, ary efa nanandrana izany izahay tamin'ny fametrahana ny tenimiafina Keychain:

ENV['KEYCHAIN_PASSWORD']

Rehefa avy nijery ny scripty izahay dia fantatray ny ampahany mahazatra:

#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
APPLE_ID=appleID@example.com
TEAM_ID=ABCD1234
FASTLANE_ITC_TEAM_ID=123456789

Ankehitriny, mba hanombohana mampiasa ireo fanalahidy ireo amin'ny rakitra fastlane, dia tsy maintsy nieritreritra ny fomba hanaterana azy ireo any izahay. Fastlane dia manana vahaolana amin'izany: Loading variables amin'ny dotenv. Ny antontan-taratasy dia milaza fa raha zava-dehibe aminao ny mametaka ny fanalahidy ho an'ny tanjona samihafa, dia mamorona rakitra maromaro maromaro ao amin'ny lahatahiry fastlane. .env, .env.default, .env.development.

Ary avy eo dia nanapa-kevitra ny hampiasa ity tranomboky ity amin'ny fomba hafa kely izahay. Aleo apetraka ao amin'ny fitehirizan'ny mpamorona fa tsy ny script fastlane sy ny mombamomba azy, fa ny fanalahidy tokana amin'ity fampiharana ity ao anaty rakitra .env.appName.

ny tenany Fastfile, Appfile, Matchfile и Gymfile, nafeninay tao anaty tahiry mitokana. Nisy rakitra fanampiny misy fanalahidin'ny tenimiafina avy amin'ny serivisy hafa nafenina tao - .env.
Afaka mahita ohatra ianao eto.

Traikefa amin'ny CICD finday: fenitra fastlane iray ho an'ny fampiharana finday maro

Ao amin'ny CI, tsy niova firy ny antso;

# 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

Alohan'ny handefasana ny baiko dia apetrakay miaraka amin'ny script ny tahiry. Tsy dia mahafinaritra loatra:

git clone git@repository.com/FastlaneCICD.git fastlane_temp

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

Nandao ity vahaolana ity amin'izao fotoana izao, na dia manana vahaolana amin'ny fampidinana Fastfile amin'ny alàlan'ny Fastlane aza ny Fastlane hetsika import_from_git, fa ho an'ny Fastfile ihany izy io, fa tsy ho an'ny rakitra hafa. Raha te "tena tsara tarehy" ianao dia afaka manoratra ny anao manokana action.

Nisy andiany mitovy amin'izany natao ho an'ny Android applications sy ReactNative, ireo rakitra dia ao amin'ny tahiry iray ihany, fa amin'ny sampana samihafa iOS, android и react_native.

Rehefa te-hanampy dingana vaovao ny ekipan'ny famotsorana, dia voarakitra amin'ny alàlan'ny MR ao amin'ny git ny fanovana ao amin'ny script, tsy ilaina intsony ny mitady ireo meloka amin'ny script tapaka, ary amin'ny ankapobeny dia tsy maintsy miezaka manapaka izany ianao.

Izao no azo antoka

Teo aloha, nandany fotoana nitazonana ny script rehetra izahay, nanavao azy ireo ary nanamboatra ny vokatry ny fanavaozana rehetra. Tena nandiso fanantenana raha ny anton'ny lesoka sy ny fotoana fitsaharana amin'ny famoahana dia typo tsotra izay sarotra ny manara-maso ao anatin'ny fitambaran'ny script shell. Ankehitriny dia ahena ho faran'izay kely ny fahadisoana toy izany. Ny fanovana dia alefa amin'ny fampiharana rehetra indray mandeha. Ary mila 15 minitra ny fametrahana fampiharana vaovao ao anatin'ilay dingana - manangana fantsona modely amin'ny CI ary ampio ny fanalahidin'ny tahiry mpamorona.

Toa mbola tsy voazava ny antony mahatonga ny Fastfile Android ary ny sonian'ireo fangatahana. Raha mahaliana ny lahatsoratra dia hanoratra tohiny aho. Tiako ho re ny fanontanianao na ny soso-kevitrao momba ny fomba hamahanao ity olana ity ao amin'ny fanehoan-kevitra na ao amin'ny Telegram. bashkirova.

Source: www.habr.com

Mividiana fampiantranoana azo antoka ho an'ny tranokala misy fiarovana DDoS, mpizara VPS VDS 🔥 Mividiana fampiantranoana tranonkala azo antoka miaraka amin'ny fiarovana DDoS, mpizara VPS VDS | ProHoster