CI ரன்னர் VPN: tunnel build-ஐ விட நீடிக்குமா?
பகிரப்பட்ட CI ரன்னர் வேலைகளுக்கு இடையே வழித்தடங்களையும் செயல்முறைகளையும் தக்க வைத்துக் கொள்கிறது. VPN-இன் முன், இடை மற்றும் பின் நிலைகளைத் திட்டமிட்டு, வேலைக்குச் சொந்தமான இணைப்பை மட்டும் சுத்தம் செய்யுங்கள்.
வரிசைப்படுத்தல் வேலை ஒன்று இணைக்கிறது, அதன் artifact-ஐ நகலெடுக்கிறது, வெற்றியை அறிவிக்கிறது. அது திறந்த tunnel, அடுத்த வேலை தொடங்கும்போது இன்னும் இயங்கிக் கொண்டிருக்கலாம், அது மாற்றிய வழித்தடம் முழு host-க்கும் சொந்தமானது. build முடிவு கட்டளையை விவரிக்கிறது, அது விட்டுச் சென்ற நிலையை அல்ல. VPN-ஐ ஆயுட்காலம் கொண்ட வளமாகக் கருதுங்கள், ஒரு கட்டத்தின் தொடக்கத்தில் ஒரு வரியாக அல்ல.
இந்த host-இல் வேறு என்ன இயங்குகிறது
Jenkins node ஒரே நேரத்தில் பல executor-களை இயக்கலாம், host வழித்தடங்கள், resolver அமைப்புகள் அல்லது முழு அமைப்பின் இணைப்பை மாற்றும் வேலை அவற்றை அனைவருக்கும் மாற்றுகிறது. மற்றொரு வேலை அதைக் கவனிக்குமா என்பது வழித்தடம் மற்றும் வடிகட்டல் கொள்கையைப் பொறுத்தது, VPN பற்றிய பொதுவான விதியை அல்ல. களஞ்சிய அணுகல், artifact அணுகல் மற்றும் கட்டுப்பாட்டு channel ஆகியவை ரன்னருக்கு இன்னும் தேவையான தனித்தனி தேவைகள். முழு tunnel-ஐத் தேர்ந்தெடுப்பதற்கு முன் அவற்றை வரிசைப்படுத்தல் இலக்கு பட்டியலில் சேர்க்கவும்.
கட்டுப்பாட்டு channel tunnel வழியாகச் செல்ல வேண்டும் என்றால், வடிவமைப்பு அதை வேண்டுமென்றே கூற வேண்டும். rollback-இன் போது அதைக் கண்டுபிடிப்பது திட்டம் அல்ல. இரண்டு பட்டியல்களை எழுதுங்கள்: வேலை தனிப்பட்ட முறையில் அடைய வேண்டியது என்ன, ரன்னர் எப்படியும் அடைய வேண்டியது என்ன.
இந்த வேலைக்கு தனிப்பட்ட அணுகல் தேவையா?
tunnel-ஐச் சேர்ப்பதற்கு முன் build கட்டத்திற்கு அது தேவையா என்று கேளுங்கள். தனிப்பட்ட வரிசைப்படுத்தல் முகவர் ஒரு அங்கீகரிக்கப்பட்ட artifact-ஐப் பெற்று வரிசைப்படுத்தலைச் செய்ய முடியும், இது பொதுவான build கட்டத்தை தனிப்பட்ட வலையமைப்புக்கு வெளியே வைத்திருக்கிறது. அந்தப் பிரிவு, ஒவ்வொரு build படிக்கும் tunnel வழியாகச் செல்லக் கற்பிப்பதை விட பொதுவாக மலிவானது.
எல்லையைப் பழக்கத்திலிருந்து அல்ல, பணிப்பாய்விலிருந்து தேர்ந்தெடுங்கள். பதில் இல்லை என்றால், இந்தப் பக்கத்தின் மீதி தேவையற்றது, அதுவே கிடைக்கக்கூடிய சிறந்த முடிவு.
அடுத்த வேலை மரபுரிமையாகப் பெறும் நிலை
வேலைக்கு முன், அது தனிப்பட்ட அணுகலைக் கொண்டிருக்கும்போது, மற்றும் அது முடிந்த பிறகு, ரத்து உட்பட, எது உண்மையாக இருக்க வேண்டும் என்பதை விவரிக்கவும். முடிவு நிலையே பெரும்பாலும் சொல்லப்படாமல் விடப்படுகிறது, அதுவே அடுத்த வேலை மரபுரிமையாகப் பெறுகிறது. அதை ஒருவரின் நினைவில் விடாமல் 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 |
அர்ப்பணிக்கப்பட்ட அல்லது ஒரு-முறை முகவர் அந்த எல்லைகளை அமல்படுத்த எளிதாக்குகிறது. Container அல்லது namespace அதன் வலையமைப்பு மற்றும் சிறப்புரிமை ஏற்பாடு மாற்றத்தை உண்மையில் தனிமைப்படுத்தினால் மட்டுமே உதவும்.
நிரலை அல்ல, இணைப்பை நிறுத்துங்கள்
இந்த வேலை தொடங்கிய இணைப்பை மூடவும் அதன் தற்காலிக சான்றுகளை அகற்றவும் pipeline-இன் நிறைவு பாதையைப் பயன்படுத்துங்கள். மற்ற வேலைகள் பயன்படுத்தும் host-இல் நிரல் பெயரால் செயல்முறைகளைப் பொருத்த வேண்டாம்; குறிப்பிட்ட இணைப்பை நிறுத்துங்கள். கீழே உள்ள இரண்டு கட்டளைகளே முழு சுத்தமும், எதுவும் ஒரு செயல்முறையைக் கண்டுபிடிப்பதைச் சார்ந்திருக்கவில்லை.
vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"
நிறைவு தனிமைப்படுத்தல் அல்ல: இறக்கும் ரன்னர் தான் திறந்த tunnel-ஐ வைத்திருக்கும், கட்டாயமாக நிறுத்தப்படும் செயல்முறை அந்தத் தொகுதியை முழுவதுமாகத் தவிர்க்கிறது. அதனால்தான் சுத்தம் செய்யும் கட்டளை மட்டும் முழு வடிவமைப்பாக இருக்க முடியாது. நடைமுறையில் இது இப்படித் தோல்வியடைகிறது: ஒரு வரிசைப்படுத்தல் வேலை நகலெடுக்கும் படியில் ரத்து செய்யப்படுகிறது, நிறைவுத் தொகுதி ஒருபோதும் இயங்காது, அதே host-இல் அடுத்த வேலை ஒரு உயிருள்ள tunnel-உடனும், அது அடைய முடியாத வலையமைப்பை நோக்கும் வழித்தடத்துடனும் தொடங்குகிறது. தோல்வி அடுத்த build-இல் 'DNS' சிக்கலாகத் தெரிகிறது, அதை ஏற்படுத்திய வேலை முடிந்து பல மணி நேரத்திற்குப் பிறகு.
profile பெயரையும் சான்று பாதையையும் வேலையின் வெளியீட்டில் பதிவு செய்யுங்கள். அடையாளம் இல்லாத வெறும் துண்டிப்புக் கட்டளை பின்னர் தணிக்கை செய்வது கடினம். பின்னர் விசாரணை கேட்கும்போது தொகுதி இயங்கியதை நிரூபிப்பதும் log வரியே.
வேறு யாரும் பயன்படுத்தாத host-ஐ வேலைக்குக் கொடுங்கள்
ஒரு-முறை உள்கட்டமைப்பு மரபுரிமைச் சிக்கலை நிர்வகிப்பதற்குப் பதிலாக அகற்றுகிறது. ஒவ்வொரு வேலைக்கும் புதிய முகவர் வழித்தடமும், profile-ம், மற்றவரின் சான்றும் இல்லாமல் தொடங்குகிறது, அதன் அழிவு வேலை விட்டதைச் சுத்தம் செய்கிறது. இது ஒவ்வொரு build-க்கும் அதிகம் செலவாகும், சுத்தம் செய்யும் குறியீட்டைச் சாராத எல்லையின் நேர்மையான விலை அதுவே. உற்பத்தி வலையமைப்புகளைத் தொடும் வேலைகளுக்கு, சம்பவங்களை எண்ணியபின் இது பொதுவாக மலிவான தேர்வு.
பகிரப்பட்ட ரன்னர் இருக்க வேண்டிய இடத்தில், தோல்வியையும் ரத்தையும் வெற்றிகரமான நகலெடுப்பைப் போலவே கவனமாகச் சோதியுங்கள். இது பாதியில் ரத்து செய்யப்பட்டால் அடுத்த வேலை எதைப் பார்க்கும் என்பதைச் சோதனை காட்ட வேண்டும். வேலை முடிவடைவது அதன் அணுகலும் தற்காலிக நிலையும் முடிந்தபோதே, நகலெடுக்கும் கட்டளை பூஜ்ஜியத்தைத் திருப்பித் தரும் போது அல்ல.