Te wheako CICD pūkoro: kotahi te paerewa tereina mo te maha o nga tono pūkoro

Te wheako CICD pūkoro: kotahi te paerewa tereina mo te maha o nga tono pūkoro
Kei te pirangi au ki te korero mo te whakauru tonu me te tuku mo nga taupānga waea ma te whakamahi tere tere. Me pehea te whakatinana i te CI/CD ki runga i nga tono pūkoro katoa, me pehea i tae atu ai ki reira me te aha i puta i te mutunga.

He nui nga rauemi kei runga i te whatunga i runga i te taputapu, he iti nei i a maatau i te timatanga, no reira ka kore ahau e whakaahua taipitopito i te taputapu, engari ka korero noa ki nga mea i a maatau:

E rua nga wahanga o te tuhinga:

  • He papamuri mo te putanga o te CI/CD pūkoro i roto i te kamupene
  • He otinga hangarau mo te huri i te CI/CD mo nga tono-N

Ko te waahanga tuatahi he nui ake te nostalgia mo nga ra o mua, ko te tuarua he wheako ka taea e koe te tono ki a koe.

Koinei te ahuatanga o nga korero o mua

Tau 2015

I timata matou ki te whakawhanake i nga tono pūkoro, katahi kare matou i mohio mo te whakauru tonu, mo DevOps me etahi atu mea huatau. Ko ia whakahou tono i tukuna e te kaiwhakawhanake mai i tana miihini. A ki te mea mo te Android he tino ngawari - kua huihuia, kua hainatia .apk ka tukuna atu ki te Google Developer Console, na mo iOS ko te taputapu tohatoha ma te Xcode i mahue mai i a matou i nga ahiahi pai - ko nga ngana ki te tango i te purongo ka mutu nga hapa me te whakamatau ano. I puta mai ko te kaiwhakawhanake tino matatau kaore i te tuhi waehere i nga wa maha i te marama, engari ka tukuna te tono.

Tau 2016

I tipu ake matou, kua whai whakaaro matou me pehea te tuku i nga kaiwhakawhanake mai i te ra katoa mo te tukunga, ka puta mai ano he tono tuarua, na reira i kaha ake ai taatau ki te mahi automation. I taua tau ano, i whakauruhia e matou a Jenkins mo te wa tuatahi ka tuhia e matou nga momo tuhinga whakamataku, he rite tonu ki era e whakaatuhia ana e te tere tere i roto i ana tuhinga.

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

Heoi ano, tae noa mai ki naianei ko o maatau kaiwhakawhanake anake te mohio ki te mahi o enei tuhinga me te aha e hiahiatia ai tenei puranga mutunga kore o nga ki, a ka pakaru ano tetahi mea, ka whiwhi ratou i nga "poi ataahua" mo te tarai i nga raarangi.

Tau 2017

I tenei tau i ako matou he mea penei te tererangi. He iti noa nga korero penei i naianei - me pehea te tiimata, me pehea te whakamahi. A ko te taputapu ano he kino tonu i tera wa: ko nga hapa tonu i whakama noa i a maatau, he uaua ki te whakapono ki te miihini makutu i oatihia e ratou.

Heoi, ko nga taputapu matua kei roto i te matua tere tere gym и pilot, i taea e matou te timata.

Kua pai ake a maatau tuhinga.

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

Kua pai ake, mena na te mea kaore nga tawhā katoa e tika ana mo xcodebuild, me tohu koe - gym ka mohio takitahi kei hea, he aha te takoto. A, mo te whakatikatika pai ake, ka taea e koe te tohu i nga taviri rite ki roto xcodebuild, ko te whakaingoatanga o nga taviri he maamaa ake.

I tenei wa, he mihi ki te whare takaro me te whakatakotoranga xcpretty i hangaia, kua tino marama ake nga raarangi hanga. I timata tenei ki te whakaora i te wa ki te whakatika i nga huihuinga pakaru, a i etahi wa ka taea e te roopu tuku te whakatau i a raatau ano.

Kia aroha mai, inenga tere hui xcodebuild и gym Kaore matou i mahi, engari ka whakawhirinaki matou ki nga tuhinga - tae atu ki te 30% te tere.

He tukanga kotahi mo nga tono katoa

Tau 2018 me tenei wa

I te tau 2018, kua neke katoa te tukanga o te hanga me te huri i nga tono ki Jenkins, ka mutu nga kaiwhakawhanake i te tuku mai i a raatau miihini, a ko te roopu tuku anake te mana ki te tuku.

Kua pirangi matou ki te whakapai ake i te whakarewatanga o nga whakamatautau me te tātaritanga pateko, a ka tipu haere a maatau tuhinga. I tipu me te whakarereke me o maatau tono. I tera wa e 10 pea nga tono I runga i te whakaaro kei a matou e rua nga papaahi, e 20 nga tuhinga "ora".

I nga wa katoa e hiahia ana matou ki te taapiri i tetahi taahiraa hou ki te tuhinga, me kape-whakapiri nga pihi ki nga tuhinga anga katoa. Akene pea i kaha ake taatau ki te mahi, engari i te nuinga o nga wa ka mutu enei huringa ki te hapa, ka huri hei ahiahi mo te roopu tuku ki te whakatika i nga tuhinga me te mohio ko wai te tangata mohio i tapiri atu i tenei whakahau me te aha. I te nuinga o te waa, kaore e taea te kii he ahua rite nga tuhinga mo te huihuinga mo te papa kotahi. Ahakoa he rite tonu ta ratou mahi.

Hei timata i tetahi tukanga mo te tono hou, me whakapau he ra ki te kowhiri i tetahi putanga "hou" o enei tuhinga, patuiro me te kii "ae, kei te mahi."

I te raumati o te tau 2018, i titiro ano matou ki te huarahi tere tere.

Tūmahi #1: whakarāpopotohia ngā kaupae hōtuhi katoa ka tuhi anō ki te Fastfile

I te wa i timata ai matou, he rite te ahua o a matou tuhinga ki te kakahu waewae kei roto katoa nga hikoi me nga tootoo i roto i te tuhinga anga kotahi i Jenkins. Kaore ano matou kia huri ki te paipa me te wehewehe ma te atamira.

I titiro matou ki nga mea kei a matou me te tautuhi i nga waahanga e 4 e pai ana ki te whakaahuatanga o to maatau CI/CD:

  • hanga - te whakauru i nga whakawhirinaki, te whakahiato i te puranga,
  • te whakamatautau - te whakahaere i nga whakamatautau waeine kaiwhakawhanake, te tatau i te kapinga,
  • sonar - ka whakarewahia nga rarangi katoa me te tuku purongo ki SonarQube,
  • tohatoha — te tuku taonga ki te alpha (TestFlight).

A, ki te kore koe e uru ki nga korero, me te whakakore i nga taviri e whakamahia ana i roto i nga mahi, ka whiwhi koe i tenei Fastfile:

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

Inaa, ko ta maatau Fastfile tuatahi he tino whakamataku, me te whakaaro ki etahi o nga tootoo e hiahiatia ana e matou me te maha o nga tawhā i whakakapihia e matou:

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

I roto i te tauira i runga ake nei, he waahanga noa iho o nga tawhā e hiahia ana matou ki te tohu: koinei nga tawhā hanga - te kaupapa, te whirihoranga, nga ingoa Provision Profile, me nga tawhā tohatoha - Apple ID o te putea kaiwhakawhanake, kupuhipa, ID tono, me era atu i runga. Hei tata tuatahi, ka hoatu e matou enei ki katoa ki roto i nga konae motuhake - Gymfile, Matchfile и Appfile.

Inaianei kei Jenkins ka taea e koe te karanga i nga whakahau poto e kore e whakapouri i te tirohanga ka ngawari te panui e te kanohi:

# fastlane ios <lane_name>

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

Hurray, he rawe matou

He aha i whiwhi koe? Ūkui whakahau mō ia kaupae. Kua horoia nga tuhinga, kua whakaritea i roto i nga konae tere. I te harikoa, ka oma matou ki nga kaiwhakawhanake me te tono kia taapirihia nga mea katoa e hiahiatia ana ki o raatau putunga.

Engari i te wa ka mohio matou ka raru ano matou - ka 20 tonu nga tuhinga huihuinga ka timata ki te ora i o raatau ake oranga, he uaua ake te whakatika, na te mea ka neke nga tuhinga ki nga whare pupuri. a kaore matou i whai waahi ki reira. A, i te nuinga o te waa, kaore e taea te whakaoti i o tatou mamae i tenei huarahi.

Te wheako CICD pūkoro: kotahi te paerewa tereina mo te maha o nga tono pūkoro

Tūmahi #2: tikina he Fastfile kotahi mo nga tono N

Inaianei te ahua nei ehara i te mea uaua te whakaoti rapanga - whakaritea nga taurangi, ka haere. Ae, i roto i te meka, koinei te huarahi i whakatauhia ai te raruraru. Engari i te wa i takahia ai e matou, kaore o matou tohungatanga mo te tere tere ake, me Ruby ranei, i tuhia ai te tere tere, me nga tauira whaihua i runga i te whatunga - ko nga tangata katoa i tuhi mo te fastlane he iti noa ki tetahi tauira mo te tono kotahi mo kotahi kaiwhakawhanake.

Ka taea e Fastlane te whakahaere i nga taurangi taiao, a kua whakamatauria e matou tenei ma te tautuhi i te kupuhipa Keychain:

ENV['KEYCHAIN_PASSWORD']

I muri i te titiro ki o maatau tuhinga, i kitea e matou nga waahanga noa:

#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

Inaianei, hei timata ki te whakamahi i enei taviri i roto i nga konae tererangi, me ata whakaaro me pehea te tuku atu ki reira. He otinga a Fastlane mo tenei: te uta i nga taurangi ma te dotenv. E kii ana te tuhinga mena he mea nui ki a koe te uta i nga taviri mo nga kaupapa rereke, hanga etahi konae whirihoranga ki te raarangi tereina. .env, .env.default, .env.development.

Na ka whakatau matou ki te whakamahi i tenei whare pukapuka he paku rereke. Me tuu ki roto i te putunga o nga kaiwhakawhanake kaua ko nga tuhinga tere tere me ona korero meta, engari ko nga taviri ahurei o tenei tono kei roto i te konae. .env.appName.

Ko ratou Fastfile, Appfile, Matchfile и Gymfile, i hunahia e matou ki roto i tetahi putunga motuhake. He konae taapiri me nga taviri kupuhipa mai i etahi atu ratonga i huna ki reira - .env.
Ka kite koe i tetahi tauira konei.

Te wheako CICD pūkoro: kotahi te paerewa tereina mo te maha o nga tono pūkoro

I runga i te CI, kaore i nui te rereke o te piiraa he taviri whirihoranga mo tetahi tono motuhake:

# 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

I mua i te whakahaere i nga whakahau, ka utaina e matou ta matou putunga me nga tuhinga. Kaore i te tino ataahua:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Waiho tenei otinga mo naianei, ahakoa he otinga a Fastlane mo te tango i a Fastfile ma te mahi import_from_git, engari ka mahi anake mo Fastfile, engari kaua mo etahi atu konae. Mena kei te hiahia koe ki te "tino ataahua", ka taea e koe te tuhi i a koe ake action.

I hangaia he huinga rite mo nga tono Android me te ReactNative, kei roto nga konae i te putunga kotahi, engari kei nga peka rereke. iOS, android и react_native.

I te wa e hiahia ana te roopu tuku ki te taapiri i etahi waahanga hou, ka tuhia nga huringa o te tuhinga ma te MR i roto i te git, kua kore he hiahia ki te rapu i nga kaipahua o nga tuhinga pakaru, me te nuinga, inaianei me ngana koe ki te wawahi.

Inaianei ko te mea pono

I mua, i whakapau wa matou ki te pupuri i nga tuhinga katoa, ki te whakahou me te whakatika i nga hua katoa o nga whakahou. I tino pouri i te mea ko nga take o nga hapa me te wa heke i roto i nga tukunga he pohehe ngawari he tino uaua ki te whai i roto i te ngangau o nga tuhinga anga. Inaianei kua whakahekehia enei hapa ki te iti rawa. Ka hurihia nga huringa ki nga tono katoa i te wa kotahi. A he 15 meneti te roa ki te whakauru i tetahi tono hou ki roto i te mahi - whakarite he paipa tauira ki runga CI me te taapiri i nga taviri ki te putunga a te kaiwhakawhanake.

Te ahua nei ko te tohu me te Fastfile mo te Android me te hainatanga tono kaore i te whakamaramahia mena he mea whakamere te tuhinga, ka tuhia e ahau he korero haere tonu. Ka koa ahau ki te kite i o patai, whakaaro ranei "me pehea koe e whakaoti ai i tenei raru" i roto i nga korero, i runga ranei i te Telegram bashkirova.

Source: will.com

Tāpiri i te kōrero