Bir dağıtım işi bağlanır, yapıtını kopyalar ve başarı bildirir. Açtığı tünel, sonraki iş başladığında hâlâ ayakta olabilir ve değiştirdiği rota tüm ana makineye aittir. Bir derleme sonucu komutu tanımlar, geride bıraktığı durumu değil. VPN'i yaşam süresi olan bir kaynak olarak görün, bir aşamanın başındaki tek satır olarak değil.

Bu ana makinede başka neler çalışıyor

Bir Jenkins düğümü aynı anda birkaç yürütücü çalıştırabilir ve ana makinenin rotalarını, çözümleyici ayarlarını veya sistem geneli bir bağlantıyı değiştiren bir iş bunları herkes için değiştirir. Başka bir işin bunu fark edip etmemesi rota ve filtreleme politikasına bağlıdır, VPN'ler hakkındaki genel bir kurala değil. Depo erişimi, yapıt erişimi ve denetim kanalı runner'ın hâlâ ihtiyaç duyduğu ayrı gereksinimlerdir. Tam bir tünel seçmeden önce bunları dağıtım hedef listesine ekleyin.

Denetim kanalı tünelden geçecekse tasarım bunu bilinçli olarak söylemek zorundadır. Bunu bir geri alma sırasında keşfetmek plan değildir. İki listeyi yazın: işin özel olarak neye ulaşması gerektiği ve runner'ın ne olursa olsun neye ulaşması gerektiği.

Bu iş özel erişime hiç ihtiyaç duyuyor mu?

Tüneli eklemeden önce derleme aşamasının buna ihtiyacı olup olmadığını sorun. Özel bir dağıtım aracısı onaylanmış bir yapıtı alıp dağıtımı yapabilir; bu, genel derleme aşamasını özel ağın dışında tutar. Bu ayrım genellikle her derleme adımına tünelden geçmeyi öğretmekten daha ucuzdur.

Sınırı alışkanlıktan değil iş akışından seçin. Yanıt hayırsa bu sayfanın geri kalanı gereksizdir ve bu, mevcut en iyi sonuçtur.

Sonraki işin devraldığı durum

İşten önce, özel erişimi varken ve bittikten sonra, iptal dahil, neyin doğru olması gerektiğini tanımlayın. Son durum en sık dile getirilmeden bırakılan durumdur ve onu da sonraki iş devralır. Onu birinin belleğinde bırakmak yerine pipeline'ın yanına yazın.

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

Adanmış veya tek kullanımlık bir aracı bu sınırların uygulanmasını kolaylaştırır. Bir container veya ad alanı, yalnızca ağ ve yetki düzeni değişikliği gerçekten yalıtıyorsa yardımcı olur.

Programı değil bağlantıyı durdurun

Bu işin başlattığı bağlantıyı kapatmak ve geçici kimlik bilgilerini kaldırmak için pipeline'ın sonlandırma yolunu kullanın. Başka işlerin kullandığı bir ana makinede süreçleri program adına göre eşleştirmeyin; belirli bağlantıyı durdurun. Aşağıdaki iki komut temizliğin tamamıdır ve hiçbiri bir süreç bulmaya bağlı değildir.

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

Sonlandırma yalıtım değildir: ölen bir runner açtığı tüneli korur ve zorla durdurulan bir süreç bloğu tamamen atlar. Bu yüzden temizlik komutu tek başına tasarımın tamamı olamaz. Pratikte şöyle başarısız olur: bir dağıtım işi kopyalama adımında iptal edilir, sonlandırma bloğu hiç çalışmaz ve aynı ana makinedeki sonraki iş canlı bir tünelle ve ulaşamadığı bir ağa işaret eden bir rotayla başlar. Arıza, sonraki derlemede 'DNS' sorunu gibi görünür; buna yol açan iş bittikten saatler sonra.

Profil adını ve kimlik bilgisi yolunu iş çıktısına kaydedin. Tanımlayıcısı olmayan çıplak bir bağlantı kesme komutunun denetimi sonradan zordur. Günlük satırı da sonraki bir inceleme sorduğunda bloğun çalıştığını kanıtlayan şeydir.

İşe kimsenin kullanmadığı bir ana makine verin

Tek kullanımlık altyapı, devralma sorununu yönetmek yerine ortadan kaldırır. Her iş için yeni bir aracı rota, profil ve başkasının kimlik bilgisi olmadan başlar ve yok edilmesi işin bıraktığı her şeyi temizler. Bu, derleme başına daha pahalıdır ve temizlik koduna bağlı olmayan bir sınırın dürüst bedeli budur. Üretim ağlarına dokunan işler için, olaylar sayıldığında genellikle daha ucuz seçenektir.

Paylaşılan bir runner'ın kalması gereken yerde, hatayı ve iptali başarılı kopyalama kadar dikkatle test edin. Test, bu iş yarıda iptal edilseydi sonraki işin ne göreceğini göstermelidir. Bir iş, erişimi ve geçici durumu sona erdiğinde biter, kopyalama komutu sıfır döndürdüğünde değil.

İlgili makaleler