CI-futtató VPN: túléli a tunel a buildet?
A megosztott CI-futtató útvonalakat és folyamatokat tart meg a feladatok között. Tervezze meg a VPN állapotait a feladat előtt, alatt és után, és csak azt a kapcsolatot takarítsa el, amely a feladat tulajdona.
Egy telepítési feladat csatlakozik, átmásolja az artefaktját és sikert jelent. A megnyitott tunel még élő lehet, amikor a következő feladat elindul, és a módosított útvonal az egész hoszthoz tartozik. A build eredménye a parancsot írja le, nem az állapotot, amelyet maga után hagyott. Kezelje a VPN-t élettartammal rendelkező erőforrásként, ne egyetlen sorként egy szakasz elején.
Mi fut még ezen a hoszton
Egy Jenkins-csomópont több végrehajtót is futtathat egyszerre, és az a feladat, amely a hoszt útvonalait, a feloldó beállításait vagy egy rendszerszintű kapcsolatot módosít, mindenki számára módosítja azokat. Hogy egy másik feladat észreveszi-e, az útvonal- és szűrési szabályzattól függ, nem a VPN-ekről szóló általános szabálytól. A tárolóelérés, az artefakt-elérés és a vezérlőcsatorna külön követelmények, amelyekre a futtatónak továbbra is szüksége van. Adja hozzá ezeket a telepítési célok listájához, mielőtt teljes tunelt választ.
Ha a vezérlőcsatorna keresztezné a tunelt, a tervezésnek ezt szándékosan ki kell mondania. Egy visszaállítás közben felfedezni ezt nem terv. Írja le a két listát: mit kell a feladatnak privát módon elérnie, és mit kell a futtatónak mindenképpen elérnie.
Egyáltalán szüksége van ennek a feladatnak privát hozzáférésre?
Kérdezze meg a tunel hozzáadása előtt, hogy a build-szakasznak szüksége van-e rá. Egy privát telepítési ügynök beszerezhet egy jóváhagyott artefaktot és elvégezheti a telepítést, ami a build általános szakaszát a privát hálózaton kívül tartja. Ez a felosztás általában olcsóbb, mint megtanítani minden build-lépést tunelen keresztül haladni.
A határt a munkafolyamatból válassza, ne a szokásból. Ha a válasz nem, az oldal többi része felesleges, és ez a legjobb elérhető eredmény.
Az az állapot, amelyet a következő feladat örököl
Írja le, minek kell igaznak lennie a feladat előtt, amíg privát hozzáférése van, és miután véget ér, beleértve a megszakítást is. A végállapot az, amely legtöbbször kimondatlan marad, és ezt örökli a következő feladat. Írja le a pipeline mellé, ahelyett hogy valakinek az emlékezetében hagyná.
| 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 |
Egy dedikált vagy eldobható ügynök könnyebbé teszi e határok érvényesítését. Egy konténer vagy névtér csak akkor segít, ha hálózati és jogosultsági elrendezése valóban izolálja a változtatást.
A kapcsolatot állítsa le, ne a programot
Használja a pipeline befejezési útvonalát, hogy bezárja a kapcsolatot, amelyet ez a feladat indított, és eltávolítsa ideiglenes hitelesítő adatait. Ne párosítson folyamatokat programnév alapján olyan hoszton, amelyet más feladatok használnak; állítsa le inkább a konkrét kapcsolatot. Az alábbi két parancs a teljes tisztítás, és egyik sem függ egy folyamat megtalálásától.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
A befejezés nem izoláció: a meghaló futtató megtartja a megnyitott tunelt, a kényszerítve leállított folyamat pedig teljesen kihagyja a blokkot. Ezért a tisztítási parancs önmagában nem lehet a teljes terv. Így hibázik a gyakorlatban: egy telepítési feladat megszakad a másolási lépésnél, a befejezési blokk soha nem fut le, és a következő feladat ugyanazon a hoszton élő tunellel és egy olyan hálózat felé mutató útvonallal indul, amelyet nem ér el. A hiba 'DNS'-problémának látszik a következő buildben, órákkal azután, hogy az azt okozó feladat befejeződött.
Rögzítse a profil nevét és a hitelesítő adat útvonalát a feladat kimenetében. Az azonosító nélküli csupasz bontási parancs később nehezen auditálható. A naplósor az is, ami bizonyítja, hogy a blokk lefutott, amikor egy későbbi vizsgálat kéri.
Adjon a feladatnak olyan hosztot, amelyet senki más nem használ
Az eldobható infrastruktúra megszünteti az öröklődési problémát ahelyett, hogy kezelné. Feladatonként egy friss ügynök útvonal, profil és mások hitelesítő adatai nélkül indul, és a megsemmisítése eltakarítja, amit a feladat hátrahagyott. Ez buildenként többe kerül, és ez annak a határnak a tisztességes ára, amely nem függ tisztítási kódtól. A termelési hálózatokat érintő feladatoknál ez általában az olcsóbb lehetőség, ha az incidenseket megszámoljuk.
Ahol a megosztott futtatónak maradnia kell, tesztelje a hibát és a megszakítást olyan gondosan, mint a sikeres másolást. A tesztnek meg kell mutatnia, mit látna a következő feladat, ha ezt félúton megszakítanák. Egy feladat akkor van kész, amikor a hozzáférése és az ideiglenes állapota véget ért, nem amikor a másolási parancs nullát ad vissza.