CI-jooksutaja VPN: kas tunnel elab buildist üle?
Jagatud CI-jooksutaja hoiab tööde vahel marsruute ja protsesse. Planeerige VPN-i olekud enne tööd, selle ajal ja pärast, ja koristage ainult ühendus, mille töö omab.
Juurutustöö ühendub, kopeerib oma artefakti ja teatab õnnestumisest. Tunnel, mille see avas, võib olla endiselt üleval, kui järgmine töö algab, ja marsruut, mida see muutis, kuulub kogu hostile. Buildi tulemus kirjeldab käsku, mitte olekut, mille see maha jättis. Käsitlege VPN-i ressursina, millel on eluiga, mitte ühe reana etapi alguses.
Mis veel sellel hostil jookseb
Jenkinsi sõlm võib käivitada korraga mitu täitjat, ja töö, mis muudab hosti marsruute, resolveri seadeid või süsteemset ühendust, muudab neid kõigi jaoks. Kas teine töö seda märkab, sõltub marsruudi- ja filtreerimispoliitikast, mitte üldisest VPN-reeglist. Repository juurdepääs, artefaktide juurdepääs ja juhtkanal on eraldi nõuded, mida jooksutaja ikka vajab. Lisage need juurutussihtkohtade loendisse enne täistunneli valimist.
Kui juhtkanal peaks tunnelit läbima, peab disain seda teadlikult ütlema. Selle avastamine tagasipööramise ajal ei ole plaan. Kirjutage kaks loendit üles: mida peab töö privaatselt saavutama ja mida peab jooksutaja saavutama sõltumata.
Kas see töö vajab üldse privaatset juurdepääsu?
Küsige enne tunneli lisamist, kas buildi etapp seda vajab. Privaatne juurutusagent saab hankida kinnitatud artefakti ja juurutuse läbi viia, mis hoiab üldise buildi etapi privaatsest võrgust väljas. See jaotus on tavaliselt odavam kui õpetada iga buildi sammu tunnelit mööda suunama.
Valige piir töövoost, mitte harjumusest. Kui vastus on ei, on selle lehe ülejäänud osa tarbetu, ja see on parim saadaolev tulemus.
Olek, mille järgmine töö pärib
Kirjeldage, mis peab kehtima enne tööd, selle ajal privaatse juurdepääsu korral ja pärast selle lõppu, sealhulgas tühistamist. Lõppolek on see, mis kõige sagedamini jääb ütlemata, ja see on olek, mille järgmine töö pärib. Kirjutage see pipeline'i kõrvale, selle asemel et jätta see kellegi mällu.
| 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 |
Sihtotstarbeline või ühekordne agent teeb need piirid kergemini jõustatavaks. Konteiner või nimeruum aitab ainult siis, kui selle võrgu- ja õiguste korraldus muudatuse tõesti isoleerib.
Peatage ühendus, mitte programm
Kasutage pipeline'i lõpetamise teed, et sulgeda ühendus, mille see töö alustas, ja eemaldada selle ajutised volitused. Ärge sobitage protsesse programmi nime järgi hostil, mida teised tööd kasutavad; peatage hoopis konkreetne ühendus. Kaks allolevat käsku on kogu koristus ja kumbki ei sõltu protsessi leidmisest.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Lõpetamine ei ole isolatsioon: surev jooksutaja jätab avatud tunneli alles ja jõuga peatatud protsess jätab ploki täielikult vahele. Seetõttu ei saa koristuskäsk üksi olla kogu disain. Praktikas ebaõnnestub see nii: juurutustöö tühistatakse kopeerimise sammul, lõpetamise plokk ei käivitu kunagi ja sama hosti järgmine töö algab elava tunneliga ning marsruudiga, mis osutab võrgule, mida see ei saa kätte. Rike näeb välja nagu 'DNS'-probleem järgmises buildis, tunde pärast seda, kui selle põhjustanud töö lõppes.
Kirjutage profiili nimi ja volituste tee töö väljundisse. Ilma identifikaatorita paljas katkestuskäsk on hiljem raskesti auditeeritav. Logirida on ka see, mis tõestab, et plokk töötas, kui hilisem uurimine seda küsib.
Andke tööle host, mida keegi teine ei kasuta
Ühekordne taristu kõrvaldab pärimisprobleemi, selle asemel et seda hallata. Värske agent iga töö jaoks algab ilma marsruudi, profiili ja võõraste volitusteta ning selle hävitamine koristab kõik, mis töö jättis. See maksab buildi kohta rohkem ja see on aus hind piirile, mis ei sõltu koristuskoodist. Tootmisvõrke puudutavate tööde puhul on see tavaliselt odavam valik, kui juhtumid kokku lugeda.
Kus jagatud jooksutaja peab jääma, testige ebaõnnestumist ja tühistamist sama hoolikalt kui edukat kopeerimist. Test peaks näitama, mida järgmine töö näeks, kui see töö poole peal tühistataks. Töö on valmis siis, kui selle juurdepääs ja ajutine olek on lõppenud, mitte siis, kui kopeerimiskäsk tagastab nulli.