CI runner baten VPNa: tuneletik ateratzen da build-a?
CI runner partekatu batek ibilbideak eta prozesuak gordetzen ditu lanen artean. Plana itzazu VPNaren egoerak lanaren aurretik, bitartean eta ondoren, eta garbitu lana jabe den konexioa soilik.
Inplementazio lan batek konektatu, bere artefaktua kopiatu eta arrakasta jakinarazten du. Ireki zuen tuneletik martxan egon daiteke hurrengo lana hasten denean, eta aldatu zuen ibilbidea host osoarena da. Build emaitzak komandoa deskribatzen du, ez atzean utzi zuen egoera. Tratatu VPNa bizitza duen baliabide gisa, ez etapa baten hasierako lerro bakar gisa.
Zer gehiago dabil host honetan
Jenkins nodo batek hainbat exekutzaile aldi berean exekuta ditzake, eta hostaren ibilbideak, resolver ezarpenak edo sistema osoko konexioa aldatzen dituen lan batek guztiontzat aldatzen ditu. Beste lan batek hori nabarituko duen ibilbide eta iragazketa politikaren araberakoa da, ez VPNei buruzko arau orokor baten araberakoa. Biltegirako sarbidea, artefaktuetarako sarbidea eta kontrol kanala runnerrak oraindik behar dituen baldintza bereiziak dira. Gehitu itzazu inplementazio helmugen zerrendan tunel osoa aukeratu aurretik.
Kontrol kanalak tunela zeharkatuko balu, diseinuak hori nahita esan behar du. Rollback batean hori aurkitzea ez da plan bat. Idatzi bi zerrendak: lanak pribatuki zer lortu behar duen eta runnerrak edozein kasutan zer lortu behar duen.
Behar du lan honek sarbide pribaturik?
Galdetu tunela gehitu aurretik build etapak behar duen. Inplementazio agente pribatu batek artefaktu onartu bat lortu eta inplementazioa egin dezake, eta horrek build etapa orokorra sare pribatutik kanpo uzten du. Banaketa hori normalean merkeagoa da build urrats bakoitzari tuneletik ibiltzen irakastea baino.
Aukeratu muga lan-fluxutik, ez ohituratik. Erantzuna ezezkoa bada, orri honetako gainerakoa alferrikakoa da, eta hori da eskuragarri dagoen emaitzarik onena.
Hurrengo lanak heredatzen duen egoera
Deskribatu zer izan behar duen egiaz lanaren aurretik, sarbide pribatua duen bitartean eta amaitu ondoren, bertan behera uztea barne. Amaierako egoera da isilen uzten dena gehienetan, eta hura da hurrengo lanak heredatzen duena. Idatzi pipelinearen ondoan, norbaiten memorian utzi beharrean.
| 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 |
Agente dedikatu edo erabilera bakarreko batek muga horiek betearaztea errazten du. Edukinak edo izen-espazioak soilik laguntzen du bere sare eta pribilegio antolamenduak aldaketa benetan isolatzen badu.
Gelditu konexioa, ez programa
Erabili pipelinearen amaiera bidea lan honek hasitako konexioa ixteko eta bere kredentzial iragankorrak kentzeko. Ez parekatu prozesuak programaren izenaren arabera beste lan batzuek erabiltzen duten host batean; gelditu konexio zehatza. Beheko bi komandoak garbiketa osoa dira, eta batek ere ez du prozesu bat aurkitzearen menpe.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Amaitzeak ez du isolatzen: hiltzen den runner batek ireki zuen tunela gordetzen du, eta indarrez gelditutako prozesu batek blokea oso-osorik saltatzen du. Horregatik garbiketa komandoak ezin du diseinu osoa izan. Hona nola huts egiten duen praktikan: inplementazio lan bat kopiatze urratsean bertan behera uzten da, amaiera blokea ez da inoiz exekutatzen, eta host bereko hurrengo lana tuneletik bizirik eta iritsi ezin duen sare batera doan ibilbide batekin hasten da. Hutsegitea hurrengo build-ean 'DNS' arazo bat dirudi, eragin zuen lana amaitu eta ordu batzuk geroago.
Erregistratu profilaren izena eta kredentzialaren bidea lanaren irteeran. Identifikatzailerik gabeko deskonexio komando soil bat zaila da geroago auditatzeko. Log lerroa da, halaber, blokea exekutatu zela frogatzen duena, geroagoko ikerketa batek hala eskatzen duenean.
Eman lanari inork erabiltzen ez duen host bat
Azpiegitura erabilgaitzak herentzia arazoa kentzen du, kudeatu beharrean. Lan bakoitzeko agente berri bat ibilbiderik, profilik eta beste inoren kredentzialik gabe hasten da, eta haren suntsiketak lanak utzitakoa garbitzen du. Horrek gehiago kostatzen du build bakoitzeko, eta garbiketa kodeari menpe ez dagoen muga baten benetako prezioa da. Ekoizpen sareak ukitzen dituzten lanei dagokienez, normalean aukera merkeena da gorabeherak zenbatuta.
Runner partekatuak egon behar duen lekuetan, probatu huts egitea eta bertan behera uztea arrakastatsua den kopiaketa bezain arretaz. Proba honek erakutsi beharko luke hurrengo lanak zer ikusiko lukeen, hau erdibidean bertan behera utziko balitz. Lana egina dago haren sarbidea eta egoera iragankorra amaitu direnean, ez kopiatze komandoak zero itzultzen duenean.