VPN per a runners de CI: el túnel sobreviu a la compilació?
Un runner de CI compartit conserva rutes i processos entre feines. Planifiqueu els estats del VPN abans, durant i després de la feina, i netegeu només la connexió que la feina posseeix.
Una feina de desplegament es connecta, copia el seu artefacte i informa d'èxit. El túnel que ha obert pot seguir actiu quan comença la feina següent, i la ruta que ha canviat pertany a tot l'amfitrió. Un resultat de compilació descriu l'ordre, no l'estat que ha deixat enrere. Tracteu el VPN com un recurs amb una vida útil, no com una línia a l'inici d'una etapa.
Què més s'executa en aquest amfitrió
Un node de Jenkins pot executar diversos executors alhora, i una feina que canvia rutes de l'amfitrió, paràmetres del resolutor o una connexió de tot el sistema els canvia per a tothom. Que una altra feina se n'adoni depèn de la política de rutes i de filtratge, no d'una regla general sobre VPN. L'accés al repositori, l'accés als artefactes i el canal de control són requisits separats que el runner encara necessita. Afegiu-los a la llista de destinacions de desplegament abans de triar un túnel complet.
Si el canal de control hagués de travessar el túnel, el disseny ho ha de dir deliberadament. Descobrir-ho durant una reversió no és un pla. Escriviu les dues llistes: què ha d'abastar la feina de manera privada i què ha d'abastar el runner passi el que passi.
Aquesta feina necessita accés privat, al capdavall?
Pregunteu, abans d'afegir el túnel, si l'etapa de compilació el necessita. Un agent de desplegament privat pot obtenir un artefacte aprovat i fer el desplegament, cosa que manté l'etapa general de compilació fora de la xarxa privada. Aquesta separació sol ser més barata que ensenyar a cada pas de compilació a encaminar-se per un túnel.
Trieu la frontera a partir del flux de treball, no del costum. Si la resposta és no, la resta d'aquesta pàgina és innecessària, i aquest és el millor resultat disponible.
L'estat que hereta la feina següent
Descriviu què hauria de ser cert abans de la feina, mentre té accés privat i després que acabi, inclosa la cancel·lació. L'estat final és el que més sovint es deixa implícit, i és el que hereta la feina següent. Escriviu-lo al costat del pipeline en lloc de deixar-lo en la memòria d'algú.
| 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 |
Un agent dedicat o d'un sol ús fa més fàcil fer complir aquestes fronteres. Un contenidor o un espai de noms només ajuda si la seva disposició de xarxa i de privilegis aïlla realment el canvi.
Atureu la connexió, no el programa
Feu servir el camí de finalització del pipeline per tancar la connexió que ha iniciat aquesta feina i eliminar-ne les credencials temporals. No aparelleu processos pel nom del programa en un amfitrió que altres feines utilitzen; atureu la connexió concreta. Les dues ordres següents són tota la neteja, i cap de les dues no depèn de trobar un procés.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
La finalització no és aïllament: un runner que mor conserva el túnel que ha obert, i un procés aturat a la força se salta el bloc sencer. Per això l'ordre de neteja tota sola no pot ser tot el disseny. Així és com falla a la pràctica: una feina de desplegament es cancel·la al pas de còpia, el bloc de finalització no s'executa mai, i la feina següent al mateix amfitrió comença amb un túnel viu i una ruta que apunta a una xarxa que no pot abastar. La fallada sembla un problema de 'DNS' a la compilació següent, hores després que hagi acabat la feina que la va causar.
Registreu el nom del perfil i el camí de la credencial a la sortida de la feina. Una ordre de desconnexió nua sense cap identificador és difícil d'auditar després. La línia de registre també és el que demostra que el bloc es va executar quan una investigació posterior ho demana.
Doneu a la feina un amfitrió que no faci servir ningú més
La infraestructura d'un sol ús elimina el problema de l'herència en lloc de gestionar-lo. Un agent nou per feina comença sense ruta, sense perfil i sense credencials de ningú altre, i la seva destrucció neteja el que la feina hagi deixat. Això costa més per compilació, i és el preu honest d'una frontera que no depèn del codi de neteja. Per a feines que toquen xarxes de producció, sol ser l'opció més barata un cop comptats els incidents.
On un runner compartit ha de quedar-se, proveu la fallada i la cancel·lació amb la mateixa cura que la còpia correcta. La prova hauria de mostrar què veuria la feina següent si aquesta s'hagués cancel·lat a mig camí. Una feina està feta quan el seu accés i el seu estat temporal han acabat, no quan l'ordre de còpia retorna zero.