Хабрыг бага зэрэг судалж үзээд GitHub-ийн (бета) функц болох Үйлдлийн сэдвээр маш цөөхөн нийтлэл нийтлэгдсэнд би гайхсан.
Ийм дутуу мэдэгдлийг функц нь "бета" ч гэсэн туршилтын шатандаа байгаатай холбон тайлбарлаж болох юм шиг санагдаж байна. Гэхдээ энэ нь бета хувилбарын ашигтай шинж чанар бөгөөд энэ хэрэгслийг хувийн хадгалах газарт ашиглах боломжийг олгодог. Энэ технологитой ажиллах талаар би энэ нийтлэлд ярих болно.
Түүхийн өмнөх үе
Хэрэв бид дарааллаар нь эхэлбэл "Миний тухай" хувийн вэбсайтыг хадгалах хурдан, хялбар, хялбар, үнэ төлбөргүй сонголтыг хайж олох явцад би хэдэн шөнө өнгөрөөж, олон нийтлэлийг самнах шаардлагатай болсон гэдгийг дурдах нь зүйтэй болов уу.
Зарим хүмүүс хостинг, зарим нь үүлэн серверийг сонгож, энэ бүхний ажил, харилцан үйлчлэл, төлбөрийг ойлгохыг хүсдэггүй хүмүүс статик сайтуудыг хадгалах газарт байршуулах дуртай байдаг тул одоо үүнийг GitHub болон GitLab дээр хийх боломжтой.
Мэдээжийн хэрэг, энэ нь хүн бүрийн хувийн сонголт юм.
Миний эцсийн сонголт GitHub Pages байсан.
Хуудасны тухай
Хэн мэдэхгүй байна gh-pages
- энэ нь баримт бичгийг вэбсайт хэлбэрээр хадгалах сонголт бөгөөд үүнийг үнэ төлбөргүй олгодог бөгөөд баримт бичгээс гадна хувийн вэбсайтуудыг хадгалахыг санал болгож байна. Энэ функцийг GitHub-аас бүх хэрэглэгчдэд олгодог бөгөөд хадгалах сангийн тохиргоонд ашиглах боломжтой.
Төслийн агуулах нь салбарыг ашигладаг gh-pages
, хэрэглэгчийн сайтын хувьд - нэртэй тусдаа хадгалах газар username.github.io
сайтын эх сурвалжтай master
салбар.
Та дэлгэрэнгүй мэдээллийг харах боломжтой CNAME
домэйн нэрээр болон GitHub серверүүд дээр домэйн үйлчилгээ үзүүлэгчийнхээ DNS-г тохируулна уу.
Ийм сайтыг хэрхэн хөгжүүлэх талаар олон нийтлэл байгаа гэдэгт би итгэлтэй байна, тиймээс би энэ талаар цаашид ярихгүй.
Асуудал гарах үед
Асуудал нь статик генераторыг ашиглах үед хуудас үүсгэх, тэдгээрийг репозитор руу ачаалах үйл явцыг хялбаршуулахын тулд нэмэлт скрипт бичих, номын санг ашиглах шаардлагатай болсон явдал байв. Энгийнээр хэлэхэд, хэрэв та эх сурвалжийг тусдаа хувийн хадгалах газарт хадгалдаг бол сайтад ямар нэгэн өөрчлөлт гарах бүрт дараа нь статик хуудсуудыг бий болгох, сайтын үндсэн репозиторыг нийтлэхийн тулд локал орчныг байрлуулах шаардлагатай болдог.
Элбэг дэлбэг байна
Саяхан, вэбсайт дээрх попап мэдэгдэл эсвэл GitHub-ийн мэдээллийн товхимол дээр шинээр баригдсан CI/CD-г анзаарсан нь эдгээр үйлдлийг хамгийн бага хүчин чармайлтаар гүйцэтгэх боломжийг олгосон.
Статик хуудас үүсгэгчийн тухай
Би энэ дэд зүйлд онцгой анхаарал хандуулахгүй, гэхдээ дараахь зүйлийг сонгох, ашиглах явцад олж авсан хэд хэдэн диссертацийг хуваалцах болно.
1) өөрийн програмчлалын хэлэнд тохирсон генератор эсвэл аль болох ойлгомжтой генераторыг сонго. Би өөрөө сайтыг ажиллуулахын тулд зарим функцийг нэмж, илүү тогтвортой байдал, автоматжуулалтыг хангахын тулд таяг нэмэх шаардлагатай үед би энэ санааг олж авсан. Нэмж дурдахад энэ нь нэмэлт функцийг залгаас хэлбэрээр өөрөө бичих сайн шалтгаан юм;
2) аль генераторыг сонгох нь хувь хүний сонголт боловч GitHub Pages-ийн функцийг анх удаа оруулахын тулд та эхлээд суулгах хэрэгтэй гэдгийг анхаарч үзэх хэрэгтэй.
Миний генераторын сонголт эхний цэг дээр суурилдаг.
__
Асуудлын тодорхойлолт
Гол ажил бол хувийн репозитороос статик хуудсыг автоматаар үүсгэх скрипт (үнэндээ тохиргооны файл) бичих явдал юм. Шийдэл нь виртуал орчны функцийг хамарна. Скрипт нь өөрөө бэлэн хуудсуудыг нийтийн санд нэмж оруулах болно.
Шийдвэрлэх хэрэгсэл
Асуудлыг шийдэхийн тулд бидний ашиглах хэрэгслүүд:
- GitHub үйлдлүүд;
- Python3.7;
- хотон;
- Git;
- GitHub хуудаснууд.
Алдааг олж засварлах
Тиймээс баримт бичигтэй бага зэрэг танилцаж, Actions-ийн скриптүүд хэрхэн бичигддэгийг ойлгосны дараа энэ механизм үүссэн асуудлыг бүрэн шийдвэрлэх нь тодорхой болсон. Бичиж байх үед та энэ функцийг ашиглахын тулд бүртгүүлэх ёстой.
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 вэб интерфэйсээр файл үүсгэх зэргээр хувийн репозитор руу шууд өөрчлөлт оруулснаар Actions өөрөө бүгдийг хийх болно. Хэрэв скрипт гэнэт гацвал таны имэйлд мэдэгдэл илгээгдэх болно.
Бүрэн код
Би ажлын хувилбараа үлдээх болно, үүнд сүүлчийн алхам нь үндсэн репозитор руу үүрэг шилжүүлсэн тухай мэдэгдэл илгээх болно.
Дээр дурдсан Нууцуудыг ашигладаг бөгөөд үүнд бот токен болон мессеж илгээх хэрэглэгчийн ID-г нэмж оруулсан болно.
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