VPN CI runner-ისთვის: გადაურჩება თუ არა გვირაბი build-ს?
საერთო CI runner სამუშაოებს შორის ინახავს მარშრუტებსა და პროცესებს. დაგეგმეთ VPN-ის მდგომარეობები სამუშაომდე, მის დროს და შემდეგ, და გაასუფთავეთ მხოლოდ ის კავშირი, რომელიც სამუშაოს ეკუთვნის.
განთავსების სამუშაო უკავშირდება, აკოპირებს თავის არტეფაქტს და იტყობინება წარმატებაზე. მის მიერ გახსნილი გვირაბი შეიძლება ჯერ კიდევ აქტიური იყოს, როცა შემდეგი სამუშაო იწყება, ხოლო მის მიერ შეცვლილი მარშრუტი მთელ ჰოსტს ეკუთვნის. Build-ის შედეგი აღწერს ბრძანებას და არა იმ მდგომარეობას, რომელიც მან დატოვა. მოექეცით VPN-ს როგორც სიცოცხლის ხანგრძლივობის მქონე რესურსს და არა როგორც ერთ ხაზს ეტაპის დასაწყისში.
კიდევ რა მუშაობს ამ ჰოსტზე
Jenkins-ის კვანძს შეუძლია ერთდროულად რამდენიმე შემსრულებელი გაუშვას, ხოლო სამუშაო, რომელიც ცვლის ჰოსტის მარშრუტებს, resolver-ის პარამეტრებს ან სისტემურ კავშირს, ცვლის მათ ყველასთვის. შეამჩნევს თუ არა ამას სხვა სამუშაო, დამოკიდებულია მარშრუტისა და ფილტრაციის პოლიტიკაზე და არა VPN-ების შესახებ ზოგად წესზე. რეპოზიტორიაზე წვდომა, არტეფაქტებზე წვდომა და მართვის არხი ცალკეული მოთხოვნებია, რომლებიც runner-ს ჯერ კიდევ სჭირდება. დაამატეთ ისინი განთავსების დანიშნულებების სიაში, სანამ სრულ გვირაბს აირჩევთ.
თუ მართვის არხი გვირაბს გადაკვეთს, დიზაინმა ეს განზრახ უნდა თქვას. დაბრუნების დროს ამის აღმოჩენა გეგმა არ არის. ჩამოწერეთ ორი სია: რას უნდა მიაღწიოს სამუშაომ პირადად და რას უნდა მიაღწიოს runner-მა ყველა შემთხვევაში.
საერთოდ სჭირდება ამ სამუშაოს პირადი წვდომა?
ჰკითხეთ გვირაბის დამატებამდე, სჭირდება თუ არა build-ის ეტაპს. პირად განთავსების აგენტს შეუძლია დამტკიცებული არტეფაქტის მოტანა და განთავსების შესრულება, რაც ზოგად build-ის ეტაპს პირადი ქსელის გარეთ ინახავს. ეს გაყოფა ჩვეულებრივ იაფია, ვიდრე ყოველი build-ის ნაბიჯისთვის გვირაბით მარშრუტიზაციის სწავლება.
საზღვარი აირჩიეთ სამუშაო ნაკადიდან და არა ჩვევიდან. თუ პასუხი არის არა, ამ გვერდის დარჩენილი ნაწილი ზედმეტია და ეს არის საუკეთესო ხელმისაწვდომი შედეგი.
მდგომარეობა, რომელსაც შემდეგი სამუშაო მემკვიდრეობით იღებს
აღწერეთ, რა უნდა იყოს ჭეშმარიტი სამუშაომდე, პირადი წვდომის დროს და დასრულების შემდეგ, გაუქმების ჩათვლით. საბოლოო მდგომარეობა ყველაზე ხშირად რჩება გამოუთქმელი და სწორედ მას იღებს მემკვიდრეობით შემდეგი სამუშაო. ჩაწერეთ ის pipeline-ის გვერდით და ნუ დატოვებთ ვინმეს მეხსიერებაში.
| 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 |
გამოყოფილი ან ერთჯერადი აგენტი ამ საზღვრების აღსრულებას აადვილებს. კონტეინერი ან სახელთა სივრცე მხოლოდ მაშინ ეხმარება, როცა მისი ქსელური და უფლებრივი წყობა ნამდვილად აიზოლირებს ცვლილებას.
შეაჩერეთ კავშირი და არა პროგრამა
გამოიყენეთ pipeline-ის დასრულების გზა, რომ დახუროთ კავშირი, რომელიც ამ სამუშაომ გახსნა, და წაშალოთ მისი დროებითი სერთიფიკატები. ნუ შეადარებთ პროცესებს პროგრამის სახელით ჰოსტზე, რომელსაც სხვა სამუშაოები იყენებენ; შეაჩერეთ კონკრეტული კავშირი. ქვემოთ მოცემული ორი ბრძანება მთელი დასუფთავებაა და არც ერთი არ არის დამოკიდებული პროცესის პოვნაზე.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
დასრულება იზოლაცია არ არის: მკვდარი runner ინახავს გახსნილ გვირაბს, ხოლო ძალით გაჩერებული პროცესი მთლიანად გამოტოვებს ბლოკს. ამიტომ მხოლოდ დასუფთავების ბრძანება ვერ იქნება მთელი დიზაინი. აი როგორ ფუჭდება ეს პრაქტიკაში: განთავსების სამუშაო უქმდება კოპირების საფეხურზე, დასრულების ბლოკი არასოდეს ეშვება და იმავე ჰოსტზე შემდეგი სამუშაო იწყება ცოცხალი გვირაბითა და მარშრუტით, რომელიც იმ ქსელზე მიუთითებს, რომელსაც ვერ აღწევს. ხარვეზი შემდეგ build-ში 'DNS'-ის პრობლემას ჰგავს, საათების შემდეგ მას შემდეგ, რაც მისი გამომწვევი სამუშაო დასრულდა.
ჩაწერეთ პროფილის სახელი და სერთიფიკატის გზა სამუშაოს გამოსავალში. იდენტიფიკატორის გარეშე შიშველი გათიშვის ბრძანება მოგვიანებით რთულად აუდიტირებადია. ჟურნალის ხაზი ასევე ამტკიცებს, რომ ბლოკი მუშაობდა, როცა გვიანდელი გამოძიება იკითხავს.
მიეცით სამუშაოს ჰოსტი, რომელსაც სხვა არავინ იყენებს
ერთჯერადი ინფრასტრუქტურა მემკვიდრეობის პრობლემას მართვის ნაცვლად აშორებს. თითოეული სამუშაოსთვის ახალი აგენტი იწყებს მარშრუტის, პროფილისა და სხვისი სერთიფიკატების გარეშე, ხოლო მისი განადგურება ასუფთავებს ყველაფერს, რაც სამუშაომ დატოვა. ეს უფრო ძვირია თითო build-ზე და ეს არის იმ საზღვრის პატიოსანი ფასი, რომელიც დასუფთავების კოდზე არ არის დამოკიდებული. წარმოების ქსელებთან შემხები სამუშაოებისთვის ეს ჩვეულებრივ უფრო იაფი ვარიანტია, როცა ინციდენტები ჩაითვლება.
სადაც საერთო runner უნდა დარჩეს, შეამოწმეთ მარცხი და გაუქმება ისე ფრთხილად, როგორც წარმატებული კოპირება. ტესტმა უნდა აჩვენოს, რას დაინახავდა შემდეგი სამუშაო, თუ ეს შუა გზაზე გაუქმდებოდა. სამუშაო დასრულებულია მაშინ, როცა მისი წვდომა და დროებითი მდგომარეობა დასრულდა და არა მაშინ, როცა კოპირების ბრძანება ნულს აბრუნებს.