ProHoster > Блог > Isakoso > Iriri CICD Alagbeka: boṣewa fastlane kan fun ọpọlọpọ awọn ohun elo alagbeka
Iriri CICD Alagbeka: boṣewa fastlane kan fun ọpọlọpọ awọn ohun elo alagbeka
Emi yoo fẹ lati sọrọ nipa iṣọpọ lemọlemọfún ati ifijiṣẹ fun awọn ohun elo alagbeka nipa lilo fastlane. Bii a ṣe n ṣe CI / CD lori gbogbo awọn ohun elo alagbeka, bawo ni a ṣe de ibẹ ati ohun ti o ṣẹlẹ ni ipari.
Ohun elo ti wa tẹlẹ lori nẹtiwọọki lori ọpa, eyiti a ko ni ni ibẹrẹ, nitorinaa Emi kii yoo mọọmọ ṣapejuwe ọpa ni awọn alaye, ṣugbọn yoo tọka si ohun ti a ni lẹhinna:
Isalẹ si ifarahan ti CI / CD alagbeka ni ile-iṣẹ naa
Ojutu imọ-ẹrọ fun yiyi CI / CD fun awọn ohun elo N
Apa akọkọ jẹ diẹ nostalgia fun awọn ọjọ atijọ, ati keji jẹ iriri ti o le lo si ara rẹ.
Eyi ni bi o ṣe ṣẹlẹ ni itan
Ọdun 2015
A ṣẹṣẹ bẹrẹ idagbasoke awọn ohun elo alagbeka, lẹhinna a ko mọ ohunkohun nipa iṣọpọ igbagbogbo, nipa DevOps ati awọn nkan asiko miiran. Imudojuiwọn ohun elo kọọkan ti yiyi nipasẹ olupilẹṣẹ funrararẹ lati ẹrọ rẹ. Ati pe ti o ba jẹ fun Android o rọrun pupọ - pejọ, fowo si .apk o si gbe e si Google Developer Console, lẹhinna fun iOS ohun elo pinpin lẹhinna nipasẹ Xcode fi wa silẹ pẹlu awọn irọlẹ nla - awọn igbiyanju lati ṣe igbasilẹ igbasilẹ nigbagbogbo ni awọn aṣiṣe ati pe a ni lati gbiyanju lẹẹkansi. O wa ni jade wipe awọn julọ to ti ni ilọsiwaju Olùgbéejáde ko ni kọ koodu ni igba pupọ osu kan, sugbon dipo tu awọn ohun elo.
Ọdun 2016
A dagba, a ti ni awọn ero tẹlẹ nipa bi o ṣe le gba awọn olupilẹṣẹ laaye lati gbogbo ọjọ kan fun itusilẹ, ati pe ohun elo keji tun han, eyiti o fa wa siwaju sii si adaṣe. Ni ọdun kanna, a fi Jenkins sori ẹrọ fun igba akọkọ ati kọ ọpọlọpọ awọn iwe afọwọkọ idẹruba, ti o jọra si awọn ti fastlane fihan ninu iwe rẹ.
Laanu, titi di bayi awọn olupilẹṣẹ wa nikan ni o mọ bii awọn iwe afọwọkọ wọnyi ṣe n ṣiṣẹ ati idi ti a nilo akopọ ailopin ti awọn bọtini, ati nigbati ohunkan tun bajẹ, wọn ni “awọn irọlẹ lẹwa” fun itupalẹ awọn akọọlẹ.
Ọdun 2017
Ni ọdun yii a kẹkọọ pe iru nkan kan wa bi fastlane. Ko si alaye pupọ bi o ti wa ni bayi - bii o ṣe le bẹrẹ ọkan, bii o ṣe le lo. Ati pe ọpa funrararẹ tun jẹ robi ni akoko yẹn: awọn aṣiṣe igbagbogbo jẹ ibanujẹ wa nikan ati pe o nira lati gbagbọ ninu adaṣe idan ti wọn ṣe ileri.
Sibẹsibẹ, awọn ohun elo akọkọ ti o wa ninu mojuto fastlane jẹ gym и pilot, a ṣakoso lati bẹrẹ.
Wọn ti ni ilọsiwaju, ti o ba jẹ pe nitori kii ṣe gbogbo awọn paramita pataki fun xcodebuild, o nilo lati tọka - gym yoo ominira ye ibi ti ati ohun ti o wa da. Ati fun atunṣe itanran diẹ sii, o le pato awọn bọtini kanna bi ninu xcodebuild, nikan ni loruko ti awọn bọtini ni clearer.
Ni akoko yii, o ṣeun si ile-idaraya ati ọna kika xcpretty ti a ṣe sinu, awọn akọọlẹ kikọ ti di pupọ diẹ sii legible. Eyi bẹrẹ lati fi akoko pamọ lori titunṣe awọn apejọ ti o fọ, ati nigba miiran ẹgbẹ idasilẹ le ṣe ero rẹ funrararẹ.
Laanu, awọn wiwọn iyara apejọ xcodebuild и gym A ko ṣe, ṣugbọn a yoo gbẹkẹle iwe naa - to 30% iyara.
Nikan ilana fun gbogbo awọn ohun elo
Odun 2018 ati bayi
Ni ọdun 2018, ilana ti kikọ ati yiyi awọn ohun elo ti o ti gbe patapata si Jenkins, awọn olupilẹṣẹ dẹkun idasilẹ lati awọn ẹrọ wọn, ati pe ẹgbẹ idasilẹ nikan ni ẹtọ lati tu silẹ.
A ti fẹ lati ni ilọsiwaju ifilọlẹ awọn idanwo ati itupalẹ aimi, ati pe awọn iwe afọwọkọ wa dagba ati dagba. Grew ati yipada pẹlu awọn ohun elo wa. Ni akoko yẹn o wa nipa awọn ohun elo 10. Ti o ba ṣe akiyesi pe a ni awọn iru ẹrọ meji, ti o jẹ nipa awọn iwe afọwọkọ 20 "alãye".
Ni gbogbo igba ti a fẹ lati ṣafikun igbesẹ tuntun si iwe afọwọkọ, a ni lati daakọ-lẹẹmọ awọn ege sinu gbogbo awọn iwe afọwọkọ ikarahun naa. Boya a le ti ṣiṣẹ diẹ sii ni iṣọra, ṣugbọn nigbagbogbo iru awọn iyipada ti pari ni typos, eyiti o yipada si awọn irọlẹ fun ẹgbẹ itusilẹ lati ṣatunṣe awọn iwe afọwọkọ ati rii iru eniyan ọlọgbọn ti ṣafikun aṣẹ yii ati kini o ṣe. Ni gbogbogbo, a ko le sọ pe awọn iwe afọwọkọ fun apejọ fun pẹpẹ kan ni o kere ju bii. Biotilejepe wọn esan ṣe ohun kanna.
Lati le bẹrẹ ilana kan fun ohun elo tuntun, o jẹ dandan lati lo ọjọ kan lati yan ẹya “tuntun” ti awọn iwe afọwọkọ wọnyi, ṣatunṣe rẹ ki o sọ pe “bẹẹni, o ṣiṣẹ.”
Ni akoko ooru ti ọdun 2018, a tun wo si ọna fastlane ti o tun dagbasoke.
Iṣẹ #1: ṣe akopọ gbogbo awọn igbesẹ iwe afọwọkọ ki o tun kọ wọn sinu Fastfile
Nigba ti a bẹrẹ, awọn iwe afọwọkọ wa dabi aṣọ-ẹsẹ ti o ni gbogbo awọn igbesẹ ati awọn crutches ninu iwe afọwọkọ ikarahun kan ni Jenkins. A ko tii yipada si opo gigun ti epo ati pipin nipasẹ ipele.
A wo ohun ti a ni ati ṣe idanimọ awọn igbesẹ mẹrin ti o baamu apejuwe ti CI/CD wa:
sonar - ṣe ifilọlẹ gbogbo awọn linters ati firanṣẹ awọn ijabọ si SonarQube,
deploy — fifiranṣẹ ohun artifact to alpha (TestFlight).
Ati pe ti o ko ba lọ sinu awọn alaye, yiyọ awọn bọtini ti a lo ninu awọn iṣe, iwọ yoo gba Fastfile yii:
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
Ni otitọ, Fastfile akọkọ wa ti jade lati jẹ ohun ibanilẹru, ni imọran diẹ ninu awọn crutches ti a tun nilo ati nọmba awọn aye ti a rọpo:
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
Ninu apẹẹrẹ ti o wa loke, apakan nikan ti awọn aye ti a nilo lati ṣalaye: iwọnyi ni awọn ipilẹ-itumọ - ero, iṣeto ni, awọn orukọ Profaili Ipese, ati awọn aye pinpin - ID Apple ti akọọlẹ idagbasoke, ọrọ igbaniwọle, ID ohun elo, ati bẹbẹ lọ lori. Gẹgẹbi isunmọ akọkọ, a fi gbogbo awọn bọtini wọnyi sinu awọn faili pataki - Gymfile, Matchfile и Appfile.
Ni bayi ni Jenkins o le pe awọn pipaṣẹ kukuru ti ko ṣe blur wiwo ati ni irọrun kika nipasẹ oju:
Kini o gba? Ko awọn aṣẹ kuro fun gbogbo igbesẹ. Awọn iwe afọwọkọ ti a ti sọ di mimọ, ti ṣeto daradara ni awọn faili fastlane. Ni ayọ, a sare lọ si awọn olupilẹṣẹ n beere lọwọ wọn lati ṣafikun ohun gbogbo ti wọn nilo si awọn ibi ipamọ wọn.
Ṣugbọn a ṣe akiyesi ni akoko pe a yoo pade awọn iṣoro kanna - a yoo tun ni awọn iwe afọwọkọ apejọ 20 ti yoo jẹ ọna kan tabi omiran bẹrẹ lati gbe igbesi aye ti ara wọn, yoo nira sii lati ṣatunkọ wọn, nitori awọn iwe afọwọkọ yoo lọ si awọn ibi ipamọ, ati pe a ko ni iwọle si nibẹ. Ati, ni gbogbogbo, kii yoo ṣee ṣe lati yanju irora wa ni ọna yii.
Iṣẹ #2: gba Fastfile ẹyọkan fun awọn ohun elo N
Bayi o dabi pe ipinnu iṣoro naa ko nira - ṣeto awọn oniyipada, ki a lọ. Bẹẹni, ni otitọ, iyẹn ni bi a ti yanju iṣoro naa. Ṣugbọn ni akoko ti a ba gbe e soke, a ko ni oye ninu fastlane funrararẹ, tabi ni Ruby, ninu eyiti a ti kọ fastlane, tabi awọn apẹẹrẹ ti o wulo lori nẹtiwọọki - gbogbo eniyan ti o kọ nipa fastlane lẹhinna ni opin si apẹẹrẹ fun ohun elo kan fun ọkan Olùgbéejáde.
Fastlane le mu awọn oniyipada ayika ṣiṣẹ, ati pe a ti gbiyanju eyi tẹlẹ nipa tito ọrọ igbaniwọle Keychain:
ENV['KEYCHAIN_PASSWORD']
Lẹhin wiwo awọn iwe afọwọkọ wa, a ṣe idanimọ awọn apakan ti o wọpọ:
#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
Bayi, lati bẹrẹ lilo awọn bọtini wọnyi ni awọn faili fastlane, a ni lati ṣawari bi a ṣe le fi wọn ranṣẹ sibẹ. Fastlane ni ojutu kan fun eyi: ikojọpọ oniyipada nipasẹ dotenv. Iwe naa sọ pe ti o ba ṣe pataki fun ọ lati gbe awọn bọtini fun awọn idi oriṣiriṣi, ṣẹda awọn faili iṣeto ni ọpọlọpọ ninu itọsọna fastlane .env, .env.default, .env.development.
Ati lẹhinna a pinnu lati lo ile-ikawe yii ni iyatọ diẹ. Jẹ ki a gbe sinu ibi ipamọ awọn olupilẹṣẹ kii ṣe awọn iwe afọwọkọ fastlane ati alaye meta rẹ, ṣugbọn awọn bọtini alailẹgbẹ ti ohun elo yii ninu faili naa .env.appName.
Sami Fastfile, Appfile, Matchfile и Gymfile, a fi pamọ sinu ibi ipamọ ọtọtọ. Faili afikun pẹlu awọn bọtini igbaniwọle lati awọn iṣẹ miiran ti farapamọ nibẹ - .env.
O le wo apẹẹrẹ kan nibi.
Lori CI, ipe naa ko yipada pupọ; bọtini iṣeto kan fun ohun elo kan ti ṣafikun:
Fi ojutu yii silẹ fun bayi, botilẹjẹpe Fastlane ni ojutu kan fun igbasilẹ Fastfile nipasẹ igbeseimport_from_git, ṣugbọn o ṣiṣẹ fun Fastfile nikan, ṣugbọn kii ṣe fun awọn faili miiran. Ti o ba fẹ “lẹwa gaan”, o le kọ tirẹ action.
Eto ti o jọra ni a ṣe fun awọn ohun elo Android ati ReactNative, awọn faili wa ni ibi ipamọ kanna, ṣugbọn ni awọn ẹka oriṣiriṣi. iOS, android и react_native.
Nigbati ẹgbẹ idasilẹ ba fẹ lati ṣafikun diẹ ninu igbesẹ tuntun, awọn ayipada ninu iwe afọwọkọ ti wa ni igbasilẹ nipasẹ MR ni git, ko si iwulo kankan lati wa awọn ẹlẹṣẹ ti awọn iwe afọwọkọ ti o fọ, ati ni gbogbogbo, bayi o ni lati gbiyanju lati fọ.
Bayi iyẹn ni idaniloju
Ni iṣaaju, a lo akoko mimu gbogbo awọn iwe afọwọkọ, mimu wọn dojuiwọn ati ṣatunṣe gbogbo awọn abajade ti awọn imudojuiwọn. O jẹ itiniloju pupọ nigbati awọn idi fun awọn aṣiṣe ati akoko idaduro ni awọn idasilẹ jẹ awọn aṣiṣe ti o rọrun ti o nira pupọ lati tọju abala awọn iwe afọwọkọ ikarahun. Bayi iru awọn aṣiṣe ti dinku si o kere julọ. Awọn iyipada ti wa ni yiyi si gbogbo awọn ohun elo ni ẹẹkan. Ati pe o gba to iṣẹju 15 lati fi ohun elo tuntun sinu ilana naa - ṣeto opo gigun ti epo awoṣe kan lori CI ki o ṣafikun awọn bọtini si ibi ipamọ olupilẹṣẹ.
O dabi pe aaye pẹlu Fastfile fun Android ati ibuwọlu ohun elo ko wa laini alaye; ti nkan naa ba jẹ iyanilenu, Emi yoo kọ ilọsiwaju kan. Inu mi yoo dun lati rii awọn ibeere tabi awọn imọran “bawo ni iwọ yoo ṣe yanju iṣoro yii” ninu awọn asọye tabi lori Telegram bashkirova.