செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

எங்கள் மேம்பாட்டுக் குழுக்களில் ஒன்றின் குழுத் தலைவர், முந்தைய நாள் கண்டெய்னரைஸ் செய்யப்பட்ட அவர்களின் புதிய பயன்பாட்டைச் சோதிக்கும்படி எங்களிடம் கேட்டபோது இது தொடங்கியது. நான் அதை இடுகையிட்டேன். சுமார் 20 நிமிடங்களுக்குப் பிறகு, விண்ணப்பத்தைப் புதுப்பிக்க கோரிக்கை வந்தது, ஏனெனில் அங்கு மிகவும் அவசியமான ஒன்று சேர்க்கப்பட்டுள்ளது. புதுப்பித்தேன். இன்னும் இரண்டு மணி நேரம் கழித்து... சரி, அடுத்து என்ன நடக்க ஆரம்பித்தது என்று உங்களால் யூகிக்க முடியும்...

நான் ஒப்புக்கொள்ள வேண்டும், நான் மிகவும் சோம்பேறியாக இருக்கிறேன் (இதை நான் முன்பே ஒப்புக்கொண்டேன் அல்லவா? இல்லை?), மற்றும் டீம் லீட்களுக்கு ஜென்கின்ஸ் அணுகல் உள்ளது, அதில் எங்களிடம் அனைத்து CI/CD உள்ளது, நான் நினைத்தேன்: அவரைப் பயன்படுத்தட்டும் அவர் விரும்பும் அளவுக்கு! எனக்கு ஒரு நகைச்சுவை நினைவுக்கு வந்தது: ஒரு மனிதனுக்கு ஒரு மீன் கொடுங்கள், அவர் ஒரு நாள் சாப்பிடுவார்; ஒரு நபரை ஃபெட் என்று அழைக்கவும், அவர் வாழ்நாள் முழுவதும் உணவளிக்கப்படுவார். மற்றும் சென்றார் வேலையில் தந்திரங்களை விளையாடுங்கள், இது வெற்றிகரமாக கட்டமைக்கப்பட்ட எந்தவொரு பதிப்பின் பயன்பாட்டையும் கொண்ட ஒரு கொள்கலனை குபேரில் வரிசைப்படுத்தவும் மற்றும் அதற்கு எந்த மதிப்புகளையும் மாற்றவும் முடியும் ENV (என் தாத்தா, ஒரு தத்துவவியலாளர், ஒரு ஆங்கில ஆசிரியர், இப்போது அவரது கோவிலில் விரலைச் சுழற்றி, இந்த வாக்கியத்தைப் படித்த பிறகு என்னை மிகவும் வெளிப்படையாகப் பார்ப்பார்).

எனவே, நான் எப்படி கற்றுக்கொண்டேன் என்பதை இந்த குறிப்பில் கூறுவேன்:

  1. ஜென்கின்ஸ் வேலைகளை வேலையில் இருந்தோ அல்லது பிற வேலைகளில் இருந்தோ மாறும் வகையில் புதுப்பிக்கவும்;
  2. ஜென்கின்ஸ் முகவர் நிறுவப்பட்ட ஒரு முனையிலிருந்து கிளவுட் கன்சோலுடன் (கிளவுட் ஷெல்) இணைக்கவும்;
  3. Google Kubernetes இன்ஜினில் பணிச்சுமையை வரிசைப்படுத்தவும்.


உண்மையில், நான், நிச்சயமாக, சற்றே நேர்மையற்றவன். கூகிள் கிளவுட்டில் உள்ள உள்கட்டமைப்பின் ஒரு பகுதியையாவது உங்களிடம் வைத்திருக்கிறீர்கள் என்று கருதப்படுகிறது, எனவே, நீங்கள் அதன் பயனர் மற்றும், நிச்சயமாக, உங்களிடம் GCP கணக்கு உள்ளது. ஆனால் இந்தக் குறிப்பு அதுவல்ல.

இது எனது அடுத்த ஏமாற்று தாள். இதுபோன்ற குறிப்புகளை ஒரு விஷயத்தில் மட்டுமே எழுத விரும்புகிறேன்: நான் ஒரு சிக்கலை எதிர்கொண்டேன், அதை எவ்வாறு தீர்ப்பது என்று எனக்குத் தெரியவில்லை, தீர்வு தயாராக இல்லை, எனவே நான் அதை பகுதிகளாக கூகிள் செய்து இறுதியில் சிக்கலைத் தீர்த்தேன். எதிர்காலத்தில், நான் அதை எப்படி செய்தேன் என்பதை மறந்துவிட்டால், எல்லாவற்றையும் மீண்டும் துண்டு துண்டாக கூகிள் செய்து ஒன்றாக தொகுக்க வேண்டியதில்லை, இதுபோன்ற ஏமாற்றுத் தாள்களை நானே எழுதுகிறேன்.

நிபந்தனைகள்: 1. குறிப்பு "எனக்காக", பாத்திரத்திற்காக எழுதப்பட்டது சிறந்த நடைமுறை பொருந்தாது. கருத்துகளில் உள்ள "இவ்வாறு செய்தால் நன்றாக இருந்திருக்கும்" விருப்பங்களைப் படிப்பதில் மகிழ்ச்சி அடைகிறேன்.
2. குறிப்பின் பயன்படுத்தப்பட்ட பகுதி உப்பாக கருதப்பட்டால், எனது முந்தைய குறிப்புகளைப் போலவே இதுவும் ஒரு பலவீனமான உப்பு கரைசல்.

Jenkins இல் வேலை அமைப்புகளை மாறும் வகையில் புதுப்பிக்கிறது

உங்கள் கேள்வியை நான் எதிர்பார்க்கிறேன்: டைனமிக் வேலை புதுப்பிப்புக்கும் இதற்கும் என்ன சம்பந்தம்? சரம் அளவுருவின் மதிப்பை கைமுறையாக உள்ளிட்டு, நீங்கள் செல்லுங்கள்!

நான் பதிலளிக்கிறேன்: நான் மிகவும் சோம்பேறி, அவர்கள் புகார் செய்யும்போது எனக்கு அது பிடிக்கவில்லை: மிஷா, வரிசைப்படுத்தல் செயலிழக்கிறது, எல்லாம் போய்விட்டது! நீங்கள் பார்க்கத் தொடங்குகிறீர்கள், மேலும் சில பணி வெளியீட்டு அளவுருவின் மதிப்பில் எழுத்துப் பிழை உள்ளது. எனவே, எல்லாவற்றையும் முடிந்தவரை திறமையாக செய்ய விரும்புகிறேன். தேர்வு செய்ய வேண்டிய மதிப்புகளின் பட்டியலைக் கொடுப்பதன் மூலம் பயனர் நேரடியாக தரவை உள்ளிடுவதைத் தடுக்க முடிந்தால், நான் தேர்வை ஒழுங்கமைக்கிறேன்.

திட்டம் இதுதான்: நாங்கள் ஜென்கின்ஸ்ஸில் ஒரு வேலையை உருவாக்குகிறோம், அதில், தொடங்குவதற்கு முன், பட்டியலிலிருந்து ஒரு பதிப்பைத் தேர்ந்தெடுக்கலாம், கொள்கலனுக்கு அனுப்பப்பட்ட அளவுருக்களுக்கான மதிப்புகளைக் குறிப்பிடலாம். ENV, பின்னர் அது கொள்கலனை சேகரித்து கொள்கலன் பதிவேட்டில் தள்ளுகிறது. பின்னர் அங்கிருந்து கன்டெய்னர் க்யூபரில் ஏவப்படுகிறது பணிச்சுமை வேலையில் குறிப்பிடப்பட்ட அளவுருக்களுடன்.

ஜென்கின்ஸில் ஒரு வேலையை உருவாக்கி அமைக்கும் செயல்முறையை நாங்கள் கருத்தில் கொள்ள மாட்டோம், இது தலைப்புக்கு அப்பாற்பட்டது. பணி தயாராக உள்ளது என்று வைத்துக்கொள்வோம். பதிப்புகளுடன் புதுப்பிக்கப்பட்ட பட்டியலைச் செயல்படுத்த, எங்களுக்கு இரண்டு விஷயங்கள் தேவை: ஏற்கனவே உள்ள மூலப் பட்டியல், priori சரியான பதிப்பு எண்கள் மற்றும் ஒரு மாறி தேர்வு அளவுரு பணியில். எங்கள் எடுத்துக்காட்டில், மாறிக்கு பெயரிடலாம் BUILD_VERSION, நாங்கள் அதை விரிவாக வாழ மாட்டோம். ஆனால் மூலப் பட்டியலைக் கூர்ந்து கவனிப்போம்.

அவ்வளவு விருப்பங்கள் இல்லை. இரண்டு விஷயங்கள் உடனடியாக நினைவுக்கு வந்தன:

  • ஜென்கின்ஸ் அதன் பயனர்களுக்கு வழங்கும் தொலைநிலை அணுகல் API ஐப் பயன்படுத்தவும்;
  • ரிமோட் ரெபோசிட்டரி கோப்புறையின் உள்ளடக்கங்களைக் கோரவும் (எங்கள் விஷயத்தில் இது JFrog ஆர்டிஃபாக்டரி, இது முக்கியமல்ல).

ஜென்கின்ஸ் ரிமோட் அணுகல் API

நிறுவப்பட்ட சிறந்த பாரம்பரியத்தின் படி, நீண்ட விளக்கங்களைத் தவிர்க்க விரும்புகிறேன்.
முதல் பத்தியின் ஒரு பகுதியின் இலவச மொழிபெயர்ப்பை மட்டுமே நான் அனுமதிக்கிறேன் API ஆவணத்தின் முதல் பக்கம்:

ஜென்கின்ஸ் அதன் செயல்பாட்டிற்கான தொலை இயந்திரம் படிக்கக்கூடிய அணுகலுக்கான API ஐ வழங்குகிறது. <…> ரிமோட் அணுகல் REST போன்ற பாணியில் வழங்கப்படுகிறது. இதன் பொருள் அனைத்து அம்சங்களுக்கும் ஒற்றை நுழைவு புள்ளி இல்லை, மாறாக " போன்ற URL.../api/", எங்கே "..." என்பது API திறன்கள் பயன்படுத்தப்படும் பொருள்.

வேறு வார்த்தைகளில் கூறுவதானால், நாம் தற்போது பேசும் வரிசைப்படுத்தல் பணி கிடைக்கும் என்றால் http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, பின்னர் இந்த பணிக்கான API விசில்கள் இங்கு கிடைக்கும் http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

அடுத்து, வெளியீட்டை எந்த வடிவத்தில் பெறுவது என்பது எங்களுக்குத் தேர்வு. XML இல் கவனம் செலுத்துவோம், ஏனெனில் API இந்த விஷயத்தில் மட்டுமே வடிகட்ட அனுமதிக்கிறது.

அனைத்து வேலைகளின் பட்டியலைப் பெற முயற்சிப்போம். நாங்கள் சட்டசபை பெயரில் மட்டுமே ஆர்வமாக உள்ளோம் (காட்சி பெயர்) மற்றும் அதன் முடிவு (விளைவாக):

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]

அது வேலை செய்ததா?

இப்போது முடிவுடன் முடிவடையும் ரன்களை மட்டும் வடிகட்டுவோம் வெற்றி. வாதத்தைப் பயன்படுத்துவோம் &விலக்கு மற்றும் ஒரு அளவுருவாக நாம் சமமாக இல்லாத மதிப்புக்கான பாதையை அனுப்புவோம் வெற்றி. ஆம் ஆம். இரட்டை எதிர்மறை என்பது ஒரு அறிக்கை. எங்களுக்கு ஆர்வமில்லாத அனைத்தையும் நாங்கள் விலக்குகிறோம்:

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!='SUCCESS']

வெற்றிகரமான பட்டியலின் ஸ்கிரீன்ஷாட்
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

சரி, வேடிக்கைக்காக, வடிகட்டி நம்மை ஏமாற்றவில்லை என்பதை உறுதி செய்வோம் (வடிப்பான்கள் ஒருபோதும் பொய் சொல்லாது!) மற்றும் "தோல்வியுற்ற" பட்டியலைக் காண்பிப்போம்:

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']

வெற்றிபெறாதவர்களின் பட்டியலின் ஸ்கிரீன்ஷாட்
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

ரிமோட் சர்வரில் உள்ள கோப்புறையிலிருந்து பதிப்புகளின் பட்டியல்

பதிப்புகளின் பட்டியலைப் பெற இரண்டாவது வழி உள்ளது. ஜென்கின்ஸ் API ஐ அணுகுவதை விட எனக்கு இது மிகவும் பிடிக்கும். சரி, ஏனெனில் பயன்பாடு வெற்றிகரமாக கட்டமைக்கப்பட்டிருந்தால், அது தொகுக்கப்பட்டு பொருத்தமான கோப்புறையில் களஞ்சியத்தில் வைக்கப்பட்டுள்ளது என்று அர்த்தம். ஒரு களஞ்சியம் என்பது பயன்பாடுகளின் வேலை செய்யும் பதிப்புகளின் இயல்புநிலை சேமிப்பகமாகும். பிடிக்கும். சரி, சேமிப்பகத்தில் என்ன பதிப்புகள் உள்ளன என்று அவரிடம் கேட்போம். ரிமோட் கோப்புறையை சுருட்டி, கிரேப் செய்து, ஆக் செய்வோம். ஒன்லைனரில் யாராவது ஆர்வமாக இருந்தால், அது ஸ்பாய்லரின் கீழ் உள்ளது.

ஒரு வரி கட்டளை
தயவுசெய்து இரண்டு விஷயங்களைக் கவனியுங்கள்: இணைப்பு விவரங்களை தலைப்பில் அனுப்புகிறேன், கோப்புறையிலிருந்து எல்லா பதிப்புகளும் எனக்குத் தேவையில்லை, மேலும் ஒரு மாதத்திற்குள் உருவாக்கப்பட்டவற்றை மட்டுமே தேர்ந்தெடுக்கிறேன். உங்கள் உண்மைகள் மற்றும் தேவைகளுக்கு ஏற்ப கட்டளையைத் திருத்தவும்:

curl -H "X-JFrog-Art-Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

Jenkins இல் வேலைகள் மற்றும் வேலை உள்ளமைவு கோப்பை அமைத்தல்

பதிப்புகளின் பட்டியலின் மூலத்தை நாங்கள் கண்டுபிடித்தோம். இதன் விளைவாக பட்டியலை இப்போது பணியில் இணைப்போம். என்னைப் பொறுத்தவரை, பயன்பாட்டு உருவாக்கப் பணியில் ஒரு படியைச் சேர்ப்பதே தெளிவான தீர்வாக இருந்தது. முடிவு "வெற்றி" என்றால் செயல்படுத்தப்படும் படி.

சட்டசபை பணி அமைப்புகளைத் திறந்து, கீழே உருட்டவும். பொத்தான்களைக் கிளிக் செய்யவும்: கட்டமைக்கும் படி -> நிபந்தனை படி (ஒற்றை) சேர்க்கவும். படி அமைப்புகளில், நிபந்தனையைத் தேர்ந்தெடுக்கவும் தற்போதைய உருவாக்க நிலை, மதிப்பை அமைக்கவும் வெற்றி, வெற்றியடைந்தால் செய்ய வேண்டிய செயல் ஷெல் கட்டளையை இயக்கவும்.

இப்போது வேடிக்கையான பகுதி. ஜென்கின்ஸ் வேலை அமைப்புகளை கோப்புகளில் சேமிக்கிறார். எக்ஸ்எம்எல் வடிவத்தில். வழியில் http://путь-до-задания/config.xml அதன்படி, நீங்கள் உள்ளமைவு கோப்பைப் பதிவிறக்கம் செய்து, தேவையானதைத் திருத்தலாம் மற்றும் உங்களுக்கு கிடைத்த இடத்தில் மீண்டும் வைக்கலாம்.

பதிப்புகளின் பட்டியலுக்கு ஒரு அளவுருவை உருவாக்குவோம் என்பதை மேலே ஒப்புக்கொண்டதை நினைவில் கொள்க BUILD_VERSION?

உள்ளமைவு கோப்பை பதிவிறக்கம் செய்து அதன் உள்ளே பார்க்கலாம். அளவுரு சரியான இடத்தில் உள்ளதா மற்றும் விரும்பிய வகையைச் சேர்ந்ததா என்பதை உறுதிப்படுத்திக் கொள்ள வேண்டும்.

ஸ்பாய்லரின் கீழ் ஸ்கிரீன்ஷாட்.

உங்கள் config.xml துண்டு ஒரே மாதிரியாக இருக்க வேண்டும். தேர்வுகள் உறுப்பின் உள்ளடக்கங்கள் இன்னும் காணவில்லை என்பதைத் தவிர
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

நீ சொல்வது உறுதியா? அவ்வளவுதான், பில்ட் வெற்றியடைந்தால் செயல்படுத்தப்படும் ஸ்கிரிப்ட் எழுதுவோம்.
ஸ்கிரிப்ட் பதிப்புகளின் பட்டியலைப் பெறும், உள்ளமைவு கோப்பைப் பதிவிறக்கி, பதிப்புகளின் பட்டியலை நமக்குத் தேவையான இடத்தில் எழுதி, பின்னர் அதை மீண்டும் வைக்கும். ஆம். அது சரி. ஏற்கனவே பதிப்புகளின் பட்டியல் இருக்கும் இடத்தில் XML இல் பதிப்புகளின் பட்டியலை எழுதவும் (எதிர்காலத்தில், ஸ்கிரிப்ட்டின் முதல் வெளியீட்டிற்குப் பிறகு இருக்கும்). உலகில் வழக்கமான வெளிப்பாடுகளுக்கு இன்னும் கடுமையான ரசிகர்கள் இருக்கிறார்கள் என்பது எனக்குத் தெரியும். நான் அவர்களுக்கு சொந்தமானவன் அல்ல. நிறுவவும் xmlstarler கட்டமைப்பு திருத்தப்படும் இயந்திரத்திற்கு. sed ஐப் பயன்படுத்தி XML ஐத் திருத்துவதைத் தவிர்க்க இது அவ்வளவு பெரிய விலை அல்ல என்று எனக்குத் தோன்றுகிறது.

ஸ்பாய்லரின் கீழ், மேலே உள்ள வரிசையை முழுமையாகச் செய்யும் குறியீட்டை நான் முன்வைக்கிறேன்.

ரிமோட் சர்வரில் உள்ள கோப்புறையிலிருந்து உள்ளமைவுக்கு பதிப்புகளின் பட்டியலை எழுதவும்

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Читаем в массив список версий из репозитория
readarray -t vers < <( curl -H "X-JFrog-Art-Api:Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

ஜென்கின்ஸிடமிருந்து பதிப்புகளைப் பெறுவதற்கான விருப்பத்தை நீங்கள் விரும்பினால், நீங்கள் என்னைப் போலவே சோம்பேறியாக இருந்தால், ஸ்பாய்லரின் கீழ் அதே குறியீடு உள்ளது, ஆனால் ஜென்கின்ஸ் ஒரு பட்டியல்:

ஜென்கின்ஸ் முதல் கட்டமைப்பு வரையிலான பதிப்புகளின் பட்டியலை எழுதவும்
இதை மட்டும் நினைவில் கொள்ளுங்கள்: எனது சட்டசபை பெயர் வரிசை எண் மற்றும் ஒரு பெருங்குடலால் பிரிக்கப்பட்ட பதிப்பு எண்ணைக் கொண்டுள்ளது. அதன்படி, awk தேவையற்ற பகுதியை வெட்டுகிறது. உங்களுக்காக, உங்கள் தேவைகளுக்கு ஏற்ப இந்த வரியை மாற்றவும்.

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Пишем в файл список версий из Jenkins
curl -g -X GET -u username:apiKey 'http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!=%22SUCCESS%22]&pretty=true' -o builds.xml

############## Читаем в массив список версий из XML
readarray vers < <(xmlstarlet sel -t -v "freeStyleProject/allBuild/displayName" builds.xml | awk -F":" '{print $2}')

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

கோட்பாட்டில், மேலே உள்ள எடுத்துக்காட்டுகளின் அடிப்படையில் எழுதப்பட்ட குறியீட்டை நீங்கள் சோதித்திருந்தால், வரிசைப்படுத்தல் பணியில் நீங்கள் ஏற்கனவே பதிப்புகளுடன் கீழ்தோன்றும் பட்டியலை வைத்திருக்க வேண்டும். இது ஸ்பாய்லரின் கீழ் உள்ள ஸ்கிரீன்ஷாட்டில் உள்ளதைப் போன்றது.

சரியாக முடிக்கப்பட்ட பதிப்புகளின் பட்டியல்
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

எல்லாம் வேலை செய்தால், ஸ்கிரிப்டை நகலெடுத்து ஒட்டவும் ஷெல் கட்டளையை இயக்கவும் மற்றும் மாற்றங்களைச் சேமிக்கவும்.

கிளவுட் ஷெல்லுடன் இணைக்கிறது

எங்களிடம் கொள்கலன்களில் சேகரிப்பான்கள் உள்ளன. எங்கள் பயன்பாட்டு விநியோக கருவி மற்றும் உள்ளமைவு மேலாளராக அன்சிபிளைப் பயன்படுத்துகிறோம். அதன்படி, கொள்கலன்களை உருவாக்கும்போது, ​​​​மூன்று விருப்பங்கள் நினைவுக்கு வருகின்றன: டோக்கரில் டோக்கரை நிறுவவும், அன்சிபிள் இயங்கும் இயந்திரத்தில் டோக்கரை நிறுவவும் அல்லது கிளவுட் கன்சோலில் கொள்கலன்களை உருவாக்கவும். இந்தக் கட்டுரையில் ஜென்கின்களுக்கான செருகுநிரல்களைப் பற்றி அமைதியாக இருக்க ஒப்புக்கொண்டோம். நினைவிருக்கிறதா?

நான் முடிவு செய்தேன்: சரி, "பெட்டிக்கு வெளியே" கொள்கலன்களை கிளவுட் கன்சோலில் சேகரிக்க முடியும் என்பதால், ஏன் கவலைப்பட வேண்டும்? அதை சுத்தமாக வைத்திருங்கள், இல்லையா? கிளவுட் கன்சோலில் ஜென்கின்ஸ் கன்டெய்னர்களை சேகரித்து, அங்கிருந்து க்யூபரில் தொடங்க விரும்புகிறேன். மேலும், கூகிள் அதன் உள்கட்டமைப்பிற்குள் மிகவும் பணக்கார சேனல்களைக் கொண்டுள்ளது, இது வரிசைப்படுத்தலின் வேகத்தில் நன்மை பயக்கும்.

கிளவுட் கன்சோலுடன் இணைக்க, உங்களுக்கு இரண்டு விஷயங்கள் தேவை: gCloud மற்றும் அணுகல் உரிமைகள் Google Cloud API இதே இணைப்பு செய்யப்படும் VM உதாரணத்திற்கு.

கூகுள் மேகக்கணியில் இருந்து இணைக்கத் திட்டமிடுபவர்களுக்கு
Google அதன் சேவைகளில் ஊடாடும் அங்கீகாரத்தை முடக்குவதற்கான வாய்ப்பை அனுமதிக்கிறது. காபி இயந்திரம் *நிக்ஸ் இயங்கிக் கொண்டிருந்தாலும், கன்சோலைக் கொண்டிருந்தாலும், கன்சோலுடன் இணைக்க இது உங்களை அனுமதிக்கும்.

இந்த குறிப்பின் கட்டமைப்பிற்குள் இந்த சிக்கலை இன்னும் விரிவாக மறைக்க வேண்டிய அவசியம் இருந்தால், கருத்துகளில் எழுதுங்கள். போதுமான வாக்குகளைப் பெற்றால், இந்தத் தலைப்பில் ஒரு புதுப்பிப்பை எழுதுவேன்.

இணைய இடைமுகம் மூலம் உரிமைகளை வழங்குவதற்கான எளிதான வழி.

  1. கிளவுட் கன்சோலுடன் நீங்கள் இணைக்கும் VM நிகழ்வை நிறுத்தவும்.
  2. நிகழ்வு விவரங்களைத் திறந்து கிளிக் செய்யவும் திருத்தும்.
  3. பக்கத்தின் மிகக் கீழே, நிகழ்வு அணுகல் நோக்கத்தைத் தேர்ந்தெடுக்கவும் அனைத்து Cloud APIகளுக்கான முழு அணுகல்.

    ஸ்கிரீன்ஷாட்
    செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

  4. உங்கள் மாற்றங்களைச் சேமித்து, நிகழ்வைத் தொடங்கவும்.

VM ஏற்றப்பட்டதும், SSH வழியாக அதனுடன் இணைக்கவும் மற்றும் இணைப்பு பிழையின்றி ஏற்படுவதை உறுதிசெய்யவும். கட்டளையைப் பயன்படுத்தவும்:

gcloud alpha cloud-shell ssh

ஒரு வெற்றிகரமான இணைப்பு இது போல் தெரிகிறது
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

GKE க்கு வரிசைப்படுத்தவும்

IaC (Infrastructure as a Code) க்கு முற்றிலும் மாறுவதற்கு சாத்தியமான எல்லா வழிகளிலும் நாங்கள் பாடுபடுவதால், எங்கள் டோக்கர் கோப்புகள் Git இல் சேமிக்கப்படுகின்றன. இது ஒரு புறம். மேலும் kubernetes இல் வரிசைப்படுத்தல் ஒரு yaml கோப்பால் விவரிக்கப்படுகிறது, இது இந்த பணியால் மட்டுமே பயன்படுத்தப்படுகிறது, இது குறியீடு போன்றது. இது மறுபக்கத்திலிருந்து. பொதுவாக, திட்டம் இதுதான்:

  1. மாறிகளின் மதிப்புகளை நாங்கள் எடுத்துக்கொள்கிறோம் BUILD_VERSION மற்றும், விருப்பமாக, கடந்து செல்லும் மாறிகளின் மதிப்புகள் ENV.
  2. Git இலிருந்து dockerfile ஐப் பதிவிறக்கவும்.
  3. வரிசைப்படுத்துவதற்கு yaml ஐ உருவாக்கவும்.
  4. இந்த இரண்டு கோப்புகளையும் scp வழியாக கிளவுட் கன்சோலில் பதிவேற்றுகிறோம்.
  5. நாங்கள் அங்கு ஒரு கொள்கலனை உருவாக்கி அதை கொள்கலன் பதிவேட்டில் தள்ளுகிறோம்
  6. சுமை வரிசைப்படுத்தல் கோப்பை க்யூபருக்குப் பயன்படுத்துகிறோம்.

இன்னும் குறிப்பிட்டதாக இருக்கட்டும். ஒருமுறை நாங்கள் பேச ஆரம்பித்தோம் ENV, பின்னர் நாம் இரண்டு அளவுருக்களின் மதிப்புகளை அனுப்ப வேண்டும் என்று வைத்துக்கொள்வோம்: பரம் 1 и பரம் 2. வரிசைப்படுத்துவதற்காக அவர்களின் பணியைச் சேர்க்கிறோம், வகை - சரம் அளவுரு.

ஸ்கிரீன்ஷாட்
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

நாங்கள் ஒரு எளிய திசைதிருப்பலுடன் yaml ஐ உருவாக்குவோம் எதிரொலி தாக்கல் செய்ய. நிச்சயமாக, உங்கள் dockerfile இல் நீங்கள் வைத்திருப்பதாகக் கருதப்படுகிறது பரம் 1 и பரம் 2என்று சுமை பெயர் இருக்கும் அற்புதமான பயன்பாடு, மற்றும் குறிப்பிட்ட பதிப்பின் பயன்பாட்டுடன் கூடியிருந்த கொள்கலன் உள்ளது கொள்கலன் பதிவு வரும் வழியில் gcr.io/awesomeapp/wesomeapp-$BUILD_VERSIONஅங்கு $BUILD_VERSION கீழ்தோன்றும் பட்டியலில் இருந்து தேர்ந்தெடுக்கப்பட்டது.

குழு பட்டியல்

touch deploy.yaml
echo "apiVersion: apps/v1" >> deploy.yaml
echo "kind: Deployment" >> deploy.yaml
echo "metadata:" >> deploy.yaml
echo "  name: awesomeapp" >> deploy.yaml
echo "spec:" >> deploy.yaml
echo "  replicas: 1" >> deploy.yaml
echo "  selector:" >> deploy.yaml
echo "    matchLabels:" >> deploy.yaml
echo "      run: awesomeapp" >> deploy.yaml
echo "  template:" >> deploy.yaml
echo "    metadata:" >> deploy.yaml
echo "      labels:" >> deploy.yaml
echo "        run: awesomeapp" >> deploy.yaml
echo "    spec:" >> deploy.yaml
echo "      containers:" >> deploy.yaml
echo "      - name: awesomeapp" >> deploy.yaml
echo "        image: gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION:latest" >> deploy.yaml
echo "        env:" >> deploy.yaml
echo "        - name: PARAM1" >> deploy.yaml
echo "          value: $PARAM1" >> deploy.yaml
echo "        - name: PARAM2" >> deploy.yaml
echo "          value: $PARAM2" >> deploy.yaml

இணைத்த பிறகு ஜென்கின்ஸ் முகவர் gCloud alpha cloud-shell ssh ஊடாடும் பயன்முறை கிடைக்கவில்லை, எனவே அளவுருவைப் பயன்படுத்தி கிளவுட் கன்சோலுக்கு கட்டளைகளை அனுப்புகிறோம் --கட்டளை.

கிளவுட் கன்சோலில் உள்ள முகப்பு கோப்புறையை பழைய டாக்கர்ஃபைலில் இருந்து சுத்தம் செய்கிறோம்:

gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"

scp ஐப் பயன்படுத்தி கிளவுட் கன்சோலின் முகப்பு கோப்புறையில் புதிதாக பதிவிறக்கம் செய்யப்பட்ட டாக்கர்ஃபைலை வைக்கவும்:

gcloud alpha cloud-shell scp localhost:./Dockerfile cloudshell:~

கொள்கலனை நாங்கள் சேகரித்து, குறியிட்டு, கொள்கலன் பதிவேட்டில் தள்ளுகிறோம்:

gcloud alpha cloud-shell ssh --command="docker build -t awesomeapp-$BUILD_VERSION ./ --build-arg BUILD_VERSION=$BUILD_VERSION --no-cache"
gcloud alpha cloud-shell ssh --command="docker tag awesomeapp-$BUILD_VERSION gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"
gcloud alpha cloud-shell ssh --command="docker push gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"

வரிசைப்படுத்தல் கோப்பிலும் நாங்கள் அதையே செய்கிறோம். கீழே உள்ள கட்டளைகள் வரிசைப்படுத்தல் நிகழும் கிளஸ்டரின் கற்பனையான பெயர்களைப் பயன்படுத்துகின்றன என்பதை நினைவில் கொள்ளவும் (awsm-கிளஸ்டர்) மற்றும் திட்டத்தின் பெயர் (அற்புதமான திட்டம்), கொத்து எங்கே அமைந்துள்ளது.

gcloud alpha cloud-shell ssh --command="rm -f deploy.yaml"
gcloud alpha cloud-shell scp localhost:./deploy.yaml cloudshell:~
gcloud alpha cloud-shell ssh --command="gcloud container clusters get-credentials awsm-cluster --zone us-central1-c --project awesome-project && 
kubectl apply -f deploy.yaml"

நாங்கள் பணியை இயக்குகிறோம், கன்சோல் வெளியீட்டைத் திறக்கிறோம் மற்றும் கொள்கலனின் வெற்றிகரமான அசெம்பிளியைக் காண நம்புகிறோம்.

ஸ்கிரீன்ஷாட்
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

பின்னர் கூடியிருந்த கொள்கலனின் வெற்றிகரமான வரிசைப்படுத்தல்

ஸ்கிரீன்ஷாட்
செருகுநிரல்கள், SMS அல்லது பதிவு இல்லாமல் GKE இல் வரிசைப்படுத்தல் பணியை உருவாக்குகிறோம். ஜென்கின்ஸ் ஜாக்கெட்டின் கீழ் எட்டிப்பார்ப்போம்

நான் வேண்டுமென்றே அமைப்பை புறக்கணித்தேன் உட்செல்வதை. ஒரு எளிய காரணத்திற்காக: நீங்கள் அதை அமைத்தவுடன் பணிச்சுமை கொடுக்கப்பட்ட பெயருடன், இந்த பெயரில் நீங்கள் எத்தனை வரிசைப்படுத்தல்களைச் செய்தாலும் அது செயல்பாட்டில் இருக்கும். சரி, பொதுவாக, இது வரலாற்றின் எல்லைக்கு அப்பாற்பட்டது.

முடிவுகளுக்கு பதிலாக

மேலே உள்ள அனைத்து படிகளையும் ஒருவேளை செய்திருக்க முடியாது, ஆனால் ஜென்கின்ஸ் அவர்களின் muuulion க்கான சில சொருகி நிறுவப்பட்டது. ஆனால் சில காரணங்களால் நான் செருகுநிரல்களை விரும்பவில்லை. சரி, இன்னும் துல்லியமாக, நான் அவர்களை விரக்தியில் மட்டுமே நாடுகிறேன்.

மேலும் எனக்காக சில புதிய தலைப்பை எடுக்க விரும்புகிறேன். மேலே உள்ள உரை, ஆரம்பத்தில் விவரிக்கப்பட்ட சிக்கலைத் தீர்க்கும்போது நான் செய்த கண்டுபிடிப்புகளைப் பகிர்ந்து கொள்வதற்கான ஒரு வழியாகும். டெவொப்ஸில் அவரைப் போன்ற ஒரு மோசமான ஓநாய் இல்லாதவர்களுடன் பகிர்ந்து கொள்ளுங்கள். எனது கண்டுபிடிப்புகள் குறைந்தபட்சம் யாருக்காவது உதவியிருந்தால், நான் மகிழ்ச்சியடைவேன்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்