Úloha nasadenia sa pripojí, skopíruje svoj artefakt a ohlási úspech. Tunel, ktorý otvorila, môže byť stále aktívny, keď sa začína ďalšia úloha, a trasa, ktorú zmenila, patrí celému hostiteľovi. Výsledok buildu opisuje príkaz, nie stav, ktorý po sebe zanechal. Berte VPN ako prostriedok so životnosťou, nie ako jeden riadok na začiatku fázy.

Čo ešte na tomto hostiteľovi beží

Uzol Jenkins môže spúšťať niekoľko exekútorov naraz a úloha, ktorá mení trasy hostiteľa, nastavenia resolvera alebo systémové spojenie, ich mení pre všetkých. Či si to iná úloha všimne, závisí od politiky trás a filtrovania, nie od všeobecného pravidla o VPN. Prístup k repozitáru, prístup k artefaktom a riadiaci kanál sú samostatné požiadavky, ktoré runner stále potrebuje. Pridajte ich do zoznamu cieľov nasadenia skôr, než zvolíte plný tunel.

Ak by mal riadiaci kanál prechádzať tunelom, návrh to musí povedať vedome. Zistiť to pri návrate späť nie je plán. Zapíšte oba zoznamy: čo musí úloha dosiahnuť súkromne a čo musí runner dosiahnuť bez ohľadu na to.

Potrebuje táto úloha vôbec súkromný prístup?

Pred pridaním tunela sa opýtajte, či ho fáza buildu potrebuje. Súkromný agent na nasadenie môže stiahnuť schválený artefakt a vykonať nasadenie, čo drží všeobecnú fázu buildu mimo súkromnej siete. Také rozdelenie je zvyčajne lacnejšie než učiť každý krok buildu smerovať cez tunel.

Hranicu vyberajte z pracovného postupu, nie zo zvyku. Ak je odpoveď nie, zvyšok tejto stránky je zbytočný, a to je najlepší dostupný výsledok.

Stav, ktorý zdedí ďalšia úloha

Opíšte, čo má platiť pred úlohou, kým má súkromný prístup, a po jej skončení, vrátane zrušenia. Koncový stav je ten, ktorý najčastejšie zostáva nevyslovený, a práve ten dedí ďalšia úloha. Zapíšte ho vedľa pipeline, namiesto toho, aby ste ho nechávali v niekoho pamäti.

MomentWhat proves itWhat leaks if it is skipped
Job start: pre-flight route checkThe route table shows no tunnel from an earlier job, and the profile list is emptyA stale route sends deployment traffic into a dead tunnel
Job end: disconnect and shredThe profile is down and the temporary key file is goneThe next job inherits an open tunnel and a usable credential
Cancelled job: reboot or disposalThe host is replaced or rebooted before the next job startsA killed process leaves the tunnel up with no owner

Vyhradený alebo jednorazový agent uľahčuje presadenie týchto hraníc. Kontajner alebo menný priestor pomôže len vtedy, ak jeho sieťové a privilegované usporiadanie zmenu skutočne izoluje.

Zastavte spojenie, nie program

Použite cestu dokončenia pipeline na zatvorenie spojenia, ktoré táto úloha začala, a na odstránenie jej dočasných prihlasovacích údajov. Nepárujte procesy podľa názvu programu na hostiteľovi, ktorý používajú iné úlohy; zastavte konkrétne spojenie. Dva príkazy nižšie sú celé čistenie a ani jeden nezávisí od nájdenia procesu.

vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"

Dokončenie nie je izolácia: runner, ktorý zomrie, si otvorený tunel ponechá, a proces násilne zastavený blok úplne preskočí. Preto samotný príkaz na čistenie nemôže byť celý návrh. Takto to v praxi zlyháva: úloha nasadenia sa zruší pri kroku kopírovania, blok dokončenia sa nikdy nespustí a ďalšia úloha na tom istom hostiteľovi začne so živým tunelom a trasou, ktorá mieri do siete, kam sa nedostane. Zlyhanie vyzerá ako problém s 'DNS' v ďalšom builde, hodiny po tom, čo úloha, ktorá ho spôsobila, skončila.

Zaznamenajte názov profilu a cestu k prihlasovacím údajom do výstupu úlohy. Holý príkaz na odpojenie bez identifikátora sa neskôr ťažko audituje. Riadok v logu je aj to, čo preukáže, že blok prebehol, keď sa na to neskoršie vyšetrovanie opýta.

Dajte úlohe hostiteľa, ktorého nikto iný nepoužíva

Jednorazová infraštruktúra odstraňuje problém dedenia, namiesto toho, aby ho riadila. Nový agent pre každú úlohu začína bez trasy, bez profilu a bez cudzích prihlasovacích údajov a jeho zničenie uprace, čo úloha zanechala. To stojí viac na build a je to poctivá cena hranice, ktorá nezávisí od upratovacieho kódu. Pre úlohy, ktoré sa dotýkajú produkčných sietí, je to zvyčajne lacnejšia možnosť, keď sa incidenty spočítajú.

Tam, kde zdieľaný runner musí zostať, testujte zlyhanie a zrušenie rovnako starostlivo ako úspešné kopírovanie. Test má ukázať, čo by ďalšia úloha videla, keby táto bola zrušená v polovici. Úloha je hotová, keď sa skončil jej prístup a dočasný stav, nie keď príkaz na kopírovanie vráti nulu.

Súvisiace články