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!

GitHub aðgerðir sem CI/CD fyrir síðu á kyrrstöðurafalli og GitHub síður
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.

GitHub aðgerðir sem CI/CD fyrir síðu á kyrrstöðurafalli og GitHub síður
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.3) settu upp ósjálfstæði rafallsins okkar:

    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

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:

   - 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

Þetta skref kallar á kerfisbreytur:

  • 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:

   - name: Generate static pages
      run: pelican content -o output -s publishconf.py

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:

    - 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

Á þ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ð.

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

Skjámyndir

GitHub aðgerðir sem CI/CD fyrir síðu á kyrrstöðurafalli og GitHub síður
Niðurstaða einni af keyrslunum sem sýndar eru á Aðgerðir flipanum í upprunageymslunni

GitHub aðgerðir sem CI/CD fyrir síðu á kyrrstöðurafalli og GitHub síður
Skilaboð frá bóndanum um frágang handritsins

gagnlegir krækjur

Að skilja aðgerðir
Aðgerðir setningafræði
Listi yfir kveikjur
Valkostir fyrir sýndarumhverfi
Github síður
Static Generator listi

Heimild: www.habr.com

Bæta við athugasemd