GitHub ක්‍රියා CI/CD ලෙස ස්ථිතික උත්පාදක යන්ත්‍රයක් සහ GitHub පිටු මත අඩවියක් සඳහා

GitHub ක්‍රියා CI/CD ලෙස ස්ථිතික උත්පාදක යන්ත්‍රයක් සහ GitHub පිටු මත අඩවියක් සඳහා

Habr ටිකක් සෝදිසි කර බැලීමෙන් පසු, GitHub හි (බීටා) විශේෂාංගය - ක්‍රියා යන මාතෘකාව පිළිබඳ ලිපි ඉතා ස්වල්පයක් පළ වී තිබීම ගැන මම පුදුමයට පත් විය.

"බීටා" වුවද, ක්‍රියාකාරීත්වය තවමත් පරීක්‍ෂාවෙහි පවතින බැවින් එවැනි අවතක්සේරු කිරීමක් පැහැදිලි කළ හැකි බව පෙනේ. නමුත් මෙම මෙවලම පුද්ගලික ගබඩාවල භාවිතා කිරීමට ඉඩ සලසන බීටා හි ප්රයෝජනවත් අංගයකි. මෙම තාක්ෂණය සමඟ වැඩ කිරීම ගැන මම මෙම ලිපියෙන් කතා කරමි.

ප්රාග් ඉතිහාසය

අපි පිළිවෙලට ආරම්භ කරන්නේ නම්, පුද්ගලික “මා ගැන” වෙබ් අඩවියක් ගබඩා කිරීම සඳහා වේගවත්, පහසු, පහසු සහ නොමිලේ විකල්පයක් සෙවීමේ ක්‍රියාවලියේදී මට රාත්‍රී කිහිපයක් ගත කිරීමටත් බොහෝ ලිපි හරහා පීරීමටත් සිදු වූ බව සඳහන් කිරීම වටී.

සමහර අය සත්කාරකත්වය, තවත් අය වලාකුළු සේවාදායකයක් තෝරා ගනී, සහ මේ සියල්ල සඳහා වැඩ, අන්තර්ක්‍රියා සහ ගෙවීම් තේරුම් ගැනීමට අවශ්‍ය නැති අය ස්ථිතික අඩවි ගබඩාවකට උඩුගත කිරීම වැනි, දැන් මෙය GitHub සහ GitLab යන දෙකෙහිම කළ හැකිය.

ඇත්ත වශයෙන්ම, මෙය සෑම කෙනෙකුගේම පෞද්ගලික තේරීමකි.

මගේ අවසාන තේරීම වූයේ GitHub පිටු.

පිටු ගැන

කවුද දන්නේ නැහැ gh-pages - මෙය වෙබ් අඩවියක ස්වරූපයෙන් ලේඛන ගබඩා කිරීම සඳහා විකල්පයක් වන අතර එය නොමිලේ සපයනු ලබන අතර, ලේඛනගත කිරීමට අමතරව, පුද්ගලික වෙබ් අඩවි ගබඩා කිරීමට ද යෝජනා කෙරේ. මෙම ක්‍රියාකාරීත්වය GitHub මඟින් සියලුම පරිශීලකයින්ට සපයනු ලබන අතර එය ගබඩා සැකසුම් තුළ පවතී.

ව්යාපෘති ගබඩාව ශාඛාවක් භාවිතා කරයි gh-pages, පරිශීලක අඩවියක් සඳහා - නම සහිත වෙනම ගබඩාවක් username.github.io අඩවි මූලාශ්‍ර සමඟ master ශාඛාව.

වැඩි විස්තර සොයා ගත හැක ලේඛනවල, නමුත් හුදෙක් ගොනුවක් එක් කිරීමෙන් එවැනි වෙබ් අඩවියකට තමන්ගේම වසම සම්බන්ධ කිරීමට ඕනෑම කෙනෙකුට ඉඩ දීමේදී GitHub පුදුම සහගත ලෙස ත්‍යාගශීලී බව සටහන් කරමි. CNAME වසම් නාමය සමඟින් සහ GitHub සේවාදායකයන් මත ඔබේ වසම් සැපයුම්කරුගේ DNS සැකසීම.

එවැනි වෙබ් අඩවියක් සංවර්ධනය කරන්නේ කෙසේද යන්න පිළිබඳ බොහෝ ලිපි මෙහි ඇති බව මට විශ්වාසයි, එබැවින් මම තවදුරටත් කතා කිරීමට යන්නේ එය නොවේ.

මතුවන ගැටලුව

ගැටළුව වූයේ ස්ථිතික උත්පාදක යන්ත්රයක් භාවිතා කරන විට, පිටු උත්පාදනය කිරීමේ ක්රියාවලිය සරල කිරීම සඳහා අතිරේක ස්ක්රිප්ට් ලිවීමට සහ පුස්තකාල භාවිතා කිරීමට අවශ්ය වන අතර ඒවා ගබඩාවට පැටවීමයි. සරලව, ඔබ මූලාශ්‍ර වෙනම පුද්ගලික ගබඩාවක ගබඩා කරන්නේ නම්, වෙබ් අඩවියේ කිසියම් වෙනසක් සිදු වන සෑම අවස්ථාවකම, පසුව එන ස්ථිතික පිටු සහ ප්‍රධාන අඩවි ගබඩාවේ ප්‍රකාශනය සඳහා දේශීය පරිසරය යෙදවීමට අවශ්‍ය විය.

බහුලත්වයක් ඇත ස්ථිතික ජනක යන්ත්ර ඔවුන් සියල්ලන්ටම එකම ගැටලුවක් ඇත. මෙම ක්‍රියා සඳහා වැඩි කාලයක් හා වෑයමක් අවශ්‍ය වන අතර, විශේෂයෙන්ම OS සිට OS වෙත සංක්‍රමණය වීමෙන් පසුව හෝ දෘඪ තැටිවල දත්ත නැතිවී යාමෙන් පසුව, අවසානයේ දී වෙබ් අඩවියේ වැඩ මන්දගාමී වේ. (මගේ නඩුවේදී මෙය සිදු විය).

මෑතකදී, වෙබ් අඩවියේ උත්පතන දැනුම්දීමක හෝ GitHub වෙතින් පුවත් පත්‍රිකාවක, අලුතින් සාදන ලද CI/CD එකක් දැකගත හැකි වූ අතර, එමඟින් මෙම ක්‍රියා අවම උත්සාහයකින් සිදු කිරීමට හැකි විය.

ස්ථිතික පිටු උත්පාදක ගැන

මම මෙම උප අයිතමය කෙරෙහි විශේෂ අවධානයක් යොමු නොකරමි, නමුත් පහත සඳහන් දෑ තෝරා ගැනීමේදී සහ භාවිතා කිරීමේදී මා පැමිණි නිබන්ධන කිහිපයක් බෙදා ගන්නෙමි:

1) ඔබේ ක්‍රමලේඛන භාෂාවට ගැළපෙන ජෙනරේටරයක් ​​හෝ හැකි තරම් පැහැදිලි එකක් තෝරන්න. මම මෙම අදහසට පැමිණියේ වෙබ් අඩවිය ක්‍රියා කිරීම සඳහා යම් ක්‍රියාකාරීත්වයක් එක් කිරීමට, එහි වැඩි ස්ථායිතාව සහ ස්වයංක්‍රීයකරණය සඳහා අත්වාරු එකතු කිරීමට මට සිදු වූ අවස්ථාවකදීය. ඊට අමතරව, ප්ලගීන ආකාරයෙන් අතිරේක ක්‍රියාකාරිත්වය ලිවීමට මෙය හොඳ හේතුවකි;

2) තෝරා ගත යුතු උත්පාදක යන්ත්රය පුද්ගලික තේරීමකි, නමුත් GitHub පිටු ක්‍රියාකාරීත්වයේ මුල් ගිල්වීම සඳහා, ඔබ මුලින්ම ස්ථාපනය කළ යුතු බව සලකා බැලීම වටී. ජෙකිල්. වාසනාවකට මෙන්, එය සෘජුවම ගබඩාවේ ඇති මූලාශ්‍රවලින් වෙබ් අඩවියක් ජනනය කිරීමට ඔබට ඉඩ සලසයි (මම මෙය මගේ තේරීම සමඟ නැවත කරන්නෙමි).

මගේ ජෙනරේටරය තෝරා ගැනීම පළමු කරුණ මත පදනම් වේ. පෙලිකන් පයිතන් හි ලියා ඇති ජෙකිල් වෙනුවට මට ආගන්තුක ය (වසරකට ආසන්න කාලයක් එය භාවිතා කර ඇත). එහි ප්‍රතිඵලයක් වශයෙන්, ලිපි නිර්මාණය කිරීම සහ සංස්කරණය කිරීම සහ වෙබ් අඩවියක වැඩ කිරීම පවා මට රසවත් භාෂාවකින් අමතර අත්දැකීමක් ලබා දෙයි.

__

ගැටලුව ප්රකාශ කිරීම

ප්‍රධාන කාර්යය වනුයේ පුද්ගලික ගබඩාවකින් ස්වයංක්‍රීයව ස්ථිතික පිටු ජනනය කරන ස්ක්‍රිප්ට් එකක් (ඇත්ත වශයෙන්ම වින්‍යාස ගොනුවක්) ලිවීමයි. විසඳුමට අතථ්‍ය පරිසරයක ක්‍රියාකාරීත්වය ඇතුළත් වේ. ස්ක්‍රිප්ට් විසින්ම සූදානම් කළ පිටු පොදු ගබඩාවට එක් කරනු ඇත.

විසඳුම සඳහා මෙවලම්

ගැටළුව විසඳීම සඳහා අපි භාවිතා කරන මෙවලම්:

  • GitHub ක්‍රියා;
  • පයිතන් 3.7;
  • පෙලිකන්;
  • Git;
  • GitHub පිටු.

දෝෂ නිරාකරණය කිරීම

එබැවින්, ලේඛන සමඟ මඳක් දැන හඳුනා ගැනීමෙන් සහ ක්‍රියා සඳහා ස්ක්‍රිප්ට් ලියා ඇති ආකාරය තේරුම් ගැනීමෙන් පසුව, මෙම යාන්ත්‍රණය පැන නැගී ඇති ගැටළුව සම්පූර්ණයෙන්ම විසඳන බව පැහැදිලි විය. ලියන අවස්ථාවේදී, ඔබ මෙම ක්‍රියාකාරීත්වය භාවිතා කිරීමට දායක විය යුතුය. බීටා පරීක්ෂණ සඳහා!

GitHub ක්‍රියා CI/CD ලෙස ස්ථිතික උත්පාදක යන්ත්‍රයක් සහ GitHub පිටු මත අඩවියක් සඳහා
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) Ubuntu අවශ්‍ය ක්‍රියාකාරීත්වය පිළිබඳව සෑහීමකට පත්වන බැවින්, උදාහරණයක් ලෙස ස්ක්‍රිප්ට් දියත් කරන පදනම මත අපි රූපය තබමු. බලනවා සවිස්තරාත්මක මෙවලම් මෙය අවශ්‍ය හෝ පහසු ඕනෑම රූපයක් විය හැකි බව පැහැදිලි වේ (හෝ එය මත පදනම් වූ ඩොකර් බහාලුමක්).

  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 ක්‍රියා CI/CD ලෙස ස්ථිතික උත්පාදක යන්ත්‍රයක් සහ GitHub පිටු මත අඩවියක් සඳහා
මූලාශ්‍ර ගබඩාවේ ක්‍රියා පටිත්තෙහි පෙන්වන එක් ධාවන ප්‍රතිඵලයකි

GitHub ක්‍රියා CI/CD ලෙස ස්ථිතික උත්පාදක යන්ත්‍රයක් සහ GitHub පිටු මත අඩවියක් සඳහා
ස්ක්‍රිප්ට් එක සම්පූර්ණ කිරීම ගැන බොට් වෙතින් පණිවිඩයක්

ප්රයෝජනවත් සබැඳි

ක්රියාවන් අවබෝධ කර ගැනීම
ක්‍රියා වාක්‍ය ඛණ්ඩය
ප්‍රේරක ලැයිස්තුව
අතථ්‍ය පරිසරයන් සඳහා විකල්ප
Github පිටු
ස්ථිතික උත්පාදක ලැයිස්තුව

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න