நிலையான ஜெனரேட்டர் மற்றும் GitHub பக்கங்களில் உள்ள தளத்திற்கான CI/CD ஆக GitHub செயல்கள்

நிலையான ஜெனரேட்டர் மற்றும் GitHub பக்கங்களில் உள்ள தளத்திற்கான CI/CD ஆக GitHub செயல்கள்

ஹப்ரைக் கொஞ்சம் உற்றுப் பார்த்த பிறகு, GitHub இன் (பீட்டா) அம்சம் - செயல்கள் என்ற தலைப்பில் மிகச் சில கட்டுரைகள் வெளியிடப்பட்டிருப்பது எனக்கு ஆச்சரியமாக இருந்தது.

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

முன்வரலாறு

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

சிலர் ஹோஸ்டிங்கைத் தேர்வு செய்கிறார்கள், மற்றவர்கள் கிளவுட் சேவையகத்தைத் தேர்வு செய்கிறார்கள், மேலும் வேலை, தொடர்பு மற்றும் கட்டணத்தைப் புரிந்து கொள்ள விரும்பாதவர்கள் நிலையான தளங்களை ஒரு களஞ்சியத்தில் பதிவேற்றுவது போன்றது, இப்போது இதை GitHub மற்றும் GitLab இரண்டிலும் செய்யலாம்.

நிச்சயமாக, இது ஒவ்வொருவரின் தனிப்பட்ட விருப்பம்.

எனது இறுதி தேர்வு கிட்ஹப் பக்கங்கள்.

பக்கங்களைப் பற்றி

யாருக்குத் தெரியாது gh-pages - இது ஒரு வலைத்தளத்தின் வடிவத்தில் ஆவணங்களை சேமிப்பதற்கான ஒரு விருப்பமாகும், மேலும் இது இலவசமாக வழங்கப்படுகிறது, மேலும் ஆவணங்களுடன் கூடுதலாக, தனிப்பட்ட வலைத்தளங்களையும் சேமிக்க முன்மொழியப்பட்டது. இந்த செயல்பாடு அனைத்து பயனர்களுக்கும் GitHub ஆல் வழங்கப்படுகிறது மற்றும் களஞ்சிய அமைப்புகளில் கிடைக்கிறது.

திட்ட களஞ்சியம் ஒரு கிளையைப் பயன்படுத்துகிறது gh-pages, ஒரு பயனர் தளத்திற்கு - பெயருடன் ஒரு தனி களஞ்சியம் username.github.io தள ஆதாரங்களுடன் master கிளை.

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

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

ஒரு பிரச்சனையின் நிகழ்வு

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

மிகுதியாக உள்ளது நிலையான ஜெனரேட்டர்கள் மேலும் அவர்கள் அனைவருக்கும் ஒரே பிரச்சனை உள்ளது. இந்த செயல்கள் அதிக நேரத்தையும் முயற்சியையும் எடுக்கும், குறிப்பாக OS இலிருந்து OS க்கு பல இடப்பெயர்வுகள் அல்லது ஹார்டு டிரைவ்களில் தரவு இழப்புடன் கூடிய சம்பவங்களுக்குப் பிறகு, தளத்தின் வேலைகளை இறுதியில் மெதுவாக்குகிறது. (என்னுடைய விஷயத்திலும் அப்படித்தான் இருந்தது).

சமீபத்தில், இணையதளத்தில் ஒரு பாப்-அப் அறிவிப்பில் அல்லது GitHub இன் செய்திமடலில், புதிதாக கட்டப்பட்ட CI/CD கவனிக்கப்பட்டது, இது குறைந்த முயற்சியுடன் இந்த செயல்களைச் செய்ய முடிந்தது.

நிலையான பக்க ஜெனரேட்டர்கள் பற்றி

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

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

2) எந்த ஜெனரேட்டரைத் தேர்வு செய்வது என்பது தனிப்பட்ட விருப்பம், ஆனால் கிட்ஹப் பக்கங்களின் செயல்பாட்டின் வேலையில் ஆரம்ப மூழ்குவதற்கு, நீங்கள் முதலில் நிறுவ வேண்டும் என்பதைக் கருத்தில் கொள்வது மதிப்பு. ஜெகில். அதிர்ஷ்டவசமாக, இது நேரடியாக களஞ்சியத்தில் உள்ள மூலங்களிலிருந்து ஒரு வலைத்தளத்தை உருவாக்க உங்களை அனுமதிக்கிறது (இதை என் விருப்பத்துடன் மீண்டும் சொல்கிறேன்).

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

__

பிரச்சனை அறிக்கை

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

தீர்வுக்கான கருவிகள்

சிக்கலைத் தீர்க்க நாங்கள் பயன்படுத்தும் கருவிகள்:

  • GitHub செயல்கள்;
  • பைதான் 3.7;
  • பெலிகன்;
  • Git;
  • கிட்ஹப் பக்கங்கள்.

சிக்கல் தீர்க்கும்

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

நிலையான ஜெனரேட்டர் மற்றும் GitHub பக்கங்களில் உள்ள தளத்திற்கான CI/CD ஆக GitHub செயல்கள்
கிதுப்பின் புதிய செயல்பாட்டின் விளக்கம்

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

நிலையான ஜெனரேட்டர் மற்றும் GitHub பக்கங்களில் உள்ள தளத்திற்கான CI/CD ஆக GitHub செயல்கள்
வெற்று ஸ்கிரிப்ட் படிவத்தின் எடுத்துக்காட்டு

படிவத்தைப் பற்றி சுருக்கமாக கருத்துத் தெரிவிக்கிறேன்

name: CI    # название скрипта: будет отображаться во вкладке Actions

on: [push]  # действие, по которому запускается данный скрипт

jobs:       # роботы, которые будут выполняться
  build:    # сборка, которая..

    runs-on: ubuntu-latest      # ..будет запущена на основе этого образа

    steps:              # шаги которые будут проделаны после запуска образа
    - uses: actions/checkout@v1     # переход в самую актуальную ветку
    - name: Run a one-line script   # имя работы номер 1
      run: echo Hello, world!       # суть работы номер 1 (bash-команда записана в одну строку)
    - name: Run a multi-line script   # имя работы номер 2
      run: |                    # суть работы номер 2 (многострочная)
        echo Add other actions to build,
        echo test, and deploy your project.

வார்ப்புருவின் அடிப்படையில் சொந்தமாக எழுதுவோம்:

0) நீங்கள் "CI" என்ற பெயரையும் விட்டுவிடலாம். இது ரசனைக்குரிய விஷயம்.

1) அடுத்து, ஸ்கிரிப்டைத் தொடங்கும் செயல்/தூண்டலை நீங்கள் தேர்ந்தெடுக்க வேண்டும், எங்கள் விஷயத்தில் இது களஞ்சியத்திற்கான புதிய உறுதிப்பாட்டின் வழக்கமான உந்துதல்.

on:
  push

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

  build:
    runs-on: ubuntu-latest

3) படிகளில், முக்கிய வேலைக்குத் தயாராகும் சூழலை முதலில் அமைப்போம்.

3.1) நமக்குத் தேவையான கிளைக்குச் செல்லவும் (நிலையான படி checkout):

- uses: actions/checkout@v1

3.2) பைத்தானை நிறுவவும்:

    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7

3.3) எங்கள் ஜெனரேட்டரின் சார்புகளை நிறுவவும்:

    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

3.4) ஒரு கோப்பகத்தை உருவாக்கவும், அதில் தளப் பக்கங்கள் உருவாக்கப்படும்:

   - name: Make output folder
      run: mkdir output

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

   - name: Clone master branch
      run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output

இந்த படி கணினி மாறிகளை அழைக்கிறது:

  • மாறி GITHUB_ACTOR GitHub தன்னை நிறுவுகிறது, மேலும் இது யாருடைய தவறு மூலம் இந்த ஸ்கிரிப்ட் தொடங்கப்பட்டது என்பதற்கான பயனர் பெயர்;
  • மாறி secrets.ACCESS_TOKEN இது உருவாக்கப்படுகிறது கிதுப்பை நிர்வகிப்பதற்கான டோக்கன், அதை டேப்பில் அமைப்பதன் மூலம் சூழல் மாறியாக அனுப்பலாம் Secrets எங்கள் களஞ்சிய அமைப்புகள். தலைமுறையின் போது டோக்கன் எங்களுக்கு ஒருமுறை வழங்கப்படும், அதற்கு மேலும் அணுகல் இருக்காது என்பதை நினைவில் கொள்ளவும். அத்துடன் இரகசிய பொருட்களின் மதிப்புகள்.

5) எங்கள் பக்கங்களை உருவாக்குவதற்கு செல்லலாம்:

   - name: Generate static pages
      run: pelican content -o output -s publishconf.py

ஜெனரேட்டருக்கு அனுப்பப்பட்ட அளவுருக்கள் உருவாக்கப்பட்ட கோப்புகள் அனுப்பப்படும் கோப்பகத்திற்கு பொறுப்பாகும் (-o output) மற்றும் நாம் உருவாக்க பயன்படுத்தும் கட்டமைப்பு கோப்பு (-s publishconf.py; பெலிகன் ஆவணத்தில் உள்ளூர் கட்டமைப்பு மற்றும் வெளியீட்டிற்கான கட்டமைப்பைப் பிரிப்பதற்கான அணுகுமுறை பற்றி நீங்கள் படிக்கலாம்.).

எங்கள் கோப்புறையில் என்ன இருக்கிறது என்பதை உங்களுக்கு நினைவூட்டுகிறேன் output தள களஞ்சியம் ஏற்கனவே குளோன் செய்யப்பட்டுள்ளது.

6) நாம் மாற்றிய கோப்புகளை ஜிட் மற்றும் இன்டெக்ஸ் அமைப்போம்:

    - name: Set git config and add changes
      run: |
          git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
          git config --global user.name "${GITHUB_ACTOR}"
          git add --all
      working-directory: ./output

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

7) உறுதி செய்தியை உருவாக்கி, மாற்றங்களைச் செய்து அவற்றை களஞ்சியத்தில் தள்ளுவோம். அதனால் உறுதியானது வீணாகாது, எனவே பாஷில் பிழை ஏற்படாது (வெளியீட்டு முடிவு இல்லை 0) - முதலில், எதையாவது செய்து தள்ளுவது அவசியமா என்பதைச் சரிபார்ப்போம். இதைச் செய்ய, கட்டளையைப் பயன்படுத்துகிறோம் git diff-index --quiet --cached HEAD -- இது டெர்மினலுக்கு அவுட்புட் செய்யும் 0 தளத்தின் முந்தைய பதிப்புடன் தொடர்புடைய மாற்றங்கள் எதுவும் இல்லை என்றால், மற்றும் 1 அத்தகைய மாற்றங்கள் உள்ளன. இந்த கட்டளையின் முடிவை நாங்கள் செயலாக்குகிறோம். எனவே, ஸ்கிரிப்டை செயல்படுத்துவது பற்றிய தகவலில், இந்த கட்டத்தில் தளத்தின் நிலையைப் பற்றிய பயனுள்ள தகவல்களைப் பதிவுசெய்வோம், அதற்குப் பதிலாக தானாகவே செயலிழந்து ஸ்கிரிப்ட் செயலிழப்பு பற்றிய அறிக்கையை எங்களுக்கு அனுப்புவோம்.

ஆயத்த பக்கங்களுடன் எங்கள் கோப்பகத்திலும் இந்த செயல்களைச் செய்கிறோம்.

   - name: Push and send notification
      run: |
          COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
          git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
          # Only if repo have changes
          git commit -m "${COMMIT_MESSAGE}"
          git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
      working-directory: ./output

விளைவாக

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

முழு குறியீடு

எனது பணிப் பதிப்பை விட்டுவிடுகிறேன், இதில் கடைசிப் படியானது முக்கியக் களஞ்சியத்திற்கு ஒரு உறுதிப்பாட்டை அனுப்பியதற்கான அறிவிப்பை அனுப்புகிறது.

மேலே விவரிக்கப்பட்ட ரகசியங்கள் பயன்படுத்தப்படுகின்றன, அங்கு போட் டோக்கன் மற்றும் செய்தியை அனுப்ப வேண்டிய பயனர் ஐடி ஆகியவை சேர்க்கப்படும்.

name: Push content to the user's GitHub pages repository

on:
  push

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7
    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
    - name: Make output folder
      run: mkdir output
    - name: Clone master branch
      run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output
    - name: Generate static pages
      run: pelican content -o output -s publishconf.py
    - name: Set git config and add changes
      run: |
          git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
          git config --global user.name "${GITHUB_ACTOR}"
          git add --all
      working-directory: ./output
    - name: Push and send notification
      run: |
          COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
          git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
          git commit -m "${COMMIT_MESSAGE}"
          git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
          curl "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMessage?text=$COMMIT_MESSAGE %0ALook at ${GITHUB_ACTOR}.github.io %0ARepository%3A github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io&chat_id=${{ secrets.ADMIN_ID }}"
      working-directory: ./output

திரைக்காட்சிகளுடன்

நிலையான ஜெனரேட்டர் மற்றும் GitHub பக்கங்களில் உள்ள தளத்திற்கான CI/CD ஆக GitHub செயல்கள்
மூல களஞ்சியத்தின் செயல்கள் தாவலில் காட்டப்படும் ரன்களில் ஒன்றின் முடிவு

நிலையான ஜெனரேட்டர் மற்றும் GitHub பக்கங்களில் உள்ள தளத்திற்கான CI/CD ஆக GitHub செயல்கள்
ஸ்கிரிப்ட் முடிந்ததைப் பற்றி போட்டில் இருந்து செய்தி

பயனுள்ள இணைப்புகள்

செயல்களைப் புரிந்துகொள்வது
செயல்களின் தொடரியல்
தூண்டுதல்களின் பட்டியல்
மெய்நிகர் சூழல்களுக்கான விருப்பங்கள்
கிதுப் பக்கங்கள்
நிலையான ஜெனரேட்டர் பட்டியல்

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

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