Pekerjaan deployment terhubung, menyalin artefaknya, dan melaporkan keberhasilan. Tunnel yang dibukanya bisa masih hidup saat pekerjaan berikutnya dimulai, dan rute yang diubahnya milik seluruh host. Hasil build menjelaskan perintahnya, bukan keadaan yang ditinggalkannya. Perlakukan VPN sebagai sumber daya yang punya masa hidup, bukan sebagai satu baris di awal tahap.

Apa lagi yang berjalan di host ini

Node Jenkins dapat menjalankan beberapa eksekutor sekaligus, dan pekerjaan yang mengubah rute host, pengaturan resolver, atau koneksi seluruh sistem mengubahnya untuk semua orang. Apakah pekerjaan lain menyadarinya bergantung pada kebijakan rute dan penyaringan, bukan pada aturan umum tentang VPN. Akses repositori, akses artefak, dan kanal kendali adalah kebutuhan terpisah yang tetap diperlukan runner. Tambahkan semuanya ke daftar tujuan deployment sebelum memilih tunnel penuh.

Jika kanal kendali akan melintasi tunnel, desainnya harus menyatakannya dengan sengaja. Menemukannya saat rollback bukanlah rencana. Tuliskan kedua daftar: apa yang harus dicapai pekerjaan secara privat, dan apa yang harus dicapai runner bagaimanapun juga.

Apakah pekerjaan ini benar-benar butuh akses privat?

Tanyakan sebelum menambahkan tunnel apakah tahap build membutuhkannya. Agen deployment privat dapat mengambil artefak yang disetujui dan melakukan deployment, sehingga tahap build umum tetap di luar jaringan privat. Pemisahan itu biasanya lebih murah daripada mengajari setiap langkah build merutekan lewat tunnel.

Pilih batas dari alur kerja, bukan dari kebiasaan. Jika jawabannya tidak, sisa halaman ini tidak diperlukan, dan itulah hasil terbaik yang tersedia.

Keadaan yang diwarisi pekerjaan berikutnya

Jelaskan apa yang seharusnya benar sebelum pekerjaan, selama pekerjaan memegang akses privat, dan setelah berakhir, termasuk pembatalan. Keadaan akhir adalah yang paling sering dibiarkan implisit, dan itulah yang diwarisi pekerjaan berikutnya. Tuliskan di samping pipeline alih-alih meninggalkannya di ingatan seseorang.

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

Agen khusus atau sekali pakai membuat batas itu lebih mudah ditegakkan. Kontainer atau namespace hanya membantu jika pengaturan jaringan dan hak istimewanya benar-benar mengisolasi perubahan.

Hentikan koneksinya, bukan programnya

Gunakan jalur finalisasi pipeline untuk menutup koneksi yang dimulai pekerjaan ini dan menghapus kredensial sementaranya. Jangan mencocokkan proses berdasarkan nama program pada host yang dipakai pekerjaan lain; hentikan koneksi tertentu. Dua perintah di bawah adalah seluruh pembersihan, dan keduanya tidak bergantung pada menemukan proses.

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

Finalisasi bukan isolasi: runner yang mati menyimpan tunnel yang dibukanya, dan proses yang dihentikan paksa melewati blok itu sepenuhnya. Karena itu perintah pembersihan saja tidak bisa menjadi seluruh desain. Beginilah kegagalannya dalam praktik: pekerjaan deployment dibatalkan pada langkah penyalinan, blok finalisasi tidak pernah berjalan, dan pekerjaan berikutnya di host yang sama dimulai dengan tunnel hidup dan rute yang menunjuk ke jaringan yang tidak dapat dijangkau. Kegagalannya terlihat seperti masalah 'DNS' pada build berikutnya, berjam-jam setelah pekerjaan penyebabnya selesai.

Catat nama profil dan jalur kredensial di keluaran pekerjaan. Perintah pemutusan tanpa pengenal sulit diaudit belakangan. Baris log juga yang membuktikan blok itu berjalan ketika penyelidikan kemudian menanyakannya.

Beri pekerjaan host yang tidak dipakai orang lain

Infrastruktur sekali pakai menghapus masalah warisan alih-alih mengelolanya. Agen baru untuk setiap pekerjaan dimulai tanpa rute, tanpa profil, dan tanpa kredensial orang lain, dan penghancurannya membersihkan apa pun yang ditinggalkan pekerjaan. Itu lebih mahal per build, dan itulah harga jujur dari batas yang tidak bergantung pada kode pembersihan. Untuk pekerjaan yang menyentuh jaringan produksi, biasanya itu pilihan yang lebih murah setelah insiden dihitung.

Di tempat runner bersama harus tetap ada, uji kegagalan dan pembatalan seceermat penyalinan yang berhasil. Pengujian harus menunjukkan apa yang akan dilihat pekerjaan berikutnya jika pekerjaan ini dibatalkan di tengah jalan. Pekerjaan selesai ketika akses dan keadaan sementaranya telah berakhir, bukan ketika perintah salin mengembalikan nol.

Artikel terkait