Opravilo uvajanja se poveže, kopira svoj artefakt in sporoči uspeh. Tunel, ki ga je odprlo, je lahko še vedno aktiven, ko se začne naslednje opravilo, in pot, ki jo je spremenilo, pripada celemu gostitelju. Rezultat builda opisuje ukaz, ne stanja, ki ga je pustil za seboj. Obravnavajte VPN kot vir z življenjsko dobo, ne kot eno vrstico na začetku faze.

Kaj še teče na tem gostitelju

Vozlišče Jenkins lahko hkrati izvaja več izvajalcev, opravilo, ki spremeni poti gostitelja, nastavitve razreševalnika ali sistemsko povezavo, pa jih spremeni za vse. Ali bo drugo opravilo to opazilo, je odvisno od politike poti in filtriranja, ne od splošnega pravila o VPN. Dostop do repozitorija, dostop do artefaktov in krmilni kanal so ločene zahteve, ki jih runner še vedno potrebuje. Dodajte jih na seznam ciljev uvajanja, preden izberete polni tunel.

Če naj bi krmilni kanal šel skozi tunel, mora načrt to povedati zavestno. Odkriti to med vračanjem ni načrt. Zapišite oba seznama: do česa mora opravilo priti zasebno in do česa mora runner priti ne glede na vse.

Ali to opravilo sploh potrebuje zasebni dostop?

Preden dodate tunel, vprašajte, ali ga faza builda potrebuje. Zasebni agent za uvajanje lahko pridobi odobreni artefakt in izvede uvajanje, kar splošno fazo builda drži zunaj zasebnega omrežja. Takšna delitev je običajno cenejša od učenja vsakega koraka builda, da gre skozi tunel.

Mejo izberite iz delovnega postopka, ne iz navade. Če je odgovor ne, je preostanek te strani nepotreben, in to je najboljši razpoložljivi izid.

Stanje, ki ga podeduje naslednje opravilo

Opišite, kaj mora veljati pred opravilom, dokler ima zasebni dostop, in po njegovem koncu, vključno s preklicem. Končno stanje je tisto, ki najpogosteje ostane neizrečeno, in prav njega podeduje naslednje opravilo. Zapišite ga ob pipeline, namesto da ga puščate v nekem spominu.

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

Namenski ali enkratni agent olajša uveljavljanje teh meja. Vsebnik ali imenski prostor pomaga le, če njegova omrežna in privilegijska ureditev spremembo res izolira.

Ustavite povezavo, ne programa

Uporabite pot dokončanja pipeline za zaprtje povezave, ki jo je začelo to opravilo, in za odstranitev njenih začasnih poverilnic. Ne povezujte procesov po imenu programa na gostitelju, ki ga uporabljajo druga opravila; ustavite konkretno povezavo. Ukaza spodaj sta celotno čiščenje in noben ne temelji na iskanju procesa.

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

Dokončanje ni izolacija: runner, ki umre, obdrži tunel, ki ga je odprl, proces, ki je prisilno ustavljen, pa blok povsem preskoči. Zato ukaz za čiščenje sam ne more biti celoten načrt. Tako odpove v praksi: opravilo uvajanja je preklicano pri koraku kopiranja, blok dokončanja se ne izvede nikoli in naslednje opravilo na istem gostitelju se začne z živim tunelom in potjo, ki kaže v omrežje, do katerega ne more priti. Napaka je videti kot težava z 'DNS' v naslednjem buildu, ure po tem, ko se je opravilo, ki jo je povzročilo, končalo.

Zabeležite ime profila in pot do poverilnic v izhod opravila. Goli ukaz za prekinitev povezave brez identifikatorja je pozneje težko revidirati. Vrstica v dnevniku je tudi tisto, kar dokaže, da se je blok izvedel, ko to zahteva poznejša preiskava.

Dajte opravilu gostitelja, ki ga nihče drug ne uporablja

Enkratna infrastruktura odpravi težavo dedovanja, namesto da bi jo upravljala. Svež agent za vsako opravilo se začne brez poti, brez profila in brez tujih poverilnic, njegovo uničenje pa počisti, kar je opravilo pustilo. To stane več na build in to je poštena cena meje, ki ni odvisna od kode za čiščenje. Za opravila, ki se dotikajo produkcijskih omrežij, je to običajno cenejša možnost, ko se incidenti preštejejo.

Kjer mora deljeni runner ostati, preizkusite odpoved in preklic enako skrbno kot uspešno kopiranje. Preizkus naj pokaže, kaj bi naslednje opravilo videlo, če bi bilo to preklicano na pol poti. Opravilo je končano, ko so njegov dostop in začasno stanje končani, ne ko ukaz za kopiranje vrne nič.

Sorodni članki