VPN për CI runner: a e mbijeton tuneli build-in?
Një CI runner i përbashkët mban rrugë dhe procese mes punëve. Planifikoni gjendjet e VPN-së para, gjatë dhe pas punës, dhe pastroni vetëm lidhjen që zotëron puna.
Një punë vendosjeje lidhet, kopjon artefaktin e saj dhe raporton sukses. Tuneli që hapi mund të jetë ende aktiv kur fillon puna tjetër, dhe rruga që ndryshoi i përket të gjithë hostit. Rezultati i build-it përshkruan komandën, jo gjendjen që la pas. Trajtojeni VPN-në si burim me jetëgjatësi, jo si një rresht në fillim të një faze.
Çfarë tjetër ekzekutohet në këtë host
Një nyje Jenkins mund të ekzekutojë disa ekzekutues njëkohësisht, dhe një punë që ndryshon rrugët e hostit, cilësimet e resolver-it ose një lidhje në nivel sistemi i ndryshon ato për të gjithë. Nëse një punë tjetër e vëren këtë varet nga politika e rrugëve dhe e filtrimit, jo nga një rregull i përgjithshëm për VPN-të. Qasja në repository, qasja në artefakte dhe kanali i kontrollit janë kërkesa të ndara që runner-i ende i nevojitet. Shtojini ato në listën e destinacioneve të vendosjes përpara se të zgjidhni një tunel të plotë.
Nëse kanali i kontrollit do të kalonte nëpër tunel, dizajni duhet ta thotë këtë me vetëdije. Zbulimi i kësaj gjatë një kthimi pas nuk është plan. Shkruajini të dyja listat: çfarë duhet të arrijë puna në mënyrë private dhe çfarë duhet të arrijë runner-i pavarësisht.
A i duhet fare kësaj pune qasje private?
Pyetni përpara se të shtoni tunelin nëse faza e build-it e kërkon. Një agent privat vendosjeje mund të marrë një artefakt të miratuar dhe të kryejë vendosjen, gjë që e mban fazën e përgjithshme të build-it jashtë rrjetit privat. Kjo ndarje është zakonisht më e lirë sesa t'i mësosh çdo hapi të build-it të kalojë nëpër tunel.
Zgjidhni kufirin nga rrjedha e punës, jo nga zakoni. Nëse përgjigjja është jo, pjesa tjetër e kësaj faqe është e panevojshme, dhe ky është rezultati më i mirë i disponueshëm.
Gjendja që trashëgon puna tjetër
Përshkruani çfarë duhet të jetë e vërtetë para punës, ndërsa ajo mban qasje private, dhe pasi të përfundojë, përfshirë anulimin. Gjendja përfundimtare është ajo që mbetet më shpesh e nënkuptuar, dhe është ajo që trashëgon puna tjetër. Shkruajeni pranë pipeline-it në vend që ta lini në kujtesën e dikujt.
| Moment | What proves it | What leaks if it is skipped |
|---|---|---|
| Job start: pre-flight route check | The route table shows no tunnel from an earlier job, and the profile list is empty | A stale route sends deployment traffic into a dead tunnel |
| Job end: disconnect and shred | The profile is down and the temporary key file is gone | The next job inherits an open tunnel and a usable credential |
| Cancelled job: reboot or disposal | The host is replaced or rebooted before the next job starts | A killed process leaves the tunnel up with no owner |
Një agent i dedikuar ose i njëpërdorshëm i bën këta kufij më të lehtë për t'u zbatuar. Një container ose namespace ndihmon vetëm nëse rregullimi i tij i rrjetit dhe i privilegjeve e izolon realisht ndryshimin.
Ndaloni lidhjen, jo programin
Përdorni rrugën e përfundimit të pipeline-it për të mbyllur lidhjen që nisi kjo punë dhe për të hequr kredencialet e saj të përkohshme. Mos i përputhni proceset sipas emrit të programit në një host që përdorin punë të tjera; ndaloni lidhjen specifike. Dy komandat më poshtë janë e gjithë pastrimi, dhe asnjëra nuk varet nga gjetja e një procesi.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Përfundimi nuk është izolim: një runner që vdes e mban tunelin që hapi, dhe një proces që ndalet me forcë e anashkalon plotësisht bllokun. Kjo është arsyeja pse komanda e pastrimit e vetme nuk mund të jetë i gjithë dizajni. Ja si dështon në praktikë: një punë vendosjeje anulohet në hapin e kopjimit, blloku i përfundimit nuk ekzekutohet kurrë, dhe puna tjetër në të njëjtin host fillon me një tunel aktiv dhe një rrugë që tregon drejt një rrjeti që nuk mund ta arrijë. Dështimi duket si një problem 'DNS' në build-in tjetër, orë pas përfundimit të punës që e shkaktoi.
Regjistroni emrin e profilit dhe shtegun e kredencialeve në daljen e punës. Një komandë e thjeshtë shkëputjeje pa identifikues është e vështirë për t'u audituar më pas. Rreshti i log-ut është gjithashtu ai që provon se blloku u ekzekutua kur një hetim i mëvonshëm e kërkon.
Jepini punës një host që askush tjetër nuk e përdor
Infrastruktura e njëpërdorshme e heq problemin e trashëgimisë në vend që ta menaxhojë atë. Një agent i ri për çdo punë fillon pa rrugë, pa profil dhe pa kredenciale nga askush tjetër, dhe shkatërrimi i tij pastron çfarëdo që la puna. Kjo kushton më shumë për çdo build, dhe është çmimi i sinqertë i një kufiri që nuk varet nga kodi i pastrimit. Për punët që prekin rrjetet e prodhimit, zakonisht është opsioni më i lirë kur numërohen incidentet.
Aty ku një runner i përbashkët duhet të mbetet, provoni dështimin dhe anulimin po aq me kujdes sa kopjimi i suksesshëm. Testi duhet të tregojë çfarë do të shihte puna tjetër nëse kjo anulohej në gjysmë të rrugës. Një punë ka mbaruar kur qasja dhe gjendja e saj e përkohshme kanë përfunduar, jo kur komanda e kopjimit kthen zero.