Habr ටිකක් සෝදිසි කර බැලීමෙන් පසු, GitHub හි (බීටා) විශේෂාංගය - ක්රියා යන මාතෘකාව පිළිබඳ ලිපි ඉතා ස්වල්පයක් පළ වී තිබීම ගැන මම පුදුමයට පත් විය.
"බීටා" වුවද, ක්රියාකාරීත්වය තවමත් පරීක්ෂාවෙහි පවතින බැවින් එවැනි අවතක්සේරු කිරීමක් පැහැදිලි කළ හැකි බව පෙනේ. නමුත් මෙම මෙවලම පුද්ගලික ගබඩාවල භාවිතා කිරීමට ඉඩ සලසන බීටා හි ප්රයෝජනවත් අංගයකි. මෙම තාක්ෂණය සමඟ වැඩ කිරීම ගැන මම මෙම ලිපියෙන් කතා කරමි.
ප්රාග් ඉතිහාසය
අපි පිළිවෙලට ආරම්භ කරන්නේ නම්, පුද්ගලික “මා ගැන” වෙබ් අඩවියක් ගබඩා කිරීම සඳහා වේගවත්, පහසු, පහසු සහ නොමිලේ විකල්පයක් සෙවීමේ ක්රියාවලියේදී මට රාත්රී කිහිපයක් ගත කිරීමටත් බොහෝ ලිපි හරහා පීරීමටත් සිදු වූ බව සඳහන් කිරීම වටී.
සමහර අය සත්කාරකත්වය, තවත් අය වලාකුළු සේවාදායකයක් තෝරා ගනී, සහ මේ සියල්ල සඳහා වැඩ, අන්තර්ක්රියා සහ ගෙවීම් තේරුම් ගැනීමට අවශ්ය නැති අය ස්ථිතික අඩවි ගබඩාවකට උඩුගත කිරීම වැනි, දැන් මෙය GitHub සහ GitLab යන දෙකෙහිම කළ හැකිය.
ඇත්ත වශයෙන්ම, මෙය සෑම කෙනෙකුගේම පෞද්ගලික තේරීමකි.
මගේ අවසාන තේරීම වූයේ GitHub පිටු.
පිටු ගැන
කවුද දන්නේ නැහැ gh-pages
- මෙය වෙබ් අඩවියක ස්වරූපයෙන් ලේඛන ගබඩා කිරීම සඳහා විකල්පයක් වන අතර එය නොමිලේ සපයනු ලබන අතර, ලේඛනගත කිරීමට අමතරව, පුද්ගලික වෙබ් අඩවි ගබඩා කිරීමට ද යෝජනා කෙරේ. මෙම ක්රියාකාරීත්වය GitHub මඟින් සියලුම පරිශීලකයින්ට සපයනු ලබන අතර එය ගබඩා සැකසුම් තුළ පවතී.
ව්යාපෘති ගබඩාව ශාඛාවක් භාවිතා කරයි gh-pages
, පරිශීලක අඩවියක් සඳහා - නම සහිත වෙනම ගබඩාවක් username.github.io
අඩවි මූලාශ්ර සමඟ master
ශාඛාව.
වැඩි විස්තර සොයා ගත හැක CNAME
වසම් නාමය සමඟින් සහ GitHub සේවාදායකයන් මත ඔබේ වසම් සැපයුම්කරුගේ DNS සැකසීම.
එවැනි වෙබ් අඩවියක් සංවර්ධනය කරන්නේ කෙසේද යන්න පිළිබඳ බොහෝ ලිපි මෙහි ඇති බව මට විශ්වාසයි, එබැවින් මම තවදුරටත් කතා කිරීමට යන්නේ එය නොවේ.
මතුවන ගැටලුව
ගැටළුව වූයේ ස්ථිතික උත්පාදක යන්ත්රයක් භාවිතා කරන විට, පිටු උත්පාදනය කිරීමේ ක්රියාවලිය සරල කිරීම සඳහා අතිරේක ස්ක්රිප්ට් ලිවීමට සහ පුස්තකාල භාවිතා කිරීමට අවශ්ය වන අතර ඒවා ගබඩාවට පැටවීමයි. සරලව, ඔබ මූලාශ්ර වෙනම පුද්ගලික ගබඩාවක ගබඩා කරන්නේ නම්, වෙබ් අඩවියේ කිසියම් වෙනසක් සිදු වන සෑම අවස්ථාවකම, පසුව එන ස්ථිතික පිටු සහ ප්රධාන අඩවි ගබඩාවේ ප්රකාශනය සඳහා දේශීය පරිසරය යෙදවීමට අවශ්ය විය.
බහුලත්වයක් ඇත
මෑතකදී, වෙබ් අඩවියේ උත්පතන දැනුම්දීමක හෝ GitHub වෙතින් පුවත් පත්රිකාවක, අලුතින් සාදන ලද CI/CD එකක් දැකගත හැකි වූ අතර, එමඟින් මෙම ක්රියා අවම උත්සාහයකින් සිදු කිරීමට හැකි විය.
ස්ථිතික පිටු උත්පාදක ගැන
මම මෙම උප අයිතමය කෙරෙහි විශේෂ අවධානයක් යොමු නොකරමි, නමුත් පහත සඳහන් දෑ තෝරා ගැනීමේදී සහ භාවිතා කිරීමේදී මා පැමිණි නිබන්ධන කිහිපයක් බෙදා ගන්නෙමි:
1) ඔබේ ක්රමලේඛන භාෂාවට ගැළපෙන ජෙනරේටරයක් හෝ හැකි තරම් පැහැදිලි එකක් තෝරන්න. මම මෙම අදහසට පැමිණියේ වෙබ් අඩවිය ක්රියා කිරීම සඳහා යම් ක්රියාකාරීත්වයක් එක් කිරීමට, එහි වැඩි ස්ථායිතාව සහ ස්වයංක්රීයකරණය සඳහා අත්වාරු එකතු කිරීමට මට සිදු වූ අවස්ථාවකදීය. ඊට අමතරව, ප්ලගීන ආකාරයෙන් අතිරේක ක්රියාකාරිත්වය ලිවීමට මෙය හොඳ හේතුවකි;
2) තෝරා ගත යුතු උත්පාදක යන්ත්රය පුද්ගලික තේරීමකි, නමුත් GitHub පිටු ක්රියාකාරීත්වයේ මුල් ගිල්වීම සඳහා, ඔබ මුලින්ම ස්ථාපනය කළ යුතු බව සලකා බැලීම වටී.
මගේ ජෙනරේටරය තෝරා ගැනීම පළමු කරුණ මත පදනම් වේ.
__
ගැටලුව ප්රකාශ කිරීම
ප්රධාන කාර්යය වනුයේ පුද්ගලික ගබඩාවකින් ස්වයංක්රීයව ස්ථිතික පිටු ජනනය කරන ස්ක්රිප්ට් එකක් (ඇත්ත වශයෙන්ම වින්යාස ගොනුවක්) ලිවීමයි. විසඳුමට අතථ්ය පරිසරයක ක්රියාකාරීත්වය ඇතුළත් වේ. ස්ක්රිප්ට් විසින්ම සූදානම් කළ පිටු පොදු ගබඩාවට එක් කරනු ඇත.
විසඳුම සඳහා මෙවලම්
ගැටළුව විසඳීම සඳහා අපි භාවිතා කරන මෙවලම්:
- GitHub ක්රියා;
- පයිතන් 3.7;
- පෙලිකන්;
- Git;
- GitHub පිටු.
දෝෂ නිරාකරණය කිරීම
එබැවින්, ලේඛන සමඟ මඳක් දැන හඳුනා ගැනීමෙන් සහ ක්රියා සඳහා ස්ක්රිප්ට් ලියා ඇති ආකාරය තේරුම් ගැනීමෙන් පසුව, මෙම යාන්ත්රණය පැන නැගී ඇති ගැටළුව සම්පූර්ණයෙන්ම විසඳන බව පැහැදිලි විය. ලියන අවස්ථාවේදී, ඔබ මෙම ක්රියාකාරීත්වය භාවිතා කිරීමට දායක විය යුතුය.
Github විසින්ම නව ක්රියාකාරීත්වය පිළිබඳ විස්තරය
ක්රියා ස්ක්රිප්ට් ලිවීම ආරම්භ වන්නේ ෆෝල්ඩරයක නම් කළ ගොනුවක් සෑදීමෙනි .github
සහ එහි උප ෆෝල්ඩරය workflows
. මෙය අතින් හෝ ගබඩා පිටුවේ ඇති ක්රියා පටිත්තෙහි සංස්කාරකයෙන් කළ හැක.
හිස් ස්ක්රිප්ට් පෝරමයක උදාහරණය
මම පෝරමය ගැන කෙටියෙන් අදහස් දක්වන්නම්
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
රූප රාමු
මූලාශ්ර ගබඩාවේ ක්රියා පටිත්තෙහි පෙන්වන එක් ධාවන ප්රතිඵලයකි
ස්ක්රිප්ට් එක සම්පූර්ණ කිරීම ගැන බොට් වෙතින් පණිවිඩයක්
ප්රයෝජනවත් සබැඳි
මූලාශ්රය: www.habr.com