Iintshukumo zeGitHub njenge CI/CD yesiza kwijenereyitha engatshintshiyo kunye namaPhepha eGitHub

Iintshukumo zeGitHub njenge CI/CD yesiza kwijenereyitha engatshintshiyo kunye namaPhepha eGitHub

Emva kokumjonga kancinci uHabr, ndothuswa kukuba ambalwa kakhulu amanqaku apapashiweyo ngesihloko se-GitHub's (beta) isici-Izenzo.

Kubonakala ngathi loo nto ingaphantsi inokuchazwa yinyaniso yokuba ukusebenza kusekho kuvavanyo, nangona "beta". Kodwa luphawu oluluncedo lwe-beta evumela esi sixhobo ukuba sisetyenziswe kwiindawo zokugcina zabucala. Kumalunga nokusebenza ngale teknoloji endiya kuthetha ngayo kweli nqaku.

Imbali

Ukuba siqala ngokulandelelana, ngoko kuyafaneleka ukuba sikhankanye ukuba kwinkqubo yokukhangela ukhetho olukhawulezayo, olulula, olulula nolukhululekileyo lokugcina i-website ethi "Mayelana nam", kwafuneka ndichithe ubusuku obuninzi kwaye ndidibanise amanqaku amaninzi.

Abanye abantu bakhetha ukusingathwa, abanye iseva yefu, kunye nabo bangafuni ukuqonda umsebenzi, ukusebenzisana kunye nentlawulo yazo zonke ezi ezifana nokulayisha iisayithi ezimileyo kwindawo yokugcina, ekubeni ngoku oku kunokwenziwa kuzo zombini iGitHub kunye neGitLab.

Kakade ke, olu lukhetho lomntu wonke.

Ukhetho lwam lokugqibela yaba ngamaphepha eGitHub.

Malunga namaphepha

Ngubani ongayaziyo gh-pages - oku kukhetho lokugcina amaxwebhu ngendlela yewebhusayithi kwaye inikezelwa ngaphandle kwentlawulo, kwaye ngaphezu kwamaxwebhu, kucetywayo ukugcina iiwebhusayithi zomntu. Oku kusebenza kubonelelwa yi-GitHub kubo bonke abasebenzisi kwaye iyafumaneka kwiindawo zokugcina.

Uvimba weprojekthi usebenzisa isebe gh-pages, kwindawo yomsebenzisi - indawo yokugcina eyahlukileyo enegama username.github.io ngemithombo yesiza kwi master isebe.

Ungabona iinkcukacha ezininzi kumaxwebhu, kodwa mandiqaphele ukuba iGitHub inesisa ngokumangalisayo ngokuvumela nabani na ukuba adibanise idomeyini yakhe kwindawo enjalo ngokongeza ifayile. CNAME kunye negama lesizinda kunye nokucwangcisa iDNS yomboneleli wakho wendawo kwiiseva zeGitHub.

Ndiqinisekile ukuba kukho amanqaku amaninzi apha malunga nendlela yokuphuhlisa indawo enjalo, ngoko ayisiyiyo le nto ndiza kuthetha ngayo.

Kuvela ingxaki

Ingxaki yayikukuba xa usebenzisa i-static generator, kukho imfuneko yokubhala izikripthi ezongezelelweyo kunye nokusebenzisa amathala eencwadi ukwenza lula inkqubo yokuvelisa amaphepha kunye nokuwalayisha kwindawo yokugcina. Ngokulula, ukuba ugcina imithombo kwindawo yogcino yabucala eyahlukileyo, ngoko ngalo lonke ixesha kukho naluphi na utshintsho kwisiza, bekuyimfuneko ukuhambisa imeko-bume yendawo kwisizukulwana esilandelayo samaphepha angatshintshiyo kunye nokupapashwa kwindawo ephambili yokugcina indawo.

Kukho intabalala iijeneretha ezimileyo kwaye bonke banengxaki efanayo. Ezi ntshukumo zithatha ixesha elininzi kunye nomgudu, kwaye ekugqibeleni zicothisa umsebenzi kwisiza, ngakumbi emva kokufuduka okuninzi ukusuka kwi-OS ukuya kwi-OS okanye izehlo ezinokulahleka kwedatha kwiihard drives. (kwakunjalo kwimeko yam).

Kutshanje, mhlawumbi kwisaziso se-pop-up kwiwebhusayithi okanye kwincwadana yeendaba evela kwi-GitHub, i-CI / CD esanda kwakhiwa yaqatshelwa, eyavumela ukuba ezi zenzo zenziwe ngomzamo omncinci.

Malunga nabavelisi bephepha elingatshintshiyo

Andizi kujolisa ingqwalaselo eyodwa kulo mba, kodwa ndiza kwabelana ngeethisisi ezimbalwa endize kuzo ngexesha lokukhetha kunye nokusetyenziswa koku kulandelayo:

1) khetha ijeneretha ehambelana nolwimi lwakho lokuprograma, okanye enye ecacileyo ngokusemandleni. Ndifike kule ngcamango ngexesha apho mna ngokwam kufuneka ndongeze ukusebenza kwesiza ukuba sisebenze, ndongeza iintonga zokuzinza okukhulu kunye nokuzenzekelayo. Ukongeza, esi sizathu esihle sokubhala umsebenzi owongezelelweyo ngokwakho ngendlela yeeplagi;

2) yeyiphi ijenereyitha onokuyikhetha lukhetho lomntu, kodwa kufanelekile ukuqwalasela ukuba kuntywiliselo lokuqala kumsebenzi weGitHub Pages ukusebenza, kufuneka uqale ufakele. Jekyll. Ngethamsanqa, ikuvumela ukuba uvelise iwebhusayithi kwimithombo ngokuthe ngqo kwindawo yokugcina (Ndizokuphinda oku ngokukhetha kwam).

Ukhetho lwam lwejeneretha lusekwe kwinqaku lokuqala. IsiPelican ebhalwe kwiPython ithathe indawo yeJekyll ngokulula, engaqhelekanga kum (uyisebenzise phantse unyaka). Ngenxa yoko, nokudala kunye nokuhlela amanqaku kunye nokusebenza kwiwebhusayithi kunika amava ongezelelweyo ngolwimi olunomdla kum.

__

Џџ ѕЃ ° °

Umsebenzi ophambili uya kuba kukubhala iscript (eneneni ifayile yoqwalaselo) eya kuthi ivelise ngokuzenzekelayo amaphepha angatshintshiyo ukusuka kwindawo yokugcina yabucala. Isisombululo siya kubandakanya ukusebenza kwendawo ebonakalayo. Isikripthi ngokwaso siyakongeza amaphepha asele enziwe kwindawo yokugcina uluntu.

Izixhobo zesisombululo

Izixhobo esiya kuzisebenzisa ukusombulula ingxaki:

  • Iintshukumo zeGitHub;
  • iPython3.7;
  • iPelican;
  • iGit;
  • Amaphepha eGitHub.

Uluhlu lweengxaki

Ngoko ke, emva kokuqhelana namaxwebhu kunye nokuqonda indlela izikripthi zeZenzo ezibhalwe ngayo, kwacaca ukuba le ndlela iya kusombulula ngokupheleleyo ingxaki ethe yavela. Ngexesha lokubhala, kufuneka ubhalise ukuze usebenzise lo msebenzi. kuvavanyo lwe-beta!

Iintshukumo zeGitHub njenge CI/CD yesiza kwijenereyitha engatshintshiyo kunye namaPhepha eGitHub
Inkcazo yomsebenzi omtsha nguGithub ngokwayo

Ukubhala i-Actions scripts kuqala ngokwenza ifayile enegama kwifolda .github kunye nesiqulathi seefayili zayo workflows. Oku kunokwenziwa ngesandla okanye kumhleli kwi-Actions tab kwiphepha logcino.

Iintshukumo zeGitHub njenge CI/CD yesiza kwijenereyitha engatshintshiyo kunye namaPhepha eGitHub
Umzekelo wefom yeskripthi esingenanto

Ndiza kuphawula ngokufutshane malunga nefom

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.

Masibhale eyethu ngokusekwe kwithempleyithi:

0) Unako kwakhona ukushiya igama "CI". Ngumcimbi wokungcamla.

I-1) Okulandelayo, kufuneka ukhethe isenzo / i-trigger eya kusungula iskripthi, kwimeko yethu oku kutyhala okuqhelekileyo kokuzibophelela okutsha kwindawo yokugcina.

on:
  push

2) Kwakhona siya kushiya umfanekiso ngesiseko apho iskripthi siya kuqaliswa njengomzekelo, kuba Ubuntu banelisekile ngokusebenza okuyimfuneko. Ejonge e izixhobo ezikhoyo kuyacaca ukuba oku kunokuba nawuphi na umfanekiso oyimfuneko okanye ofanelekileyo (okanye isikhongozeli seDocker esisekwe kuso).

  build:
    runs-on: ubuntu-latest

3) Kumanyathelo, siya kuqala simise indawo yokusingqongileyo ukulungiselela umsebenzi oyintloko.

3.1) yiya kwisebe esilidingayo (inyathelo eliqhelekileyo checkout):

- uses: actions/checkout@v1

3.2) faka iPython:

    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7

3.3) faka izinto ezixhomekeke kwijenereyitha yethu:

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

3.4) yenza uluhlu apho amaphepha esayithi aya kuveliswa:

   - name: Make output folder
      run: mkdir output

4) Ukuze umsebenzi kwisayithi uhambelane, oko kukuthi, ukungacimi utshintsho lwangaphambili kunye nokukwazi ukongeza utshintsho kwindawo yokugcina indawo ngaphandle kweengxabano, inyathelo elilandelayo liya kuba kukudibanisa indawo yokugcina indawo ngexesha ngalinye:

   - 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

Eli nyathelo libiza inkqubo eguquguqukayo:

  • iyaguquguquka GITHUB_ACTOR I-GitHub iyazihlohla, kwaye eli ligama lomsebenzisi eliye laphehlelelwa ngempazamo esi script;
  • iyaguquguquka secrets.ACCESS_TOKEN oku kwenziwa uphawu lolawulo lweGithub, singayidlulisa njengotshintsho lwemeko-bume ngokuyicwangcisa kwisithuba Secrets izicwangciso zethu zokugcina. Nceda uqaphele ukuba ngexesha lesizukulwana ithokheni iya kubonelelwa kuthi kube kanye, akusayi kuphinda kubekho ukufikelela kuyo. Kunye namaxabiso ezinto zeMfihlo.

5) Masiqhubele phambili ekuveliseni amaphepha ethu:

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

Iiparamitha ezigqithiselwe kumenzi zinoxanduva lolawulo apho iifayile ezenziweyo ziya kuthunyelwa (-o output) kunye nefayile yoqwalaselo esiyisebenzisayo ukwenza (-s publishconf.py; Unokufunda malunga nendlela yokwahlula uqwalaselo lwendawo kunye noqwalaselo lopapasho kuxwebhu lwePelican.).

Makhe ndikukhumbuze okukwifolda yethu output Uvimba wesiza sele wenziwe umboniso.

6) Masiseke i-git kwaye sibonise iifayile zethu ezitshintshileyo:

    - 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

Ngeli xesha, i-variable esele eyaziwayo isetyenzisiweyo kwaye i-directory yokusebenza ibonakalisiwe apho imiyalelo evela kweli nyathelo iya kuqaliswa. Umyalelo wokuya kulawulo olusebenzayo ngenye indlela uya kujongeka ngathi - cd output.

7) Masenze umyalezo wokuzibophelela, senze utshintsho kwaye silutyhalele kwindawo yokugcina. Ukuze ukuzibophelela akulolize kwaye ke akuvelisi mpazamo kwi-bash (isiphumo esiphumayo asikho 0) — okokuqala, makhe sijonge ukuba kuyimfuneko na ukuzibophelela nokutyhala into ethile konke konke. Ukwenza oku sisebenzisa umyalelo git diff-index --quiet --cached HEAD -- eya kuvelisa kwi-terminal 0 ukuba akukho lutshintsho malunga noguqulelo lwangaphambili lwesiza, kwaye 1 kukho utshintsho olunjalo. Emva koko siqhuba isiphumo salo myalelo. Ngaloo ndlela, kulwazi malunga nokwenziwa kweskripthi, siya kurekhoda ulwazi oluluncedo malunga nemeko yesayithi kweli nqanaba, endaweni yokuphazamiseka ngokuzenzekelayo kwaye usithumelele ingxelo malunga nokuphahlazeka kweskripthi.

Sikwaqhuba ezi ntshukumo kuluhlu lwethu kunye namaphepha enziwe sele elungile.

   - 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

Isiphumo

Ngenxa yoko, iskripthi esinjalo sikuvumela ukuba ungacingi ngokudala amaphepha amileyo. Ngokongeza utshintsho ngokuthe ngqo kwindawo yokugcina yangasese, nokuba kukusebenza kunye ne-git kuyo nayiphi na inkqubo okanye ukudala ifayile nge-interface yewebhu ye-GitHub, iintshukumo ziya kwenza yonke into ngokwazo. Ukuba iskripthi siyawa ngokungalindelekanga, isaziso siya kuthunyelwa kwi-imeyile yakho.

Ikhowudi epheleleyo

Ndiza kuyishiya inguqulelo yam yokusebenza, apho inyathelo lokugqibela longeza ukuthumela isaziso sokuba ukuzibophelela kutyhalelwe kwindawo yokugcina.

Iimfihlo ezichazwe ngasentla zisetyenzisiweyo, apho ithokheni ye-bot kunye ne-ID yomsebenzisi ekufuneka umyalezo uthunyelwe kuyo yongezwa.

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

Izikrini

Iintshukumo zeGitHub njenge CI/CD yesiza kwijenereyitha engatshintshiyo kunye namaPhepha eGitHub
Isiphumo solunye lwemitsi eboniswe kwi-Actions tab yendawo yokugcina

Iintshukumo zeGitHub njenge CI/CD yesiza kwijenereyitha engatshintshiyo kunye namaPhepha eGitHub
Umyalezo osuka kwibhot malunga nokugqitywa kweskripthi

amakhonkco aluncedo

Ukuqonda Izenzo
Isivakalisi sezenzo
Uluhlu lwezinto ezibangelayo
Ukhetho lweemeko-bume zenyani
Amaphepha eGithub
Uluhlu lwe-Static Generator

umthombo: www.habr.com

Yongeza izimvo