ProHoster > blog > Gweinyddiaeth > Gweithredoedd GitHub fel CI/CD ar gyfer Safle Generadur Statig a Tudalennau GitHub
Gweithredoedd GitHub fel CI/CD ar gyfer Safle Generadur Statig a Tudalennau GitHub
Ar ôl sgwrio Habr ychydig, cefais fy synnu mai ychydig iawn o erthyglau sydd wedi'u cyhoeddi ar bwnc nodwedd GitHub (beta) - Actions.
Mae'n ymddangos y gellir esbonio tanddatganiad o'r fath gan y ffaith bod y swyddogaeth yn dal i gael ei phrofi, er yn “beta”. Ond mae'n nodwedd ddefnyddiol o'r beta sy'n caniatáu i'r offeryn hwn gael ei ddefnyddio mewn storfeydd preifat. Mae'n ymwneud â gweithio gyda'r dechnoleg hon y byddaf yn siarad amdano yn yr erthygl hon.
Cynhanes
Os byddwn yn dechrau mewn trefn, yna mae'n debyg ei bod yn werth nodi, yn y broses o chwilio am opsiwn cyflym, cyfleus, hawdd a rhad ac am ddim ar gyfer storio gwefan bersonol "Amdanaf i", bu'n rhaid i mi dreulio sawl noson a chribo trwy lawer o erthyglau.
Mae rhai pobl yn dewis cynnal, eraill yn weinydd cwmwl, a'r rhai nad ydyn nhw eisiau deall y gwaith, y rhyngweithio a'r taliad am hyn i gyd fel uwchlwytho gwefannau sefydlog i ystorfa, ers nawr gellir gwneud hyn ar GitHub a GitLab.
Wrth gwrs, mae hyn yn ddewis personol pawb.
Fy newis olaf oedd GitHub Pages.
Am Dudalennau
Pwy sydd ddim yn gwybod gh-pages - mae hwn yn opsiwn ar gyfer storio dogfennaeth ar ffurf gwefan ac fe'i darperir yn rhad ac am ddim, ac yn ogystal â dogfennaeth, bwriedir storio gwefannau personol hefyd. Darperir y swyddogaeth hon gan GitHub i bob defnyddiwr ac mae ar gael yng ngosodiadau'r ystorfa.
Mae ystorfa'r prosiect yn defnyddio cangen gh-pages, ar gyfer safle defnyddiwr - ystorfa ar wahân gyda'r enw username.github.io gyda ffynonellau safle yn master cangen.
Gallwch weld mwy o fanylion mewn dogfennaeth, ond gadewch i mi nodi bod GitHub yn rhyfeddol o hael wrth ganiatáu i unrhyw un gysylltu eu parth eu hunain â gwefan o'r fath trwy ychwanegu ffeil yn unig CNAME gyda'r enw parth a sefydlu DNS eich darparwr parth ar y gweinyddwyr GitHub.
Rwy’n siŵr bod llawer o erthyglau yma ar sut i ddatblygu gwefan o’r fath, felly nid dyna beth rydw i’n mynd i siarad amdano ymhellach.
Problem yn codi
Y broblem oedd, wrth ddefnyddio generadur statig, bod angen ysgrifennu sgriptiau ychwanegol a defnyddio llyfrgelloedd i symleiddio'r broses o gynhyrchu tudalennau a'u llwytho i'r gadwrfa. Yn syml, os ydych chi'n storio'r ffynonellau mewn ystorfa breifat ar wahân, yna bob tro y byddai unrhyw newid ar y wefan, roedd angen defnyddio'r amgylchedd lleol ar gyfer y genhedlaeth ddilynol o dudalennau sefydlog a chyhoeddi ym mhrif gadwrfa'r safle.
Mae digonedd generaduron sefydlog ac mae ganddyn nhw i gyd yr un broblem. Mae'r camau hyn yn cymryd gormod o amser ac ymdrech, ac yn y pen draw yn arafu gwaith ar y wefan, yn enwedig ar ôl sawl mudo o OS i OS neu ddigwyddiadau gyda cholli data ar yriannau caled (dyma oedd yr achos yn fy achos i).
Yn ddiweddar, naill ai mewn hysbysiad naid ar y wefan neu mewn cylchlythyr gan GitHub, sylwyd ar CI/CD newydd ei adeiladu, a oedd yn caniatáu i'r camau hyn gael eu cyflawni heb fawr o ymdrech.
Ynglŷn â generaduron tudalennau sefydlog
Ni fyddaf yn canolbwyntio sylw arbennig ar yr is-eitem hwn, ond byddaf yn rhannu cwpl o draethodau ymchwil y deuthum atynt wrth ddewis a defnyddio'r canlynol:
1) dewis generadur sy'n addas i'ch iaith raglennu, neu un sydd mor glir â phosib. Deuthum i'r syniad hwn ar adeg pan oedd yn rhaid i mi fy hun ychwanegu rhywfaint o ymarferoldeb i'r wefan weithio, ychwanegu baglau ar gyfer ei sefydlogrwydd a'i awtomeiddio mwy. Yn ogystal, mae hwn yn rheswm da i ysgrifennu swyddogaethau ychwanegol eich hun ar ffurf ategion;
2) pa generadur i'w ddewis sy'n ddewis personol, ond mae'n werth ystyried, ar gyfer y trochi cychwynnol yng ngwaith swyddogaeth GitHub Pages, bod yn rhaid i chi osod yn gyntaf Jekyll. Yn ffodus, mae'n caniatáu ichi gynhyrchu gwefan o ffynonellau yn uniongyrchol yn y gadwrfa (Byddaf yn ailadrodd hyn gyda fy newis).
Mae fy newis o generadur yn seiliedig ar y pwynt cyntaf. Pelican sydd wedi'i ysgrifennu yn Python yn hawdd disodli Jekyll, sy'n estron i mi (wedi ei ddefnyddio am bron i flwyddyn). O ganlyniad, mae hyd yn oed creu a golygu erthyglau a gweithio ar wefan yn rhoi profiad ychwanegol mewn iaith sy’n ddiddorol i mi.
__
Datganiad o'r broblem
Y brif dasg fydd ysgrifennu sgript (ffeil ffurfweddu mewn gwirionedd) a fyddai'n cynhyrchu tudalennau sefydlog yn awtomatig o gadwrfa breifat. Bydd yr ateb yn cynnwys ymarferoldeb amgylchedd rhithwir. Bydd y sgript ei hun yn ychwanegu tudalennau parod i'r gadwrfa gyhoeddus.
Offer ar gyfer datrysiad
Offer y byddwn yn eu defnyddio i ddatrys y broblem:
Camau Gweithredu GitHub;
Python3.7;
Pelican;
Git;
Tudalennau GitHub.
Yr ateb
Felly, ar ôl dod yn gyfarwydd â'r ddogfennaeth ychydig a deall sut mae sgriptiau ar gyfer Camau Gweithredu yn cael eu hysgrifennu, daeth yn amlwg y bydd y mecanwaith hwn yn datrys y broblem sydd wedi codi yn llwyr. Ar adeg ysgrifennu, rhaid i chi danysgrifio i ddefnyddio'r swyddogaeth hon.ar gyfer profion beta!
Disgrifiad o'r swyddogaeth newydd gan Github ei hun
Mae ysgrifennu sgript Camau Gweithredu yn dechrau trwy greu ffeil a enwir mewn ffolder .github a'i is-ffolder workflows. Gellir gwneud hyn naill ai â llaw neu gan y golygydd yn y tab Camau Gweithredu ar dudalen y gadwrfa.
Enghraifft o ffurflen sgript wag
Gwnaf sylwadau byr ar y ffurflen
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.
Gadewch i ni ysgrifennu ein rhai ein hunain yn seiliedig ar y templed:
0) Gallwch hefyd adael yr enw “CI”. Mater o flas ydyw.
1) Nesaf, mae angen i chi ddewis y weithred / sbardun a fydd yn lansio'r sgript, yn ein hachos ni dyma'r gwthiad arferol o ymrwymiad newydd i'r ystorfa.
on:
push
2) Byddwn hefyd yn gadael y ddelwedd ar y sail y bydd y sgript yn cael ei lansio fel enghraifft, gan fod Ubuntu yn eithaf bodlon â'r swyddogaeth angenrheidiol. Edrych ar offer sydd ar gael daw'n amlwg y gall hon fod yn unrhyw ddelwedd angenrheidiol neu gyfleus (neu gynhwysydd Docker yn seiliedig arno).
build:
runs-on: ubuntu-latest
3) Yn y camau, byddwn yn sefydlu'r amgylchedd yn gyntaf i baratoi ar gyfer y prif waith.
3.1) mynd i'r gangen sydd ei angen arnom (cam safonol checkout):
- uses: actions/checkout@v1
3.2) gosod Python:
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.7
3.4) creu cyfeiriadur lle bydd tudalennau'r wefan yn cael eu cynhyrchu:
- name: Make output folder
run: mkdir output
4) Er mwyn i’r gwaith ar y safle fod yn gyson, sef peidio â dileu newidiadau blaenorol ac i allu ychwanegu newidiadau i ystorfa’r safle heb wrthdaro, y cam nesaf fydd clonio’r ystorfa safle bob tro:
amrywiol GITHUB_ACTOR Mae GitHub yn gosod ei hun, a dyma'r enw defnyddiwr y lansiwyd y sgript hon drwyddo;
newidiol secrets.ACCESS_TOKEN mae hyn yn cael ei gynhyrchu tocyn ar gyfer rheoli Github, gallwn ei basio fel newidyn amgylchedd trwy ei osod yn y tab Secrets gosodiadau ein cadwrfa. Sylwch, yn ystod y cyfnod cynhyrchu, bydd y tocyn yn cael ei ddarparu i ni unwaith, ni fydd mynediad pellach iddo. Yn ogystal â gwerthoedd yr eitemau Cyfrinachau.
5) Gadewch i ni symud ymlaen i gynhyrchu ein tudalennau:
Mae'r paramedrau a drosglwyddir i'r generadur yn gyfrifol am y cyfeiriadur lle bydd y ffeiliau a gynhyrchir yn cael eu hanfon (-o output) a'r ffeil ffurfweddu a ddefnyddiwn i gynhyrchu (-s publishconf.py; Gallwch ddarllen am y dull o wahanu'r ffurfwedd leol a'r ffurfwedd i'w gyhoeddi yn nogfennaeth Pelican).
Gadewch imi eich atgoffa beth sydd yn ein ffolder output Mae ystorfa'r safle eisoes wedi'i chlonio.
6) Gadewch i ni sefydlu git a mynegeio ein ffeiliau newydd:
Ar y pwynt hwn, defnyddir newidyn sydd eisoes yn hysbys a nodir y cyfeiriadur gweithio lle bydd y gorchmynion o'r cam hwn yn cael eu lansio. Byddai'r gorchymyn i fynd i'r cyfeiriadur gweithio fel arall yn edrych fel - cd output.
7) Gadewch i ni gynhyrchu neges ymrwymo, ymrwymo'r newidiadau a'u gwthio i'r gadwrfa. Fel nad yw'r ymrwymiad yn ofer ac felly nid yw'n cynhyrchu gwall mewn bash (nid yw'r canlyniad allbwn 0) - yn gyntaf, gadewch i ni wirio a oes angen ymrwymo a gwthio rhywbeth o gwbl. I wneud hyn rydym yn defnyddio'r gorchymyn git diff-index --quiet --cached HEAD -- a fydd yn allbwn i'r derfynell 0 os nad oes unrhyw newidiadau mewn perthynas â fersiwn flaenorol y wefan, ac 1 mae newidiadau o'r fath. Yna rydym yn prosesu canlyniad y gorchymyn hwn. Felly, yn y wybodaeth am gyflawni'r sgript, byddwn yn cofnodi gwybodaeth ddefnyddiol am gyflwr y wefan ar hyn o bryd, yn lle chwalu'n awtomatig ac anfon adroddiad am ddamwain y sgript atom.
Rydym hefyd yn cyflawni'r camau hyn yn ein cyfeiriadur gyda thudalennau parod.
- 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
Canlyniad
O ganlyniad, mae sgript o'r fath yn caniatáu ichi beidio â meddwl am greu tudalennau sefydlog. Trwy ychwanegu newidiadau yn uniongyrchol i ystorfa breifat, boed trwy weithio gyda git o dan unrhyw system neu greu ffeil trwy ryngwyneb gwe GitHub, bydd Actions yn gwneud popeth eu hunain. Os bydd y sgript yn chwalu'n annisgwyl, bydd hysbysiad yn cael ei anfon i'ch e-bost.
Cod llawn
Gadawaf fy fersiwn waith, lle mae'r cam olaf yn ychwanegu anfon hysbysiad bod ymrwymiad wedi'i wthio i'r brif gadwrfa.
Defnyddir y Cyfrinachau a ddisgrifir uchod, lle mae'r tocyn bot a'r ID defnyddiwr y mae angen anfon y neges ato yn cael eu hychwanegu.