ProHoster > Blog > Rêveberî > Çalakiyên GitHub wekî CI/CD ji bo malperek li ser hilberînerek statîk û Rûpelên GitHub
Çalakiyên GitHub wekî CI/CD ji bo malperek li ser hilberînerek statîk û Rûpelên GitHub
Piştî ku Habr hinekî geriyam, ez şaş bûm ku pir hindik gotar li ser mijara taybetmendiya GitHub (beta) - Çalakî hatine weşandin.
Wusa dixuye ku kêmkirina weha dikare bi vê yekê were rave kirin ku fonksiyon hîn jî di ceribandinê de ye, her çend "beta" be. Lê ew taybetmendiyek kêrhatî ya betayê ye ku dihêle ku ev amûr di depoyên taybet de were bikar anîn. Ew li ser xebata bi vê teknolojiyê re ye ku ez ê di vê gotarê de biaxivim.
Prehistory
Ger em bi rêz dest pê bikin, wê hingê belkî hêjayî gotinê ye ku di pêvajoya lêgerîna vebijarkek bilez, hêsan, hêsan û belaş de ji bo hilanîna malperek kesane ya "About Me" de, min neçar ma ku çend şevan derbas bikim û gelek gotaran bişopînim.
Hin kes mêvandariyê hildibijêrin, yên din serverek ewr, û yên ku naxwazin kar, têkilî û dravdana ji bo van hemîyan fam bikin mîna barkirina malperên statîk li depoyek, ji ber ku naha ev dikare hem li ser GitHub û hem jî li GitLab were kirin.
Bê guman, ev bijartina kesane ya her kesî ye.
Hilbijartina min a paşîn Rûpelên GitHub bû.
Der barê Rûpelên
Kî nizane gh-pages - ev vebijarkek e ji bo tomarkirina belgeyan di forma malperê de û belaş tê pêşkêş kirin, û ji bilî belgekirinê, ji bo hilanîna malperên kesane jî tê pêşniyar kirin. Vê fonksiyonê ji hêla GitHub ve ji hemî bikarhêneran re tê peyda kirin û di mîhengên depoyê de peyda dibe.
Depoya projeyê şaxek bikar tîne gh-pages, ji bo malperek bikarhêner - depoyek cihê bi navê username.github.io bi çavkaniyên malperê di nav de master gûlî.
Hûn dikarin hûrguliyên bêtir bibînin di belgeyê de, lê bihêle ez tenê bibêjim ku GitHub bi awakî ecêb bi comerdî ye ku destûrê dide her kesê ku bi tenê pelek lê zêde bike domaina xwe bi malperek weha ve girêde. CNAME bi navê domainê û sazkirina DNS-ya pêşkêşvanê domaina xwe li ser pêşkêşkerên GitHub.
Ez pê bawer im ku li vir gelek gotar hene ku meriv çawa malperek wusa pêşdixe, ji ber vê yekê ne ya ku ez ê bêtir li ser biaxivim ev e.
Pirsgirêk derdikeve
Pirsgirêk ev bû ku dema ku jeneratorek statîk bikar tîne, pêdivî bi nivîsandina nivîsarên zêde û karanîna pirtûkxaneyan heye ku pêvajoya hilberîna rûpelan û barkirina wan di depoyê de hêsan bike. Bi tenê, heke hûn çavkaniyan di depoyek taybet a cihêreng de hilînin, wê hingê her carê ku li ser malperê guherînek çêbibe, pêdivî bû ku hawîrdora herêmî ji bo nifşa paşîn a rûpelên statîk û weşandina di depoya malpera sereke de were bicîh kirin.
Gelekî heye jeneratorên statîk û ew hemî heman pirsgirêk hene. Van kiryaran pir dem û hewldan digirin, û di dawiyê de xebata li ser malperê hêdî dikin, nemaze piştî çend koçên ji OS-ê berbi OS-ê an bûyerên windabûna daneyê li ser dîskên hişk. (ev di doza min de bû).
Di van demên dawî de, an di agahdariyek pop-up-ê de li ser malperê an jî di nûçenameyek ji GitHub de, CI/CD-ya nû hatî çêkirin hate dîtin, ku ev gengaz kir ku meriv van çalakiyan bi hewildanek hindiktirîn pêk bîne.
Di derbarê jeneratorên rûpelê statîk de
Ez ê bi taybetî bala xwe nekim ser vê jêr-maddeyê, lê ez ê çend tezên ku ez di dema hilbijartî û karanîna jêrîn de gihîştim parve bikim:
1) jeneratorek ku li gorî zimanê bernameya we ye, an yek ku bi qasî ku gengaz zelal e hilbijêrin. Ez gihîştim vê ramanê di demekê de ku min bi xwe neçar ma ku ji bo ku malper bixebite hin fonksiyonan lê zêde bikim, ji bo aramî û otomasyona wê ya mezintir kelûpelan lê zêde bikim. Wekî din, ev sedemek baş e ku hûn bi xwe di forma pêvekan de fonksiyonên zêde binivîsin;
2) kîjan jeneratorê hilbijêrin bijarek kesane ye, lê hêja ye ku meriv bifikire ku ji bo ketina destpêkê di xebata fonksiyona Rûpelên GitHub de, divê hûn pêşî saz bikin Jekyll. Xwezî, ew dihêle hûn malperek ji çavkaniyên rasterast di depoyê de çêbikin (Ez ê bi hilbijartina xwe vê yekê dubare bikim).
Hilbijartina min a jeneratorê li ser xala yekem e. Teyrê pelîkan ku di Python de hatî nivîsandin bi hêsanî şûna Jekyll girt, ku ji min re xerîb e (Nêzîkî salekê ew bikar anî). Di encamê de, tewra afirandin û sererastkirina gotaran û xebata li ser malperek bi zimanekî ku ji bo min balkêş e, ezmûnek zêde dide.
__
Formulkirina pirsgirêkê
Karê sereke dê nivîsandina skrîptekê be (bi rastî pelek vesazkirinê) ku bixweber rûpelên statîk ji depoyek taybet çêbike. Çareserî dê fonksiyona jîngehek virtual pêk bîne. Skrîpta bixwe dê rûpelên amadekirî li depoya giştî zêde bike.
Amûrên çareseriyê
Amûrên ku em ê ji bo çareserkirina pirsgirêkê bikar bînin:
Çalakiyên GitHub;
Python3.7;
Teyrê pelîkan;
Git;
Rûpelên GitHub.
Troubleshooting
Ji ber vê yekê, piştî ku piçekî bi belgeyê re nas kirin û fêm kirin ka nivîsên ji bo Çalakiyan çawa têne nivîsandin, eşkere bû ku ev mekanîzma dê bi tevahî pirsgirêka ku derketiye çareser bike. Di dema nivîsandinê de, divê hûn bibin abone da ku vê fonksiyonê bikar bînin.ji bo ceribandina beta!
Danasîna fonksiyona nû ji hêla Github bixwe ve
Nivîsandina skrîpta Çalakiyan bi afirandina peldankek binavkirî di peldankekê de dest pê dike .github û binpeldanka wê workflows. Ev dikare bi destan an ji edîtorê di tabloya Çalakiyên li ser rûpela depoyê de were kirin.
Mînaka forma skrîptê ya vala
Ez ê bi kurtasî li ser formê şîrove bikim
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.
Ka em li ser şablonê xweya xwe binivîsin:
0) Hûn dikarin navê "CI" jî bihêlin. Mesele çêjekê ye.
1) Dûv re, hûn hewce ne ku çalakiyek/teşkîlata ku dê skrîptê bide destpêkirin hilbijêrin, di rewşa me de ev guheztina asayî ya peywirdariyek nû ye li depoyê.
on:
push
2) Di heman demê de em ê wêneya ku li ser bingeha wê skrîptê were destpêkirin jî wekî mînak bihêlin, ji ber ku Ubuntu ji fonksiyona pêwîst têr e. Dinêre amûrên bikêrhatî eşkere dibe ku ev dikare wêneyek pêdivî an hêsan hêsan be (an jî konteynirek Docker ku li ser bingeha wê ye).
build:
runs-on: ubuntu-latest
3) Di gavan de, em ê pêşî jîngehê saz bikin ku ji bo xebata sereke amade bikin.
3.1) biçin şaxê ku em hewce ne (gava standard checkout):
- uses: actions/checkout@v1
3.2) Python saz bikin:
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.7
3.4) pelrêçek çêbikin ku tê de rûpelên malperê têne çêkirin:
- name: Make output folder
run: mkdir output
4) Ji bo ku xebata li ser malperê domdar be, ango, guheztinên berê jê nebin û bikarin guhertinan li depoya malperê bêyî nakokî zêde bikin, gava din dê her carê klonkirina depoya malperê be:
têgûherr GITHUB_ACTOR GitHub xwe saz dike, û ev navê bikarhêner e ku bi xeletiya wî ev nivîsar hatiye destpêkirin;
têgûherr secrets.ACCESS_TOKEN ev tê çêkirin nîşanek ji bo birêvebirina Github, em dikarin wê wekî guhêrbarek jîngehê bi danîna wê di tabê de derbas bikin Secrets mîhengên depoya me. Ji kerema xwe not bikin ku di dema nifşê de nîşanek dê carekê ji me re were peyda kirin, dê çu gihîştina wê tune be. Her weha nirxên tiştên Veşartî.
Parametreyên ku ji jeneratorê re derbas dibin ji pelrêça ku pelên hatî çêkirin dê werin şandin berpirsiyar in (-o output) û pelê veavakirinê ya ku em ji bo hilberînê bikar tînin (-s publishconf.py; Hûn dikarin li ser nêzîkbûna veqetandina konfigurasyona herêmî û mîhengê ji bo weşandinê di belgeya Pelican de bixwînin.).
Di peldanka me de çi heye, bihêle ez bi bîr bînim output Depoya malperê jixwe hatiye klon kirin.
6) Werin em git saz bikin û pelên xwe yên guherî îndeks bikin:
Di vê nuqteyê de, guhêrbarek jixwe naskirî tê bikar anîn û pelrêça xebatê tê destnîşan kirin ku tê de emrên ji vê gavê têne destpêkirin. Fermana ku diçe pelrêça xebatê dê wekî din xuya bike - cd output.
7) Ka em peyamek commit çêkin, guheztinan bikin û wan bixin nav depoyê. Ji ber vê yekê ku commit ne betal be û ji ber vê yekê di bash de xeletiyek çênebe (encama derketinê ne 0) - Pêşîn, em binihêrin ka gelo pêdivî ye ku meriv bi tevahî tiştek bike û bikişîne. Ji bo vê yekê em fermanê bikar tînin git diff-index --quiet --cached HEAD -- ku dê derkeve termînalê 0 eger tu guhertin bi guhertoya berê ya malperê tune ne, û 1 guhertinên wiha hene. Dûv re em encama vê fermanê pêvajoyê dikin. Ji ber vê yekê, di agahdariya li ser pêkanîna skrîptê de, em ê di vê qonaxê de agahdariya kêrhatî di derbarê rewşa malperê de tomar bikin, li şûna ku em bixweber têk bibin û ji me re raporek li ser têkçûna senaryoyê bişînin.
Em van çalakiyan jî di pelrêça xwe de bi rûpelên hazir pêk tînin.
- 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
Di encama
Wekî encamek, skrîptek wusa dihêle hûn li ser afirandina rûpelên statîk nefikirin. Bi lê zêdekirina guhertinan rasterast li depoyek taybet, çi bi xebata bi git-ê re ji binê her pergalê an jî çêkirina pelek bi navbeynkariya tevna GitHub-ê ve, Actions dê her tiştî bixwe bikin. Ger skrîpt ji nişka ve têk bibe, dê agahdariyek ji e-nameya we re were şandin.
Koda tevahî
Ez ê guhertoya xweya xebatê bihêlim, ku tê de gava paşîn şandina agahdariyek zêde dike ku peywirek li depoya sereke hatî kişandin.
Veşartiyên ku li jor hatine destnîşan kirin têne bikar anîn, li wir nîşana botê û nasnameya bikarhênerê ku pêdivî ye ku peyam jê re were şandin têne zêdekirin.