Taithí CICD soghluaiste: caighdeán fastlane amháin do go leor feidhmchlár soghluaiste

Taithí CICD soghluaiste: caighdeán fastlane amháin do go leor feidhmchlár soghluaiste
Ba mhaith liom labhairt faoi chomhtháthú agus seachadadh leanúnach le haghaidh apps soghluaiste ag baint úsáide as fastlane. An chaoi a gcuirimid CI/CD i bhfeidhm ar gach feidhmchlár soghluaiste, conas a tháinig muid ann agus cad a tharla sa deireadh.

Tá go leor ábhar ar an líonra ar an uirlis cheana féin, rud a bhí chomh easnamhach sin orainn ag an tús, mar sin ní dhéanfaidh mé cur síos mion ar an uirlis d’aon ghnó, ach ní dhéanfaidh mé ach tagairt don méid a bhí againn an uair sin:

Tá dhá chuid san alt:

  • Cúlra ar theacht chun cinn CI/CD soghluaiste sa chuideachta
  • Réiteach teicniúil chun CI/CD a fheidhmiú le haghaidh N-iarratais

Tá an chéad chuid níos mó cumha do na sean-laethanta, agus an dara cuid taithí gur féidir leat a chur i bhfeidhm chun tú féin.

Seo mar a tharla sé go stairiúil

Bliain 2015

Thosaigh muid ag forbairt feidhmchláir shoghluaiste, agus ansin ní raibh a fhios againn aon rud faoi chomhtháthú leanúnach, faoi DevOps agus rudaí faiseanta eile. Rinne an forbróir é féin gach nuashonrú iarratais a rolladh amach óna mheaisín. Agus más rud é le haghaidh Android tá sé simplí go leor - le chéile, sínithe .apk agus d'uaslódáil sé chuig an Google Developer Console é, ansin le haghaidh iOS d'fhág an uirlis dáileacháin ag an am sin trí Xcode oícheanta iontacha dúinn - is minic a chríochnaigh iarrachtaí an chartlann a íoslódáil le hearráidí agus bhí orainn triail eile a bhaint as. Iompaigh sé amach nach bhfuil an forbróir is úire scríobh cód arís agus arís eile in aghaidh na míosa, ach ina ionad sin a eisiúint an t-iarratas.

Bliain 2016

D'fhás muid suas, bhí smaointe againn cheana féin faoi conas forbróirí a shaoradh ó lá iomlán le haghaidh scaoileadh, agus bhí an dara feidhmchlár le feiceáil freisin, rud a bhrúigh níos mó i dtreo uathoibrithe sinn. An bhliain chéanna sin, chuireamar Jenkins isteach don chéad uair agus scríobhamar dornán scripteanna scanrúla, an-chosúil leo siúd a léiríonn fastlane ina dhoiciméadú.

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

Ar an drochuair, go dtí seo ní raibh a fhios ag ár bhforbróirí ach conas a oibríonn na scripteanna seo agus cén fáth a bhfuil gá leis an gcruach eochracha gan teorainn seo, agus nuair a bhris rud éigin arís, fuair siad na “tráthnóna iontacha” chun logaí a anailísiú.

Bliain 2017

I mbliana d’fhoghlaimíomar go bhfuil a leithéid de rud ann agus fastlane. Ní raibh an oiread eolais ann agus atá anois - conas ceann a thosú, conas é a úsáid. Agus bhí an uirlis féin fós amh ag an am sin: ní raibh ach earráidí leanúnacha ag déanamh díomá orainn agus ba dheacair a chreidiúint san uathoibriú draíochtúil a gheall siad.

Mar sin féin, is iad na príomhfhóntais atá san áireamh i gcroílár fastlane gym и pilot, d'éirigh linn é a thosú.

Tá feabhas beag tagtha ar ár gcuid scripteanna.

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

Tá siad feabhsaithe, más rud é amháin toisc nach bhfuil na paraiméadair go léir is gá chun xcodebuild, ní mór duit a chur in iúl - gym tuigfidh siad go neamhspleách cá háit agus cad atá ann. Agus le haghaidh mionchoigeartaithe, is féidir leat na heochracha céanna a shonrú agus atá i xcodebuild, níl ach ainmniú na n-eochracha níos soiléire.

An uair seo, a bhuíochas leis an giomnáisiam agus an formáidí xcpretty ionsuite, tá na logaí tógála i bhfad níos inléite. Chuir sé seo tús le ham a shábháil maidir le tionóil briste a shocrú, agus uaireanta d'fhéadfadh an fhoireann scaoileadh amach é a dhéanamh leo féin.

Ar an drochuair, tomhais luas cóimeála xcodebuild и gym Ní dhearnamar é, ach beidh muinín againn as an gcáipéisíocht - luas suas le 30%.

Próiseas aonair do gach iarratas

Bliain 2018 agus i láthair

Faoi 2018, bhí an próiseas maidir le hiarratais a thógáil agus a rolladh amach tar éis bogadh go hiomlán go Jenkins, stop na forbróirí ag scaoileadh óna meaisíní, agus ní raibh an ceart ag an bhfoireann scaoileadh ach amháin.

Theastaigh uainn cheana féin seoladh tástálacha agus anailís statach a fheabhsú, agus d'fhás agus d'fhás ár gcuid scripteanna. D'fhás agus d'athraigh mar aon lenár bhfeidhmchláir. Ag an am sin, bhí thart ar 10 n-iarratas. Ós rud é go bhfuil dhá ardán againn, is é sin thart ar 20 script “beo”.

Gach uair a theastaigh uainn céim nua a chur leis an script, bhí orainn na píosaí a chóipeáil agus a ghreamú isteach sna scripteanna sliogáin ar fad. B’fhéidir gur féidir linn oibriú níos cúramaí, ach is minic a tháinig deireadh le hathruithe den sórt sin le clóscríobh, rud a d’iompaigh ina thráthnóna don fhoireann scaoileadh scripteanna a shocrú agus a fháil amach cén fear cliste a chuir an t-ordú seo leis agus cad a dhéanann sé i ndáiríre. Go ginearálta, ní féidir a rá go raibh na scripteanna le haghaidh tionóil ardán amháin beagán cosúil ar a laghad. Cé gur cinnte go ndearna siad an rud céanna.

Chun tús a chur le próiseas d’fheidhmchlár nua, b’éigean lá a chaitheamh chun leagan “úr” de na scripteanna seo a roghnú, é a dhífhabhtú agus a rá “tá, oibríonn sé.”

I samhradh na bliana 2018, d'fhéachamar arís i dtreo an fastlane atá fós ag forbairt.

Tasc #1: déan achoimre ar na céimeanna scripte go léir agus athscríobh iad i Fastfile

Nuair a thosaigh muid, d'fhéach ár scripteanna cosúil le footcloth comhdhéanta de na céimeanna agus crutches go léir i script bhlaosc amháin i Jenkins. Níor aistrigh muid go dtí píblíne agus roinnt de réir céime fós.

D’fhéachamar ar a bhfuil againn agus shainaithnímid 4 chéim a d’oirfeadh don chur síos ar ár CI/CD:

  • tógáil - spleáchais a shuiteáil, an chartlann a chur le chéile,
  • tástáil — tástálacha aonaid forbróra a rith, clúdach a ríomh,
  • sonar - seolann sé gach líne agus seolann tuairiscí chuig SonarQube,
  • imscaradh — déantán a sheoladh chuig alfa (TestFlight).

Agus mura dtéann tú isteach i sonraí, gan na heochracha a úsáidtear i ngníomhartha a fhágáil ar lár, gheobhaidh tú an 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

Déanta na fírinne, bhí ár gcéad Fastfile ionraic, ag cur san áireamh cuid de na maidí a bhí ag teastáil uainn go fóill agus líon na bparaiméadar a chuireamar ina n-ionad:

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

Sa sampla thuas, níl ach cuid de na paraiméadair nach mór dúinn a shonrú: is iad seo na paraiméadair tógála - scéimre, cumraíocht, ainmneacha Próifíl Soláthair, chomh maith le paraiméadair dáileacháin - ID Apple de chuntas an fhorbróra, pasfhocal, ID iarratais, agus mar sin de ar. Mar chéad mheastachán, chuireamar na heochracha seo go léir i gcomhaid speisialta - Gymfile, Matchfile и Appfile.

Anois in Jenkins is féidir leat orduithe gearra a ghlaoch nach ngeileann an radharc agus atá inléite go héasca ag an tsúil:

# fastlane ios <lane_name>

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

Hurray, tá muid ar fheabhas

Cad a fuair tú? Orduithe soiléir do gach céim. Scripteanna glanta, socraithe go néata i gcomhaid luaslána. Le lúcháir, ritheamar chuig na forbróirí ag iarraidh orthu gach rud a bhí de dhíth orthu a chur lena stórtha.

Ach thuig muid le himeacht aimsire go mbeadh na deacrachtaí céanna le sárú againn – bheadh ​​20 script tionóil fós againn a thosódh bealach amháin nó bealach eile ar a saol féin a chaitheamh, bheadh ​​sé níos deacra iad a chur in eagar, ós rud é go n-aistreofaí na scripteanna go stórtha, .i. agus ní raibh rochtain againn ann. Agus, go ginearálta, ní bheidh sé indéanta ár bpian a réiteach ar an mbealach seo.

Taithí CICD soghluaiste: caighdeán fastlane amháin do go leor feidhmchlár soghluaiste

Tasc #2: faigh Fastfile amháin le haghaidh N fheidhmchlár

Anois is cosúil nach bhfuil an fhadhb a réiteach chomh deacair - socraigh na hathróga, agus déanaimis dul. Sea, i ndáiríre, sin mar a réitíodh an fhadhb. Ach i láthair na huaire nuair a bhí sé á sciúradh againn, ní raibh saineolas againn ar fastlane féin, ná ar Ruby, ina bhfuil fastlane scríofa, ná samplaí úsáideacha ar an líonra - bhí gach duine a scríobh faoi fastlane teoranta do shampla d'iarratas amháin. d'fhorbróir amháin.

Is féidir le Fastlane athróga timpeallachta a láimhseáil, agus tá iarracht déanta againn cheana féin trí phasfhocal Keychain a shocrú:

ENV['KEYCHAIN_PASSWORD']

Tar éis dúinn breathnú ar ár gcuid scripteanna, d’aithníomar na codanna coitianta:

#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

Anois, chun tús a chur leis na heochracha seo a úsáid i gcomhaid fastlane, bhí orainn a dhéanamh amach conas iad a sheachadadh ansin. Tá réiteach ag Fastlane air seo: Athróga luchtú trí dotenv. Deir an doiciméadú má tá sé tábhachtach duit eochracha a luchtú chun críocha éagsúla, cruthaigh roinnt comhad cumraíochta san eolaire fastlane .env, .env.default, .env.development.

Agus ansin shocraigh muid an leabharlann seo a úsáid beagán difriúil. Cuirimis i stór na bhforbróirí nach scripteanna fastlane agus a meitefhaisnéis, ach eochracha uathúla an fheidhmchláir seo sa chomhad .env.appName.

Iad féin Fastfile, Appfile, Matchfile и Gymfile, chuireamar i bhfolach é i stór ar leith. Cuireadh comhad breise le heochracha pasfhocail ó sheirbhísí eile i bhfolach ann - .env.
Is féidir leat sampla a fheiceáil anseo.

Taithí CICD soghluaiste: caighdeán fastlane amháin do go leor feidhmchlár soghluaiste

Ar CI, níl mórán athraithe tagtha ar an nglao; cuireadh eochair chumraíochta le haghaidh feidhmchlár ar leith leis:

# 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

Sula rithimid na horduithe, lódálann muid ár stór le scripteanna. Níl cuma chomh deas air:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

D'fhág an réiteach seo le haghaidh anois, cé go bhfuil réiteach ag Fastlane chun Fastfile a íoslódáil trí gníomh import_from_git, ach ní oibríonn sé ach le haghaidh Fastfile, ach ní le haghaidh comhaid eile. Más mian leat “an-álainn”, is féidir leat do chuid féin a scríobh action.

Rinneadh sraith den chineál céanna le haghaidh feidhmchláir Android agus ReactNative, tá na comhaid sa stór céanna, ach i mbrainsí éagsúla iOS, android и react_native.

Nuair is mian leis an bhfoireann scaoileadh céim nua a chur leis, déantar athruithe sa script a thaifeadadh trí MR in git, ní gá a thuilleadh culprits na scripteanna briste a lorg, agus go ginearálta, caithfidh tú iarracht a dhéanamh é a bhriseadh anois.

Anois sin é do cinnte

Roimhe seo, chaitheamar am ag cothabháil na scripteanna go léir, ag nuashonrú iad agus ag socrú iarmhairtí nuashonruithe. Ba mhór an díomá é nuair a bhí na fáthanna le hearráidí agus le ham neamhfhónaimh in eisiúintí ina chlóscríobhanna simplí a bhí chomh deacair súil a choinneáil orthu sa sceallóg scripteanna. Anois laghdaítear earráidí den sórt sin go dtí an t-íosmhéid. Cuirtear athruithe i bhfeidhm go céimneach ar gach feidhmchlár ag an am céanna. Agus tógann sé 15 nóiméad iarratas nua a chur isteach sa phróiseas - socraigh píblíne teimpléid ar CI agus cuir na heochracha le stór an fhorbróra.

Dealraíonn sé go bhfuil an pointe le Fastfile do Android agus síniú iarratais fós gan mhíniú; má tá an t-alt suimiúil, scríobhfaidh mé leanúint ar aghaidh. Beidh áthas orm do chuid ceisteanna nó moltaí a fheiceáil “conas a réiteofá an fhadhb seo” sna tuairimí nó ar Telegram bashkirova.

Foinse: will.com

Add a comment