CI runnera VPN: vai tunelis pārdzīvo būvējumu?
Kopīgs CI runners starp darbiem saglabā maršrutus un procesus. Plānojiet VPN stāvokļus pirms darba, tā laikā un pēc tam, un tīriet tikai to savienojumu, kas pieder darbam.
Izvietošanas darbs pieslēdzas, nokopē savu artefaktu un ziņo par panākumiem. Tā atvērtais tunelis var joprojām būt aktīvs, kad sākas nākamais darbs, un mainītais maršruts pieder visam hostam. Būvējuma rezultāts apraksta komandu, nevis stāvokli, ko tas atstāja. Uztveriet VPN kā resursu ar dzīves ciklu, nevis kā vienu rindu posma sākumā.
Kas vēl darbojas šajā hostā
Jenkins mezgls var vienlaikus darbināt vairākus izpildītājus, un darbs, kas maina hosta maršrutus, resolvera iestatījumus vai sistēmas līmeņa savienojumu, maina tos visiem. Vai cits darbs to pamanīs, ir atkarīgs no maršrutu un filtrēšanas politikas, nevis no vispārīga noteikuma par VPN. Piekļuve repozitorijam, piekļuve artefaktiem un vadības kanāls ir atsevišķas prasības, kas runneram joprojām vajadzīgas. Pievienojiet tās izvietošanas mērķu sarakstam pirms pilna tuneļa izvēles.
Ja vadības kanālam būtu jāšķērso tunelis, dizainam tas apzināti jāsaka. Atklāt to atritināšanas laikā nav plāns. Pierakstiet abus sarakstus: kas darbam jāsasniedz privāti un kas runneram jāsasniedz jebkurā gadījumā.
Vai šim darbam vispār vajadzīga privāta piekļuve?
Pajautājiet pirms tuneļa pievienošanas, vai būvējuma posmam tas vajadzīgs. Privāts izvietošanas aģents var paņemt apstiprinātu artefaktu un veikt izvietošanu, kas vispārējo būvējuma posmu tur ārpus privātā tīkla. Šāds dalījums parasti ir lētāks nekā mācīt katram būvējuma solim maršrutēt caur tuneli.
Izvēlieties robežu no darbplūsmas, nevis no ieraduma. Ja atbilde ir nē, pārējā šīs lapas daļa nav vajadzīga, un tas ir labākais pieejamais iznākums.
Stāvoklis, ko manto nākamais darbs
Aprakstiet, kas jābūt patiesam pirms darba, kamēr tam ir privāta piekļuve, un pēc tam, kad tas beidzas, tostarp atcelšanas gadījumā. Gala stāvoklis ir tas, kas visbiežāk paliek neizteikts, un tas ir tas, ko manto nākamais darbs. Pierakstiet to blakus pipeline, nevis atstājiet kāda atmiņā.
| 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 |
Īpašs vai vienreizējs aģents atvieglo šo robežu ieviešanu. Konteiners vai nosaukumvieta palīdz tikai tad, ja tās tīkla un privilēģiju izkārtojums tiešām izolē izmaiņas.
Apturiet savienojumu, nevis programmu
Izmantojiet pipeline pabeigšanas ceļu, lai aizvērtu savienojumu, ko sāka šis darbs, un noņemtu tā pagaidu akreditācijas datus. Nesaskaņojiet procesus pēc programmas nosaukuma hostā, ko izmanto citi darbi; apturiet konkrēto savienojumu. Divas komandas zemāk ir visa tīrīšana, un neviena nav atkarīga no procesa atrašanas.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
Pabeigšana nav izolācija: miršanas brīdī runners patur atvērto tuneli, un ar varu apturēts process pilnībā izlaiž bloku. Tāpēc tikai tīrīšanas komanda nevar būt viss dizains. Lūk, kā tas neizdodas praksē: izvietošanas darbs tiek atcelts kopēšanas solī, pabeigšanas bloks nekad neizpildās, un nākamais darbs tajā pašā hostā sākas ar dzīvu tuneli un maršrutu, kas norāda uz tīklu, kuru tas nevar sasniegt. Bojājums izskatās kā 'DNS' problēma nākamajā būvējumā, stundas pēc tam, kad beidzās to izraisījušais darbs.
Ierakstiet profila nosaukumu un akreditācijas datu ceļu darba izvadē. Atvienošanas komanda bez identifikatora vēlāk ir grūti auditējama. Žurnāla rinda ir arī tas, kas pierāda, ka bloks darbojās, kad vēlāka izmeklēšana to jautā.
Dodiet darbam hostu, ko neviens cits neizmanto
Vienreizēja infrastruktūra novērš mantojuma problēmu, nevis to pārvalda. Jauns aģents katram darbam sākas bez maršruta, bez profila un bez citu akreditācijas datiem, un tā iznīcināšana satīra visu, ko darbs atstāja. Tas izmaksā vairāk uz būvējumu, un tā ir godīgā cena par robežu, kas nav atkarīga no tīrīšanas koda. Darbiem, kas skar ražošanas tīklus, tas parasti ir lētākais variants, kad incidenti tiek saskaitīti.
Kur kopīgam runneram jāpaliek, pārbaudiet neveiksmi un atcelšanu tikpat rūpīgi kā veiksmīgo kopēšanu. Testam jāparāda, ko nākamais darbs redzētu, ja šis tiktu atcelts pusceļā. Darbs ir pabeigts, kad tā piekļuve un pagaidu stāvoklis ir beigušies, nevis kad kopēšanas komanda atgriež nulli.