GIT
பலரும் இணைந்து ஒரு மென்பொருளை உருவாக்கும்போது, அதன் மூல நிரலில் ஏற்பட்ட மாறுதல்கள், யார் எப்போது மாற்றியது, ஒரே நேரத்தில் யார் யாரெல்லாம் திருத்தியது, எது சமீபத்தியது போன்ற அனைத்தையும் வரலாறு போன்று சேமிக்க உதவும் version control சிஸ்டமே GIT ஆகும். நம்முடைய நிரல்கள் சேமிக்கப்பட்டுள்ள பகுதியில் .git எனும் ஃபோல்டரை உருவாக்கி அதற்குள் இத்தகைய மாற்றங்களை சேமித்துக் கொண்டே வரும். மாற்றங்கள் மட்டுமே இங்கு சேமிக்கப்படுவதால், அதிக இடம் தேவையில்லை. GitHub, GitLab, BitBucket போன்றவை இதுபோன்ற பல்வேறு கிட் களை சேமிக்க உதவும் களஞ்சியம் ஆகும். இது ஒரு மைய சர்வரைக் கொண்டு அனைத்து கிட் களையும் தனக்குள் சேமித்து வைத்துக் கொள்கிறது. எனவே நமது கணினி பழுதடைந்தால்கூட இந்த மைய சர்வரில் சென்று நம்முடைய நிரலைப் பெற்றுக் கொள்ளலாம். தானியக்க முறையில் deployment நிகழ்வதற்கு இதுவே முதல் படி ஆகும்.
Local server
நமது கணினியில் GIT-ஐ நிறுவுவற்கான மற்றும் நீக்குவதற்கான கட்டளைகள் பின்வருமாறு.
$ sudo apt-get install git $ sudo apt-get remove git
இப்போது மேற்கண்ட நிரல்கள் அனைத்தும் அமைந்திருக்கும் /nithya/devops எனும் டைரக்டரியில் சென்று git init எனக் கொடுத்தால் அது ஒரு புதிய கிட் repository-ஐ உருவாக்கும்.
$ git init
இப்போது நம்முடைய டைரக்டரியில் சென்று பார்த்தால் .git எனும் ஃபோல்டர் மறைமுகமாக இடம் பெற்றிருப்பதைக் காணலாம். இதுவே hidden folder ஆகும். இதற்குள் தான் அனைத்து செயல்களும் பதிவு செய்யப்பட்டுக் கொண்டே வரும். நம்முடைய டைரக்டரி ஒரு git repository-ஆக உருமாற்றம் அடைந்ததை இது உறுதிப்படுத்தும்.
GIT மூன்று படிநிலைகளில் கோப்புகளை அணுகும். முதலாவது நம்முடைய தற்போதைய டைரக்டரி, இரண்டாவது staging பகுதி, மூன்றாவது git-க்கான மைய சர்வர். git status எனும் கட்டளை எந்தப் படி நிலையில் நமது கோப்புகள் உள்ளன என்பதை வெளிப்படுத்தும்.
$ git status
இப்போதுதான் git-ஐ உருவாக்கியுள்ளோம். இன்னும் எதையும் git-க்கு அறிமுகம் செய்யவில்லை. அனைத்து கோப்புகளும் தற்போதைய டைரக்டரியில் தான் உள்ளன. ஆகவே ‘எதைப் பற்றிய விவரமும் எனக்குத் தெரியவில்லை‘ என்பது போல் அனைத்தையும் சிகப்பு நிறத்தில் வெளிப்படுத்தியுள்ளது. ஆகவே git add எனக் கொடுத்து அனைத்தையும் git-க்கு அறிமுகம் செய்யப் போகிறோம்.
$ git add * .
இதன்பின் கோப்புகள் அனைத்தும் ஸ்டேஜிங் பகுதியை சென்றடைந்து விடும். ஸ்டார் டாட் என்பது தற்போதைய டைரக்டரியில் உள்ள அனைத்துக் கோப்புகளையும் நகர்த்த வேண்டும் என்பதைக் குறிக்கும். ஏதேனும் ஒரு கோப்பை மட்டும் நகர்த்த விரும்பினால், dot-க்கு முன்னர் அக்கோப்பின் பெயரை மட்டும் அளித்தால் போதும்.
இந்நிலையில் கோப்புகளைப் பற்றிய அறிமுகம் தனக்குக் கிடைத்து விட்டதால் அனைத்தையும் பச்சை நிறத்தில் வெளிப்படுத்தியுள்ளதைக் காணலாம்.
இங்கு நாம் உருவாக்கிய நிரல்களோடு சேர்த்து data.csv , model.pkl என அனைத்தையும் staging இடத்தில் ஏற்றியுள்ளோம். ஆனால் உண்மையில் இவ்வாறு செய்யக்கூடாது. வெறும் நிரல்களை மட்டும் தான் இங்கு சேமிக்க வேண்டும். நிரல்களுக்குள் தர வேண்டிய உள்ளீட்டுத் தரவுகளை வேறு எங்காவது சேமித்து அதற்கான API மூலம் அதனை நிரலுக்குள் கொண்டு வர வேண்டும். அதேபோல் நாம் உருவாக்கிய மாடலையும் எங்கு சேமிக்க விரும்புகிறோமோ அதற்கான API எழுதி அங்கு கொண்டுபோய் சேமிக்க வேண்டும். இதுவே சரியான முறையாகும். இங்கு நாம் செய்து பார்ப்பதற்கு வசதியாக இருக்க வேண்டுமென்று அனைத்தையும் நான் பதிவேற்றி உள்ளேன்.
அடுத்து வெறும் அறிமுகம் கிடைத்தால் போதுமா! அதனைத் தன்னுள் ஒருவராக இணைத்துக்கொள்ள வேண்டாமா! இதற்காக கமிட் பயன்படுகிறது.
$ git commit -m "first commit"
இங்கு -m என்பது கமெண்ட் அளிக்கப் பயன்படும்.
இதைத்தொடர்ந்து ஸ்டேஜிங் நிலையில் இருப்பவை கடைசி நிலையான சர்வரைச் சென்று அடைந்து விடும்.
மேற்கண்ட அனைத்தும் நம்முடைய லோக்கல் சர்வரில் தான் நடந்துள்ளன. வேறு யாராவது இவற்றைப் பயன்படுத்த விரும்பினாலோ அல்லது நாமே வேறு சர்வரில் சென்று இதே அமைப்பை நிறுவ விரும்பினாலோ, அதற்கு உதவும் வகையில் நம்முடைய நிரல்கள் அனைத்தையும் ஒரு மைய சர்வரில் வைக்கவேண்டும். GitHub என்ற ஒரு மைய சர்வரில் நம்முடைய நிரல்களைப் பதிவேற்றம் செய்வது பற்றி இப்போது பார்க்கலாம்.
Centralized Repository
github.com/ எனும் முகவரியில் சென்று Repositories -> New என சொடுக்கினால் பின்வருமாறு ஒரு திரை வெளிப்படும். இங்கு devops_examples எனும் பெயரில் ஒரு repository-ஐ உருவாக்கிக் கொள்ளவும். இதுவே நம்முடைய நிரல்களை சேமிக்க உதவும் களஞ்சியமாகச் செயல்படும்.
அதன் முகவரி பின்வருமாறு வெளிப்படும்.
இந்த முகவரியுடன் நம்முடைய லோக்கல் சர்வரை இணைக்க git remote add எனும் கட்டளை பயன்படுகிறது. இது 2 arguments-ஐப் பெற்று இயங்குகிறது. முதலில் உள்ள origin என்பது இணைக்கப் போகும் சர்வருக்கு நாம் வழங்குகின்ற பெயராகும். வேறு எதை வேண்டுமானாலும் பெயராக நாம் வழங்கலாம். அடுத்து உள்ளது சர்வருக்கான url ஆகும். இந்த இணைப்பு நடந்தவுடன் git push எனக் கொடுத்து அனைத்தையும் நாம் ரிமோட் சர்வருக்கு அனுப்பி விடலாம். இவை பின்வருமாறு.
$ git remote add origin https://github.com/nithyadurai87/devops_examples.git $ git push origin master
இங்கு devops எனும் ஒரே ஃபோல்டருக்குள் இரண்டு வெவ்வேறு போர்டில் மதிப்புகளை வெளிப்படுத்தக்கூடிய இரண்டு API-களுக்கான ப்ரோக்ராம்கள் இடம்பெற்றுள்ளன. ஆனால் இதற்கு அடுத்த படியில் ஒவ்வொரு API-க்கும் தனித்தனி Dockerfile- ஐ எழுதி ரன் செய்யப்போகிறோம். ஆகவே இதற்கு வசதியாக இவ்விரண்டையும் பிரித்து தனித்தனியே real_time, sample எனும் இரண்டு ஃபோல்டரில் சேமிக்கிறோம்.
இதுபோன்று சில மாறுதல்கள் செய்து git status எனக்கொடுத்தாலும் அது பின்வருமாறு வெளிப்படுத்துவதைக் காணலாம்.
எனவே மீண்டும் git add, git commit, git push என அனைத்தையும் கொடுத்து எப்போதும் நம்முடைய தற்போதைய directory-ம் ரிமோட்டில் உள்ள directory-ம் ஒன்றுபோல் இருக்குமாறு பார்த்துக் கொள்ள வேண்டும்.
More Git Commands
அடுத்ததாக கிட்டில் ஏற்கனவே பதிவேற்றம் செய்யப்பட்டுள்ள நிரல்களை பதிவிறக்கம் செய்து பயன்படுத்த கீழ்க்கண்ட கட்டளை பயன்படும்.
$ git clone https://github.com/nithyadurai87/docker_example.git
இதில் டாக்கர் சம்பந்தப்பட்ட நிரல்கள் சேமிக்கப்பட்டுள்ளன. இனிவரும் பகுதிகளில் இந்நிரல்களுக்கான விளக்கங்களைக் காணலாம். அதற்கு முன்னர் இதைவைத்து இன்னும் சில git கட்டளைகளைப் பற்றித் தெரிந்து கொள்ளலாம்.
பதிவிறக்கம் செய்த உடன் நிரல்களில் ஏதேனும் மாற்றம் செய்ய விரும்பினால் இதில் நேரடியாக மாற்றக்கூடாது. ஏனெனில் இது மாஸ்டர் ஆகும். நமக்கென ஒரு கிளையை உருவாக்கி அதற்குள்தான் நமது வேலைகளைத் தொடங்க வேண்டும்.
கீழ்க்கண்ட கட்டளை volume என்ற பெயரில் கிளையை உருவாக்கும். அதற்கு அடுத்த கட்டளை நாம் எந்தக் கிளையில் உள்ளோம் என்பதை வெளிக்காட்டும். இங்கு நட்சத்திரக் குறியைத் தொடர்ந்து master என்பதை வெளிப்படுத்தியுள்ளது. அதாவது இன்னும் மாஸ்டரில் தான் உள்ளோம். ஆகவே கிட் checkout எனக் கொடுத்து நாம் உருவாக்கிய புதிய branch-க்குச் செல்லலாம்.
$ git branch volume $ git branch $ git checkout volume
இவ்வாறு தனித்தனியாக அல்லாமல் ஒரே கட்டளையில் branch-ஐ உருவாக்கி உள்நுழைய,
$ git checkout -b volume
எனவும் கொடுக்கலாம்.
இப்போது app.py, docker-compose.yml ஆகிய கோப்பிற்குள் கமெண்ட்–ஆக உள்ள வரிகளில் கமெண்ட்டை நீக்கிவிட்டு சேமித்துக் கொள்வோம். இதைத் தொடர்ந்து git diff எனக் கொடுத்தால் நிரல்களில் நிகழ்ந்துள்ள மாற்றங்கள் பின்வருமாறு வெளிப்படும்.
$ git diff
இத்தகைய மாற்றங்களை கமிட் செய்வதற்கு முன்னர் git stash எனக் கொடுத்தால் மாற்றங்கள் அனைத்தும் நீங்கி கோப்புகள் பழைய நிலையைச் சென்றடையும்.
$ git stash
$ git log
git log என்பது இதனை பதிவேற்றம் செய்தபோது பயன்படுத்திய பெயர், மின்னஞ்சல் முகவரி போன்ற சில அடிப்படைத் தகவல்களை வெளிப்படுத்தும். இவற்றை மாற்ற விரும்பினால் git config பின்வருமாறு பயன்படும்.
$ git config user.name "Nithya Duraisamy" $ git config user.email "nithyadurai87@gmail.com"
இப்போது நாம் செய்த மாற்றங்களை நமது branch-க்குள் சேமிக்க பின்வரும் கட்டளைகள் பயன்படும். மேலே நாம் மாற்றிய பயனரின் பெயர் மற்றும் மின்னஞ்சல் முகவரியின் கீழ் இவை சேமிக்கப்படும்.
$ git add * $ git commit -m 'second' $ git push origin volume
$ git diff master
இது மாஸ்டருக்கும் பிராஞ்சுக்கும் உள்ள வேறுபாட்டை வெளிப்படுத்தும்..
ஆகவே மாஸ்டராக உள்நுழைந்து நம்முடைய branch-ஐ இணைத்துக் கொண்டால், நாம் செய்த மாற்றங்கள் மாஸ்டரிலும் இணைந்து விடும்.
$ git checkout master $ git merge volume
இப்பகுதியில் அதிக முக்கியத்துவம் வாய்ந்த கிட் கட்டளைகளைப் பற்றி மட்டும் நாம் பார்த்துள்ளோம். இதுவரை ஒரு அப்ளிகேஷனை உருவாக்குவது , அவற்றின் நிரல்களை git- சேமிப்பது போன்றவற்றைப் பற்றியெல்லாம் பார்த்தோம். ஆனால் அந்த அப்ளிகேஷனைவெற்றிகரமாக ஒரு புதிய இடத்தில் நிறுவுவதற்கு இது மட்டும் போதாது. புதிய சர்வரில் நிலவும் பல்வேறு config அமைவுகளால் அப்ளிகேஷனின் செயல்பாடு பாதிக்கக்கூடும். அதனை சரி செய்வதற்காக வந்ததே docker ஆகும். இதைப் பற்றி அடுத்த பகுதியில் காணலாம்.