GitHub በስታቲክ ጄኔሬተር እና በ GitHub ገጾች ላይ ላለ ጣቢያ እንደ CI/ሲዲ እርምጃዎች

GitHub በስታቲክ ጄኔሬተር እና በ GitHub ገጾች ላይ ላለ ጣቢያ እንደ CI/ሲዲ እርምጃዎች

ሀብርን በጥቂቱ ስቃኝ፣ በ GitHub (ቅድመ-ይሁንታ) ባህሪ - ድርጊቶች ላይ በጣም ጥቂት መጣጥፎች መታተማቸው አስገርሞኛል።

ምንም እንኳን “ቅድመ-ይሁንታ” ቢሆንም ተግባራዊነቱ አሁንም በሙከራ ላይ በመሆኑ እንዲህ ዓይነቱን ማቃለል ሊገለጽ የሚችል ይመስላል። ግን ይህ መሳሪያ በግል ማከማቻዎች ውስጥ ጥቅም ላይ እንዲውል የሚያስችለው የቤታ ጠቃሚ ባህሪ ነው። በዚህ ጽሑፍ ውስጥ የምናገረው ከዚህ ቴክኖሎጂ ጋር ስለ መሥራት ነው.

ቅድመ ታሪክ

በቅደም ተከተል ከጀመርን ምናልባት ፈጣን ፣ ምቹ ፣ ቀላል እና ነፃ የሆነ የግል “ስለ እኔ” ድህረ ገጽ ለማከማቸት በመፈለግ ሂደት ውስጥ ብዙ ምሽቶችን ማሳለፍ እና ብዙ መጣጥፎችን ማለፍ ነበረብኝ።

አንዳንድ ሰዎች ማስተናገጃን ይመርጣሉ, ሌሎች ደግሞ የደመና አገልጋይ, እና ለዚህ ሁሉ ስራውን, መስተጋብርን እና ክፍያን ለመረዳት የማይፈልጉ እንደ ቋሚ ጣቢያዎችን ወደ ማጠራቀሚያ መስቀል, አሁን ይሄ በሁለቱም በ GitHub እና GitLab ላይ ሊከናወን ይችላል.

በእርግጥ ይህ የሁሉም ሰው የግል ምርጫ ነው።

የመጨረሻ ምርጫዬ GitHub Pages ነበር።

ስለ ገፆች

ማን የማያውቅ gh-pages - ይህ በድር ጣቢያ መልክ ሰነዶችን ለማከማቸት አማራጭ ነው እና በነጻ ይሰጣል ፣ እና ከሰነዶች በተጨማሪ የግል ድረ-ገጾችን ለማከማቸት ሀሳብ ቀርቧል። ይህ ተግባር በ GitHub ለሁሉም ተጠቃሚዎች የቀረበ ሲሆን በማጠራቀሚያ ቅንጅቶች ውስጥ ይገኛል።

የፕሮጀክቱ ማከማቻ ቅርንጫፍ ይጠቀማል gh-pages, ለተጠቃሚ ጣቢያ - ከስሙ ጋር የተለየ ማከማቻ username.github.io ከጣቢያ ምንጮች ጋር master ቅርንጫፍ.

ተጨማሪ ማየት ይችላሉ በሰነድ ውስጥነገር ግን GitHub ማንም ሰው በቀላሉ ፋይል በመጨመር የራሱን ጎራ ከእንዲህ ዓይነቱ ጣቢያ ጋር እንዲያገናኝ በመፍቀድ በሚያስደንቅ ሁኔታ ለጋስ መሆኑን ልብ ይሏል። CNAME በጎራ ስም እና የጎራ አቅራቢዎን ዲ ኤን ኤስ በ GitHub አገልጋዮች ላይ በማዋቀር።

እንደዚህ አይነት ጣቢያን እንዴት ማዳበር እንደሚቻል እዚህ ብዙ መጣጥፎች እንዳሉ እርግጠኛ ነኝ, ስለዚህ ስለ የበለጠ የምናገረው ይህ አይደለም.

የሚፈጠር ችግር

ችግሩ የነበረው የማይንቀሳቀስ ጀነሬተር ሲጠቀሙ ተጨማሪ ስክሪፕቶችን መፃፍ እና ቤተመጻሕፍትን በመጠቀም ገጾችን የማመንጨት እና ወደ ማከማቻው የመጫን ሂደትን ለማቃለል ነበር። በቀላል ፣ ምንጮቹን በተለየ የግል ማከማቻ ውስጥ ካከማቹ ፣ ከዚያ በጣቢያው ላይ ምንም ለውጥ በሚኖርበት ጊዜ ፣ ​​​​በዋናው ጣቢያ ማከማቻ ውስጥ ለቀጣይ ትውልድ የማይለዋወጡ ገጾች እና ህትመቶች የአካባቢውን አከባቢ ማሰማራት አስፈላጊ ነበር።

የተትረፈረፈ ነገር አለ። የማይንቀሳቀሱ ጀነሬተሮች እና ሁሉም ተመሳሳይ ችግር አለባቸው. እነዚህ እርምጃዎች ብዙ ጊዜ እና ጥረት ይጠይቃሉ፣ እና በመጨረሻም በጣቢያው ላይ ስራን ያቀዘቅዛሉ፣ በተለይ ከስርዓተ ክወና ወደ ስርዓተ ክወና ከብዙ ፍልሰት በኋላ ወይም በሃርድ ድራይቮች ላይ የውሂብ መጥፋት ካጋጠማቸው ችግሮች በኋላ (በእኔ ጉዳይ ይህ ነበር).

ልክ በቅርቡ፣ ወይ በድረ-ገጹ ላይ ብቅ ባይ ማስታወቂያ ወይም ከ GitHub በተባለው ጋዜጣ ላይ፣ አዲስ የተሰራ ሲአይ/ሲዲ ታይቷል፣ ይህም እርምጃዎች በትንሹ ጥረት እንዲደረጉ አስችሏል።

ስለ የማይንቀሳቀስ ገጽ ጀነሬተሮች

በዚህ ንኡስ ንጥል ላይ ልዩ ትኩረት አላደርግም፣ ነገር ግን በሚከተለው ምርጫ እና አጠቃቀም ወቅት የመጣኋቸውን ሁለቱን ጉዳዮች ላካፍላችሁ።

1) ለፕሮግራሚንግ ቋንቋዎ የሚስማማ ጄኔሬተር ይምረጡ ወይም በተቻለ መጠን ግልጽ ነው። ወደዚህ ሀሳብ የመጣሁት እኔ ራሴ ጣቢያው እንዲሰራ አንዳንድ ተግባራትን ማከል፣ ለበለጠ መረጋጋት እና አውቶማቲክ ክራንች ማከል ባለበት ጊዜ ነው። በተጨማሪም, ይህ ተጨማሪ ተግባራትን እራስዎ በፕለጊን መልክ ለመጻፍ ጥሩ ምክንያት ነው;

2) የትኛውን ጄነሬተር እንደሚመርጥ የግል ምርጫ ነው ፣ ግን በ GitHub ገጾች ተግባር ውስጥ ለመጀመሪያ ጊዜ ለመጥለቅ መጀመሪያ መጫን እንዳለብዎ ግምት ውስጥ ማስገባት ተገቢ ነው ። ጄክ. እንደ እድል ሆኖ, በቀጥታ በማከማቻው ውስጥ ካሉ ምንጮች ድረ-ገጽ እንዲፈጥሩ ይፈቅድልዎታል (ይህንን በምርጫ እደግመዋለሁ).

የጄነሬተር ምርጫዬ በመጀመሪያው ነጥብ ላይ የተመሰረተ ነው. ይብራ በፓይዘን የተጻፈው በቀላሉ ጄኪልን ተክቶታል፣ ይህም ለእኔ እንግዳ ነው። (ለአንድ አመት ያህል ተጠቅሞበታል). በውጤቱም, መጣጥፎችን መፍጠር እና ማረም እና በድህረ-ገጽ ላይ መስራት እንኳን ለእኔ በሚማርክ ቋንቋ ተጨማሪ ልምድ ይሰጠናል.

__

የችግሩ ቀመር

ዋናው ተግባር ከግል ማከማቻ ውስጥ የማይንቀሳቀሱ ገጾችን በራስ-ሰር የሚያመነጭ ስክሪፕት (በእርግጥ የውቅር ፋይል) መፃፍ ነው። መፍትሄው የቨርቹዋል አካባቢን ተግባራዊነት ያካትታል። ስክሪፕቱ ራሱ ዝግጁ የሆኑ ገጾችን ወደ ይፋዊ ማከማቻ ያክላል።

የመፍትሄ መሳሪያዎች

ችግሩን ለመፍታት የምንጠቀምባቸው መሳሪያዎች፡-

  • GitHub ድርጊቶች;
  • Python3.7;
  • ፔሊካን;
  • Git;
  • GitHub ገጾች።

መላ መፈለግ

ስለዚህ ፣ ከሰነዶቹ ጋር ትንሽ ካወቅን እና የተግባር ስክሪፕቶች እንዴት እንደተፃፉ ከተረዳን በኋላ ይህ ዘዴ የተፈጠረውን ችግር ሙሉ በሙሉ እንደሚፈታ ግልጽ ሆነ። ይህን ተግባር በሚጽፉበት ጊዜ፣ ይህንን ተግባር ለመጠቀም መመዝገብ አለብዎት። ለቅድመ-ይሁንታ ሙከራ!

GitHub በስታቲክ ጄኔሬተር እና በ GitHub ገጾች ላይ ላለ ጣቢያ እንደ CI/ሲዲ እርምጃዎች
የአዲሱ ተግባር መግለጫ በ Github በራሱ

የእርምጃዎች ስክሪፕት መጻፍ የሚጀምረው በአቃፊ ውስጥ የተሰየመ ፋይል በመፍጠር ነው። .github እና ንዑስ አቃፊው። workflows. ይህ በእጅ ወይም በአርታዒው ውስጥ በድርጊት ትር ውስጥ በማጠራቀሚያ ገጹ ላይ ሊከናወን ይችላል.

GitHub በስታቲክ ጄኔሬተር እና በ GitHub ገጾች ላይ ላለ ጣቢያ እንደ CI/ሲዲ እርምጃዎች
ባዶ የስክሪፕት ቅጽ ምሳሌ

በቅጹ ላይ በአጭሩ አስተያየት እሰጣለሁ

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) Python ን ይጫኑ

    - 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 ይህ የመነጨ ነው Githubን ለማስተዳደር ማስመሰያ, በትሩ ውስጥ በማዘጋጀት እንደ የአካባቢ ተለዋዋጭ እናስተላልፋለን Secrets የእኛ ማከማቻ ቅንብሮች. እባክዎን በትውልድ ጊዜ ማስመሰያው አንድ ጊዜ እንደሚሰጠን ልብ ይበሉ ፣ ለእሱ ምንም ተጨማሪ መዳረሻ አይኖርም። እንዲሁም የምስጢር ዕቃዎች እሴቶች።

5) ገጾቻችንን ወደማመንጨት እንሂድ፡-

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

ወደ ጄኔሬተሩ የተላለፉት መለኪያዎች የተፈጠሩት ፋይሎች የሚላኩበት ማውጫ (ዳይሬክተሩ) ተጠያቂ ናቸው (-o output) እና ለማምረት የምንጠቀመው የማዋቀሪያ ፋይል (-s publishconf.py; በፔሊካን ሰነድ ውስጥ የአካባቢያዊ ውቅረትን እና ለህትመት አወቃቀሩን ለመለየት ስላለው አቀራረብ ማንበብ ይችላሉ).

በአቃፊችን ውስጥ ያለውን ላስታውስህ output የጣቢያው ማከማቻ አስቀድሞ ተዘግቷል።

6) git እናዋቅር እና የተቀየሩ ፋይሎቻችንን እንጠቁም፡

    - 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) የቃል መልእክት እንፍጠር ፣ ለውጦቹን እንፈጽም እና ወደ ማከማቻው እንገፋፋቸዋለን። ስለዚህ ድርጊቱ በከንቱ እንዳልሆነ እና ስለዚህ በ bash ውስጥ ስህተት አይፈጥርም (የውጤት ውጤቱ አይደለም 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 በስታቲክ ጄኔሬተር እና በ GitHub ገጾች ላይ ላለ ጣቢያ እንደ CI/ሲዲ እርምጃዎች
በምንጭ ማከማቻው ውስጥ በድርጊት ትር ውስጥ የሚታየው የአንዱ ሩጫ ውጤት

GitHub በስታቲክ ጄኔሬተር እና በ GitHub ገጾች ላይ ላለ ጣቢያ እንደ CI/ሲዲ እርምጃዎች
ስለ ስክሪፕቱ መጠናቀቅ ከቦት የመጣ መልእክት

ጠቃሚ አገናኞች

ድርጊቶችን መረዳት
የተግባር አገባብ
ቀስቅሴዎች ዝርዝር
ለምናባዊ አካባቢዎች አማራጮች
Github ገጾች
የማይንቀሳቀስ ጀነሬተር ዝርዝር

ምንጭ: hab.com

አስተያየት ያክሉ