ProHoster > Blog > Stjórnsýsla > GitHub aðgerðir sem CI/CD fyrir síðu á kyrrstöðurafalli og GitHub síður
GitHub aðgerðir sem CI/CD fyrir síðu á kyrrstöðurafalli og GitHub síður
Eftir að hafa skoðað Habr aðeins, kom ég á óvart að mjög fáar greinar hafa verið birtar um efni GitHub (beta) eiginleika - Actions.
Svo virðist sem hægt sé að útskýra slíka vanmat með því að virknin er enn í prófun, að vísu „beta“. En það er gagnlegur eiginleiki beta sem gerir kleift að nota þetta tól í einkageymslum. Það snýst um að vinna með þessa tækni sem ég mun tala um í þessari grein.
Forsaga
Ef við byrjum í röð, þá er líklega þess virði að minnast á að í því ferli að leita að hröðum, þægilegum, auðveldum og ókeypis valkostum til að geyma persónulega „Um mig“ vefsíðu, þurfti ég að eyða nokkrum nóttum og kemba í gegnum margar greinar.
Sumir velja hýsingu, aðrir skýjaþjóna og þeir sem vilja ekki skilja vinnuna, samskiptin og greiðsluna fyrir allt þetta eins og að hlaða upp kyrrstæðum síðum í geymslu, þar sem nú er hægt að gera þetta bæði á GitHub og GitLab.
Auðvitað er þetta persónulegt val hvers og eins.
Lokavalið mitt var GitHub Pages.
Um síður
Hver veit ekki gh-pages - þetta er valmöguleiki til að geyma skjöl í formi vefsíðna og þau eru veitt ókeypis og auk skjala er einnig lagt til að geyma persónulegar vefsíður. Þessi virkni er veitt af GitHub til allra notenda og er fáanleg í stillingum geymslunnar.
Verkefnageymslan notar útibú gh-pages, fyrir notendasíðu - sérstakt geymsla með nafninu username.github.io með síðuheimildum í master útibú.
Þú getur séð frekari upplýsingar í skjölunum, en ég skal bara taka það fram að GitHub er furðu örlátur í því að leyfa hverjum sem er að tengja eigið lén við slíka síðu með því einfaldlega að bæta við skrá CNAME með léninu og setja upp DNS lénsveitunnar á GitHub netþjónunum.
Ég er viss um að það eru margar greinar hér um hvernig eigi að þróa slíka síðu, svo það er ekki það sem ég ætla að tala um frekar.
Vandamál að koma upp
Vandamálið var að þegar static rafall er notað þarf að skrifa viðbótarforskriftir og nota bókasöfn til að einfalda ferlið við að búa til síður og hlaða þeim inn í geymsluna. Einfaldlega, ef þú geymir heimildirnar í sérstakri einkageymslu, þá var í hvert skipti sem einhverjar breytingar verða á síðunni, nauðsynlegt að dreifa staðbundnu umhverfi fyrir síðari kynslóð af kyrrstæðum síðum og birtingu í aðalvefsíðunni.
Það er gnægð truflanir rafala og allir eiga við sama vandamál að stríða. Þessar aðgerðir taka of mikinn tíma og fyrirhöfn og hægja á endanum á vinnu á síðunni, sérstaklega eftir nokkra flutninga frá stýrikerfi yfir í stýrikerfi eða atvik með tapi á gögnum á hörðum diskum (þetta var raunin í mínu tilfelli).
Nýlega, annað hvort í sprettigluggatilkynningu á vefsíðunni eða í fréttabréfi frá GitHub, var tekið eftir nýsmíðuðum CI/CD, sem gerði það kleift að framkvæma þessar aðgerðir með lágmarks fyrirhöfn.
Um kyrrstæða síðuframleiðendur
Ég mun ekki beina athyglinni sérstaklega að þessum undirlið, en ég mun deila nokkrum ritgerðum sem ég kom að við val og notkun á eftirfarandi:
1) veldu rafall sem hentar forritunarmálinu þínu, eða einn sem er eins skiljanlegur og mögulegt er. Ég kom að þessari hugmynd á þeim tíma þegar ég þurfti sjálfur að bæta við virkni til að vefurinn virkaði, bæta við hækjum fyrir meiri stöðugleika og sjálfvirkni. Að auki er þetta góð ástæða til að skrifa viðbótarvirkni sjálfur í formi viðbætur;
2) hvaða rafall á að velja er persónulegt val, en það er þess virði að íhuga að fyrir fyrstu dýfu í vinnu GitHub Pages virkni, verður þú fyrst að setja upp Jekyll. Sem betur fer gerir það þér kleift að búa til vefsíðu frá heimildum beint í geymslunni (Ég mun endurtaka þetta með vali mínu).
Val mitt á rafala byggist á fyrsta atriðinu. Pelican sem er skrifað í Python kom auðveldlega í stað Jekyll, sem er mér framandi (notaði það í næstum ár). Afleiðingin er sú að jafnvel að búa til og breyta greinum og vinna við vefsíðu veitir aukna reynslu á tungumáli sem er áhugavert fyrir mig.
__
Samsetning vandans
Aðalverkefnið verður að skrifa handrit (í raun stillingarskrá) sem myndi sjálfkrafa búa til kyrrstæðar síður úr einkageymslu. Lausnin mun fela í sér virkni sýndarumhverfis. Handritið sjálft mun bæta tilbúnum síðum við opinberu geymsluna.
Verkfæri til lausnar
Verkfæri sem við munum nota til að leysa vandamálið:
GitHub aðgerðir;
Python3.7;
Pelican;
Git;
GitHub síður.
Lausnin
Svo, eftir að hafa kynnst skjölunum aðeins og skilið hvernig forskriftir fyrir Actions eru skrifaðar, varð ljóst að þetta kerfi mun algjörlega leysa vandamálið sem hefur komið upp. Þegar þetta er skrifað verður þú að gerast áskrifandi til að nota þessa virkni.fyrir beta prófun!
Lýsing á nýju virkni Github sjálfs
Að skrifa Actions skriftu hefst á því að búa til nafngreinda skrá í möppu .github og undirmöppu hennar workflows. Þetta er hægt að gera annað hvort handvirkt eða úr ritlinum í Aðgerðir flipanum á geymslusíðunni.
Dæmi um autt forskriftarform
Ég mun í stuttu máli gera athugasemdir við eyðublaðið
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.
Við skulum skrifa okkar eigin byggt á sniðmátinu:
0) Þú getur líka skilið eftir nafnið „CI“. Það er smekksatriði.
1) Næst þarftu að velja aðgerðina/kveikjuna sem mun ræsa handritið, í okkar tilviki er þetta venjulega ýtt á nýja skuldbindingu í geymsluna.
on:
push
2) Við munum einnig skilja myndina eftir sem handritið verður sett á grundvelli sem dæmi, þar sem Ubuntu er nokkuð ánægður með nauðsynlega virkni. Horfa á tiltæk verkfæri það verður ljóst að þetta getur verið hvaða nauðsynlega eða einfaldlega þægileg mynd (eða Docker gámur byggður á henni).
build:
runs-on: ubuntu-latest
3) Í skrefunum munum við fyrst setja upp umhverfið til að undirbúa aðalvinnuna.
3.1) farðu í útibúið sem við þurfum (venjulegt skref checkout):
- uses: actions/checkout@v1
3.2) settu upp Python:
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.7
3.4) búa til möppu þar sem vefsíðurnar verða búnar til:
- name: Make output folder
run: mkdir output
4) Til þess að vinnan á síðunni sé samkvæm, nefnilega til að eyða ekki fyrri breytingum og til að geta bætt við breytingum á vefsetrinu án árekstra, verður næsta skref að klóna vefsvæðið í hvert sinn:
breytilegt GITHUB_ACTOR GitHub setur upp sjálfan sig og þetta er notendanafnið sem þetta handrit var ræst fyrir að kenna;
breytilegt secrets.ACCESS_TOKEN þetta myndast tákn til að stjórna Github, við getum sent hana sem umhverfisbreytu með því að setja hana í flipann Secrets geymslustillingar okkar. Vinsamlega athugið að við myndun verður auðkennið okkur afhent einu sinni, það verður enginn frekari aðgangur að því. Sem og gildi Secrets hlutanna.
5) Við skulum halda áfram að búa til síðurnar okkar:
Færibreyturnar sem sendar eru til rafallsins eru ábyrgar fyrir möppunni þar sem mynduðu skrárnar verða sendar (-o output) og stillingarskrána sem við notum til að búa til (-s publishconf.py; Þú getur lesið um nálgunina við að aðskilja staðbundna stillingu og stillingu til birtingar í Pelican skjölunum).
Leyfðu mér að minna þig á hvað er í möppunni okkar output Vefgeymslan hefur þegar verið klónuð.
6) Settu upp git og skráðu breyttu skrárnar okkar:
Á þessum tímapunkti er þegar þekkt breyta notuð og vinnuskráin er tilgreind þar sem skipanirnar úr þessu skrefi verða ræstar. Skipunin um að fara í vinnumöppuna myndi annars líta út eins og - cd output.
7) Búum til skuldbindingarskilaboð, framkvæmum breytingarnar og ýtum þeim inn í geymsluna. Svo að skuldbindingin sé ekki til einskis og veldur því ekki villu í bash (úttaksniðurstaðan er það ekki 0) — fyrst skulum við athuga hvort það sé nauðsynlegt að skuldbinda sig og ýta við einhverju. Til að gera þetta notum við skipunina git diff-index --quiet --cached HEAD -- sem mun gefa út til flugstöðvarinnar 0 ef það eru engar breytingar miðað við fyrri útgáfu síðunnar, og 1 það eru svona breytingar. Síðan vinnum við úr niðurstöðu þessarar skipunar. Þannig munum við skrá gagnlegar upplýsingar um stöðu síðunnar á þessu stigi í upplýsingum um framkvæmd skriftunnar, í stað þess að hrynja sjálfkrafa og senda okkur skýrslu um skriftahrunið.
Við framkvæmum einnig þessar aðgerðir í skránni okkar með tilbúnum síðum.
- 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
Niðurstaðan
Þess vegna gerir slíkt handrit þér kleift að hugsa ekki um að búa til kyrrstæðar síður. Með því að bæta breytingum beint við einkageymslu, hvort sem það er með því að vinna með git undir hvaða kerfi sem er eða búa til skrá í gegnum GitHub vefviðmótið, mun Actions gera allt sjálft. Ef handritið hrynur óvænt verður tilkynning send á netfangið þitt.
Fullur kóði
Ég skil eftir vinnuútgáfuna mína, þar sem síðasta skrefið bætir við að senda tilkynningu um að skuldbinding hafi verið ýtt í aðalgeymsluna.
Leyndarmálin sem lýst er hér að ofan eru notuð, þar sem botnamerki og notandaauðkenni sem senda þarf skilaboðin til er bætt við.