Kerja deployment menyambung, menyalin artifaknya dan melaporkan kejayaan. Tunnel yang dibukanya mungkin masih hidup apabila kerja seterusnya bermula, dan laluan yang diubahnya milik seluruh hos. Hasil build menerangkan arahan, bukan keadaan yang ditinggalkannya. Layan VPN sebagai sumber yang mempunyai jangka hayat, bukan sebagai satu baris di awal peringkat.

Apa lagi yang berjalan pada hos ini

Nod Jenkins boleh menjalankan beberapa pelaksana serentak, dan kerja yang mengubah laluan hos, tetapan penyelesai atau sambungan seluruh sistem mengubahnya untuk semua orang. Sama ada kerja lain menyedarinya bergantung pada dasar laluan dan penapisan, bukan pada peraturan umum tentang VPN. Akses repositori, akses artifak dan saluran kawalan ialah keperluan berasingan yang masih diperlukan runner. Tambahkan semuanya ke senarai destinasi deployment sebelum memilih tunnel penuh.

Jika saluran kawalan akan melintasi tunnel, reka bentuk mesti menyatakannya dengan sengaja. Menemukannya semasa pengunduran bukanlah pelan. Tulis kedua-dua senarai: apa yang mesti dicapai oleh kerja secara peribadi, dan apa yang mesti dicapai oleh runner walau apa pun.

Adakah kerja ini benar-benar memerlukan akses peribadi?

Tanya sebelum menambah tunnel sama ada peringkat build memerlukannya. Ejen deployment peribadi boleh mengambil artifak yang diluluskan dan melakukan deployment, yang mengekalkan peringkat build umum di luar rangkaian peribadi. Pemisahan itu biasanya lebih murah daripada mengajar setiap langkah build untuk menghala melalui tunnel.

Pilih sempadan daripada aliran kerja, bukan daripada kebiasaan. Jika jawapannya tidak, seluruh halaman ini tidak perlu, dan itulah hasil terbaik yang tersedia.

Keadaan yang diwarisi kerja seterusnya

Terangkan apa yang sepatutnya benar sebelum kerja, semasa ia memegang akses peribadi dan selepas ia tamat, termasuk pembatalan. Keadaan akhir ialah yang paling kerap dibiarkan tersirat, dan itulah yang diwarisi kerja seterusnya. Tuliskannya di sebelah pipeline dan bukan meninggalkannya dalam 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

Ejen khusus atau sekali guna menjadikan sempadan itu lebih mudah dikuatkuasakan. Kontena atau ruang nama hanya membantu jika susunan rangkaian dan keistimewaannya benar-benar mengasingkan perubahan itu.

Hentikan sambungan, bukan program

Gunakan laluan penyempurnaan pipeline untuk menutup sambungan yang dimulakan kerja ini dan membuang kelayakan sementaranya. Jangan padankan proses mengikut nama program pada hos yang digunakan kerja lain; hentikan sambungan tertentu itu. Dua arahan di bawah ialah seluruh pembersihan, dan kedua-duanya tidak bergantung pada mencari proses.

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

Penyempurnaan bukan pengasingan: runner yang mati menyimpan tunnel yang dibukanya, dan proses yang dihentikan secara paksa melangkau blok itu sepenuhnya. Itulah sebabnya arahan pembersihan sahaja tidak boleh menjadi seluruh reka bentuk. Begini cara ia gagal dalam praktik: kerja deployment dibatalkan pada langkah salinan, blok penyempurnaan tidak pernah berjalan, dan kerja seterusnya pada hos yang sama bermula dengan tunnel hidup dan laluan yang menunjuk ke rangkaian yang tidak dapat dicapainya. Kegagalan itu kelihatan seperti masalah 'DNS' dalam build seterusnya, berjam-jam selepas kerja yang menyebabkannya tamat.

Rekod nama profil dan laluan kelayakan dalam output kerja. Arahan putus tanpa pengecam sukar diaudit kemudian. Baris log juga yang membuktikan blok itu berjalan apabila siasatan kemudian bertanya.

Berikan kerja itu hos yang tidak digunakan orang lain

Infrastruktur sekali guna menghapuskan masalah pewarisan dan bukannya mengurusnya. Ejen baharu bagi setiap kerja bermula tanpa laluan, tanpa profil dan tanpa kelayakan orang lain, dan pemusnahannya membersihkan apa sahaja yang ditinggalkan kerja itu. Itu lebih mahal setiap build, dan itulah harga jujur bagi sempadan yang tidak bergantung pada kod pembersihan. Bagi kerja yang menyentuh rangkaian pengeluaran, ia biasanya pilihan yang lebih murah setelah insiden dikira.

Di tempat runner dikongsi harus kekal, uji kegagalan dan pembatalan sama teliti seperti penyalinan yang berjaya. Ujian itu patut menunjukkan apa yang akan dilihat kerja seterusnya jika kerja ini dibatalkan di pertengahan jalan. Kerja selesai apabila akses dan keadaan sementaranya telah berakhir, bukan apabila arahan salin mengembalikan sifar.

Artikel berkaitan