Izenzo ze-GitHub njenge-CI/CD yesayithi kujeneretha engashintshi kanye namakhasi e-GitHub

Izenzo ze-GitHub njenge-CI/CD yesayithi kujeneretha engashintshi kanye namakhasi e-GitHub

Ngemva kokumhlola kancane u-Habr, ngamangala ukuthi zimbalwa kakhulu izindatshana ezishicilelwe esihlokweni sesici sika-GitHub's (beta) - Izenzo.

Kungase kubonakale sengathi lokho kuchaza kancane kungachazwa ngokuthi ukusebenza kusahlolwa, nakuba "i-beta". Kodwa isici esiwusizo se-beta esivumela leli thuluzi ukuthi lisetshenziswe ezindaweni zokugcina eziyimfihlo. Mayelana nokusebenza nalobu buchwepheshe engizokhuluma ngabo kulesi sihloko.

Umlando wangaphambili

Uma siqala ngokulandelana, khona-ke kuhle ukusho ukuthi ngesikhathi sokufuna inketho esheshayo, elula, elula futhi yamahhala yokugcina iwebhusayithi yomuntu siqu ethi "Mayelana Nami", kwadingeka ngichithe ubusuku obuningana futhi ngihlanganise izihloko eziningi.

Abanye abantu bakhetha ukusingathwa, abanye iseva yefu, nalabo abangafuni ukuqonda umsebenzi, ukusebenzisana kanye nenkokhelo yakho konke lokhu njengokulayisha amasayithi amile endaweni yokugcina, kusukela manje lokhu kungenziwa kokubili i-GitHub ne-GitLab.

Yiqiniso, lokhu kuyisinqumo sawo wonke umuntu.

Ukukhetha kwami ​​​​kokugcina bekuyi-GitHub Pages.

Mayelana Namakhasi

Ubani ongazi gh-pages - lena inketho yokugcina imibhalo ngendlela yewebhusayithi futhi inikezwa mahhala, futhi ngaphezu kwemibhalo, kuhlongozwa nokuthi kugcinwe amawebhusayithi omuntu. Lokhu kusebenza kunikezwa i-GitHub kubo bonke abasebenzisi futhi kuyatholakala kuzilungiselelo zekhosombe.

Inqolobane yephrojekthi isebenzisa igatsha gh-pages, kusayithi lomsebenzisi - indawo yokugcina ehlukile enegama username.github.io ngemithombo yesayithi ku master igatsha.

Ungabona imininingwane eyengeziwe emibhalweni, kodwa ake ngiqaphele ukuthi i-GitHub inomusa ngokumangalisayo ngokuvumela noma ubani ukuthi axhumanise isizinda sakhe kusayithi elinjalo ngokumane wengeze ifayela. CNAME ngegama lesizinda nokusetha i-DNS yomhlinzeki wakho wesizinda kumaseva e-GitHub.

Nginesiqiniseko sokuthi ziningi izindatshana lapha ezimayelana nendlela yokuthuthukisa isiza esinjalo, ngakho-ke akukhona lokho engisazokhuluma ngakho ngokuqhubekayo.

Inkinga iyavela

Inkinga yayiwukuthi lapho usebenzisa ijeneretha emile, kunesidingo sokubhala imibhalo eyengeziwe nokusebenzisa imitapo yolwazi ukuze kube lula inqubo yokukhiqiza amakhasi nokuwalayisha endaweni yokugcina. Kalula nje, uma ugcina imithombo endaweni yokugcina eyimfihlo ehlukile, khona-ke ngaso sonke isikhathi lapho kukhona noma yiluphi ushintsho esizeni, bekudingeka ukuthi kusetshenziswe indawo yendawo ukuze kusungulwe amakhasi amile kanye nokushicilelwa endaweni eyinhloko yendawo yokugcina.

Kukhona inala amajeneretha amile futhi bonke banenkinga efanayo. Lezi zenzo zithatha isikhathi esiningi nomzamo, futhi ekugcineni zibambezela umsebenzi kusayithi, ikakhulukazi ngemva kokufuduka okuningana ukusuka ku-OS kuya ku-OS noma izigameko zokulahleka kwedatha kuma-hard drive. (kwakunjalo kimi).

Muva nje, kungaba kusaziso se-pop-up kuwebhusayithi noma ku-newsletter evela ku-GitHub, kuqashelwe i-CI/CD esanda kwakhiwa, evumele lezi zenzo ukuthi zenziwe ngomzamo omncane.

Mayelana namajeneretha amakhasi amile

Ngeke ngigxilise ukunaka okukhethekile kule nto encanyana, kodwa ngizokwabelana ngemibono embalwa engifike kuyo ngesikhathi ngikhetha nokusebenzisa okulandelayo:

1) khetha ijeneretha evumelana nolimi lwakho lohlelo, noma ecace ngangokunokwenzeka. Ngifike kulo mbono ngesikhathi lapho mina ngokwami ​​kufanele ngengeze ukusebenza okuthile ukuze isayithi lisebenze, ngengeze izinduku zokuzinza ukuze libe nokuzinza okukhulu nokuzenzakalela. Ngaphezu kwalokho, lesi yisizathu esihle sokubhala ukusebenza okwengeziwe ngokwakho ngendlela yama-plugin;

2) iyiphi ijeneretha ongakhetha ukuyikhetha, kodwa kufanelekile ukucabangela ukuthi ukucwiliswa kokuqala emsebenzini wokusebenza kwamakhasi we-GitHub, kufanele uqale ufake Jekyll. Ngenhlanhla, ikuvumela ukuthi ukhiqize iwebhusayithi kusuka emithonjeni ngqo endaweni yokugcina (Ngizophinda lokhu ngokukhetha kwami).

Ukukhetha kwami ​​i-generator kusekelwe ephuzwini lokuqala. I-Pelican ebhalwe ngePython ithatha indawo kaJekyll kalula, engingayazi (usebenzise cishe unyaka). Ngenxa yalokho, ngisho nokudala nokuhlela izindatshana kanye nokusebenza kuwebhusayithi kunikeza ulwazi olwengeziwe ngolimi olungithakaselayo.

__

Ukwakheka kwenkinga

Umsebenzi oyinhloko kuzoba ukubhala umbhalo (empeleni ifayela lokumisa) elizokhiqiza ngokuzenzakalelayo amakhasi amile asuka endaweni yokugcina eyimfihlo. Isixazululo sizobandakanya ukusebenza kwendawo ebonakalayo. Umbhalo ngokwawo uzongeza amakhasi enziwe ngomumo endaweni yokugcina yomphakathi.

Amathuluzi esixazululo

Amathuluzi esizowasebenzisa ukuxazulula inkinga:

  • Izenzo ze-GitHub;
  • I-Python 3.7;
  • I-Pelican;
  • I-Git;
  • Amakhasi we-GitHub.

Ukuxazulula izinkinga

Ngakho-ke, ngemva kokujwayelana nemibhalo kancane nokuqonda ukuthi imibhalo yezenzo ibhalwe kanjani, kwacaca ukuthi le nqubo izoxazulula ngokuphelele inkinga ekhona. Ngesikhathi sokubhala, kufanele ubhalise ukuze usebenzise lolu hlelo lokusebenza. ukuhlolwa kwe-beta!

Izenzo ze-GitHub njenge-CI/CD yesayithi kujeneretha engashintshi kanye namakhasi e-GitHub
Incazelo yokusebenza okusha kwe-Github ngokwayo

Ukubhala iskripthi Sezenzo kuqala ngokwakha ifayela elinegama kufolda .github kanye nefolda yayo engaphansi workflows. Lokhu kungenziwa ngokwenza noma kumhleli kuthebhu ethi Izenzo ekhasini lenqolobane.

Izenzo ze-GitHub njenge-CI/CD yesayithi kujeneretha engashintshi kanye namakhasi e-GitHub
Isibonelo sefomu lesikripthi esingenalutho

Ngizophawula kafushane ngefomu

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 ezethu ngokusekelwe kusifanekiso:

0) Ungakwazi futhi ukushiya igama elithi "CI". Kuyindaba yokunambitha.

1) Okulandelayo, udinga ukukhetha isenzo/i-trigger ezokwethula iskripthi, kithina lokhu ukucindezela okujwayelekile kokuzibophezela okusha endaweni yokugcina.

on:
  push

2) Sizophinde sishiye isithombe ngesisekelo lapho iskripthi sizokwethulwa njengesibonelo, njengoba Ubuntu benelisekile ngokusebenza okudingekayo. Bukela i amathuluzi atholakalayo kuyacaca ukuthi lokhu kungaba yinoma yisiphi isithombe esidingekayo noma esilula (noma isitsha se-Docker esisekelwe kuso).

  build:
    runs-on: ubuntu-latest

3) Ezinyathelweni, sizoqala simise imvelo ukuze silungiselele umsebenzi oyinhloko.

3.1) iya egatsheni esilidingayo (isinyathelo esijwayelekile 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 ukuncika kwejeneretha yethu:

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

3.4) dala uhla lwemibhalo lapho amakhasi esayithi azokhiqizwa khona:

   - name: Make output folder
      run: mkdir output

4) Ukuze umsebenzi esakhiweni uhambisane, okungukuthi, ukungasusi izinguquko zangaphambilini futhi ukwazi ukwengeza izinguquko endaweni yesikhombi ngaphandle kwezingxabano, isinyathelo esilandelayo kuzoba ukuhlanganisa inqolobane yesayithi isikhathi ngasinye:

   - 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

Lesi sinyathelo sibiza okuguquguqukayo kwesistimu:

  • okuguquguqukayo GITHUB_ACTOR I-GitHub iyazifaka yona, futhi leli igama lomsebenzisi okuye kwaqaliswa ngalo iphutha lesi script;
  • okuguquguqukayo secrets.ACCESS_TOKEN lokhu kukhiqizwa ithokheni yokuphatha i-Github, singayidlulisela njengokuguquguquka kwendawo ngokuyibeka kuthebhu Secrets izilungiselelo zethu zokugcina. Sicela uqaphele ukuthi ngesikhathi sokukhiqiza ithokheni izohlinzekwa kithi kanye, ngeke kusaba khona ukufinyelela kulo. Kanye namanani wezinto Eziyimfihlo.

5) Masiqhubekele phambili ekukhiqizeni amakhasi ethu:

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

Amapharamitha adluliselwe kujeneretha anesibopho senkomba lapho amafayela akhiqiziwe azothunyelwa khona (-o output) kanye nefayela lokumisa esilisebenzisayo ukwenza (-s publishconf.py; Ungafunda mayelana nendlela yokuhlukanisa ukucushwa kwendawo kanye nokuhlelwa kokushicilelwa kumadokhumenti e-Pelican.).

Ake ngikukhumbuze okukufolda yethu output Inqolobane yesayithi isivele yenziwe yakhiwe.

6) Masimise i-git bese sikhomba amafayela ethu ashintshiwe:

    - 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

Kuleli qophelo, okuguquguqukayo osekwaziwa kakade kuyasetshenziswa futhi uhla lwemibhalo olusebenzayo lukhonjisiwe lapho kuzokwethulwa khona imiyalo evela kulesi sinyathelo. Umyalo wokuya kumkhombandlela osebenzayo ubungabukeka sengathi - cd output.

7) Ake sikhiqize umlayezo wokuzibophezela, senze izinguquko futhi sizifake endaweni yokugcina. Ukuze ukuzinikela akulona ize ngakho-ke akukhiqizi iphutha ku-bash (umphumela wokuphuma awukho 0) — okokuqala, ake sihlole ukuthi kudingekile yini ukuzibophezela nokuphusha okuthile. Ukwenza lokhu sisebenzisa umyalo git diff-index --quiet --cached HEAD -- ezophuma kutheminali 0 uma zingekho izinguquko ezihlobene nenguqulo yangaphambilini yesayithi, futhi 1 zikhona izinguquko ezinjalo. Bese sicubungula umphumela walo myalo. Ngakho-ke, olwazini olumayelana nokukhishwa kweskripthi, sizorekhoda ulwazi oluwusizo mayelana nesimo sesayithi kulesi sigaba, esikhundleni sokuphahlazeka ngokuzenzakalelayo futhi sithumele umbiko mayelana nokuphahlazeka kweskripthi.

Siphinde senza lezi zenzo kunkomba yethu ngamakhasi enziwe ngomumo.

   - 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

Umphumela

Ngenxa yalokho, iskripthi esinjalo sikuvumela ukuthi ungacabangi ngokudala amakhasi amile. Ngokungeza izinguquko ngqo endaweni yokugcina yangasese, kungakhathaliseki ukuthi ngokusebenza ne-git kunoma iyiphi isistimu noma ngokudala ifayela ngokusebenzisa isixhumi esibonakalayo sewebhu ye-GitHub, Izenzo zizokwenza yonke into ngokwazo. Uma umbhalo uphahlazeka kungazelelwe, isaziso sizothunyelwa ku-imeyili yakho.

Ikhodi egcwele

Ngizoshiya inguqulo yami yokusebenza, lapho isinyathelo sokugcina sengeza ukuthumela isaziso sokuthi isivumelwano siphushelwe endaweni yokugcina enkulu.

Izimfihlo ezichazwe ngenhla zisetshenziswa, lapho ithokheni ye-bot kanye ne-ID yomsebenzisi okumele umlayezo uthunyelwe kuyo yengezwe.

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

Izithombe-skrini

Izenzo ze-GitHub njenge-CI/CD yesayithi kujeneretha engashintshi kanye namakhasi e-GitHub
Umphumela wokukodwa kokuqalisa oboniswe kuthebhu ethi Izenzo yekhosombe lomthombo

Izenzo ze-GitHub njenge-CI/CD yesayithi kujeneretha engashintshi kanye namakhasi e-GitHub
Umlayezo ovela ku-bot mayelana nokuqedwa kombhalo

Izixhumanisi eziwusizo

Ukuqonda Izenzo
I-syntax yezenzo
Uhlu lwezibangeli
Izinketho Zemvelo Ezingokoqobo
Amakhasi we-Github
Uhlu lwe-Static Generator

Source: www.habr.com

Engeza amazwana