GitHub Zochita monga CI/CD yatsamba pa jenereta yokhazikika ndi masamba a GitHub

GitHub Zochita monga CI/CD yatsamba pa jenereta yokhazikika ndi masamba a GitHub

Nditamuyang'ana Habr pang'ono, ndidadabwa kuti zolemba zochepa kwambiri zasindikizidwa pamutu wa GitHub's (beta) - Zochita.

Zingawoneke kuti kuperewera koteroko kungafotokozedwe ndi mfundo yakuti ntchitoyo idakali yoyesedwa, ngakhale "beta". Koma ndi gawo lothandiza la beta lomwe limalola chida ichi kuti chigwiritsidwe ntchito m'malo osungira achinsinsi. Ndizokhudza kugwira ntchito ndi lusoli lomwe ndilankhule m'nkhaniyi.

Mbiri yakale

Ngati tiyamba mwadongosolo, ndiye kuti ndiyenera kutchulapo kuti pofufuza njira yofulumira, yosavuta, yosavuta komanso yaulere yosungira tsamba la "About Me" laumwini, ndinayenera kukhala usiku wambiri ndikusakaniza zolemba zambiri.

Anthu ena amasankha kuchititsa, ena seva yamtambo, ndi omwe sakufuna kumvetsetsa ntchito, kuyanjana ndi kulipira kwa zonsezi monga kukweza malo osasunthika kumalo osungirako zinthu, popeza tsopano izi zikhoza kuchitika pa GitHub ndi GitLab .

Inde, ichi ndi chosankha cha aliyense payekha.

Chosankha changa chomaliza chinali Masamba a GitHub.

Za Masamba

Ndani sakudziwa gh-pages - iyi ndi njira yosungiramo zolemba ngati tsamba la webusayiti ndipo zimaperekedwa kwaulere, komanso kuphatikiza zolemba, zimaperekedwanso kusunga mawebusayiti amunthu. Ntchitoyi imaperekedwa ndi GitHub kwa onse ogwiritsa ntchito ndipo imapezeka muzosungirako.

Malo osungirako polojekiti amagwiritsa ntchito nthambi gh-pages, kwa malo ogwiritsira ntchito - malo osiyana ndi dzina username.github.io ndi magwero atsamba mu master nthambi.

Mutha kuwona zambiri mu zolembedwa, koma ndiroleni ndizindikire kuti GitHub ndiwowolowa manja modabwitsa kulola aliyense kuti alumikizane ndi tsamba lawolo pongowonjezera fayilo. CNAME ndi dzina lachidziwitso ndikukhazikitsa DNS ya omwe akukupatsani domeni pa ma seva a GitHub.

Ndikukhulupirira kuti pali zolemba zambiri pano za momwe mungapangire tsamba lotere, kotero sindizo zomwe ndilankhule nazo.

Kuchitika kwa vuto

Vuto linali loti mukamagwiritsa ntchito jenereta yosasunthika, pamafunika kulemba zolemba zowonjezera ndikugwiritsa ntchito malaibulale kuti muchepetse njira yopangira masamba ndikuyika munkhokwe. Mwachidule, ngati musunga magwero m'malo osungira achinsinsi, ndiye kuti nthawi iliyonse pakhala kusintha kulikonse pa tsambalo, kunali koyenera kuyika malo am'deralo kwa m'badwo wotsatira wamasamba osasunthika ndikufalitsa patsamba lalikulu.

Pali zochuluka jenereta static ndipo onse ali ndi vuto lomwelo. Zochita izi zimatenga nthawi yambiri komanso khama, ndipo pamapeto pake zimachedwetsa ntchito patsambalo, makamaka pambuyo pa kusamuka kangapo kuchokera ku OS kupita ku OS kapena zochitika zotayika kwa data pama hard drive. (Izi zinali choncho kwa ine).

Posachedwapa, mwina pazidziwitso za pop-up pa webusayiti kapena m'makalata ochokera ku GitHub, CI/CD yatsopano idawonedwa, zomwe zidapangitsa kuti zitheke kuchita izi mosavutikira.

Za majenereta osasintha masamba

Sindiyang'ana kwambiri kachinthu kakang'ono, koma ndigawana mfundo zingapo zomwe ndidabwerako posankha ndikugwiritsa ntchito izi:

1) sankhani jenereta yomwe ikugwirizana ndi chilankhulo chanu, kapena chomveka bwino momwe mungathere. Ndidafika pamalingaliro awa panthawi yomwe ine ndekha ndimayenera kuwonjezera magwiridwe antchito kuti tsambalo ligwire ntchito, kuwonjezera ndodo kuti likhale lokhazikika komanso lokhazikika. Kuphatikiza apo, ichi ndi chifukwa chabwino cholembera zina zowonjezera nokha mu mawonekedwe a mapulagini;

2) jenereta iti yomwe mungasankhe ndikusankha kwanu, koma ndikofunikira kulingalira kuti kumizidwa koyambirira pantchito ya Masamba a GitHub, muyenera kukhazikitsa kaye. Jekyll. Mwamwayi, zimakulolani kuti mupange tsamba la webusayiti kuchokera ku magwero mwachindunji munkhokwe (Ndibwereza izi ndi kusankha kwanga).

Kusankha kwanga kwa jenereta kumachokera pa mfundo yoyamba. Pelikani zomwe zidalembedwa mu Python zidalowa m'malo mwa Jekyll mosavuta, zomwe ndi zachilendo kwa ine (anagwiritsa ntchito pafupifupi chaka chimodzi). Chotsatira chake, ngakhale kupanga ndi kusintha zolemba ndikugwira ntchito pa webusaiti kumapereka chidziwitso chowonjezera m'chinenero chomwe chimandisangalatsa.

__

Kupanga kwa vuto

Ntchito yayikulu idzakhala kulemba script (kwenikweni fayilo yosinthira) yomwe imangopanga masamba osasunthika kuchokera kumalo osungira. Yankho lidzakhudza magwiridwe antchito a chilengedwe. Script yokha idzawonjezera masamba okonzeka ku malo osungira anthu.

Zida zothetsera

Zida zomwe tingagwiritse ntchito kuthetsa vutoli:

  • Zochita za GitHub;
  • Python3.7;
  • Pelican;
  • Git;
  • Masamba a GitHub.

Kuthetsa mavuto

Choncho, titadziwana pang'ono ndi zolembazo ndikumvetsetsa momwe malemba a Zochita amalembedwera, zinaonekeratu kuti makinawa adzathetsa vuto lomwe labuka. Panthawi yolemba, muyenera kulembetsa kuti mugwiritse ntchito ntchitoyi. kuyesa kwa beta!

GitHub Zochita monga CI/CD yatsamba pa jenereta yokhazikika ndi masamba a GitHub
Kufotokozera za magwiridwe antchito atsopano a Github palokha

Kulemba script Actions kumayamba ndikupanga fayilo yotchedwa dzina mufoda .github ndi subfolder yake workflows. Izi zitha kuchitika pamanja kapena kuchokera kwa mkonzi pagawo la Zochita patsamba losungira.

GitHub Zochita monga CI/CD yatsamba pa jenereta yokhazikika ndi masamba a GitHub
Chitsanzo cha fomu yopanda kanthu

Ndiyankha mwachidule pa fomu

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.

Tiyeni tilembe zathu kutengera template:

0) Mukhozanso kusiya dzina "CI". Ndi nkhani ya kukoma.

1) Kenako, muyenera kusankha chochita / choyambitsa chomwe chidzayambitse script, kwa ife uku ndiko kukankhira mwachizolowezi kudzipereka kwatsopano kumalo osungirako.

on:
  push

2) Tidzasiyanso chithunzicho pamaziko omwe script idzayambitsidwe monga chitsanzo, popeza Ubuntu ali wokhutira ndi ntchito yofunikira. Kuyang'ana pa zida zomwe zilipo zikuwonekeratu kuti izi zitha kukhala zofunikira kapena chithunzi chosavuta (kapena chotengera cha Docker chotengera).

  build:
    runs-on: ubuntu-latest

3) M'masitepe, tiyamba kukhazikitsa chilengedwe kuti tikonzekere ntchito yayikulu.

3.1) kupita kunthambi yomwe tikufuna (gawo lokhazikika checkout):

- uses: actions/checkout@v1

3.2) kukhazikitsa Python:

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

3.3) ikani zodalira za jenereta yathu:

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

3.4) pangani chikwatu momwe masamba amapangidwira:

   - name: Make output folder
      run: mkdir output

4) Kuti ntchito patsambalo ikhale yosasinthasintha, kutanthauza kuti, osachotsa zosintha zam'mbuyomu komanso kuti athe kuwonjezera zosintha pamalowo popanda mikangano, chotsatira chidzakhala kufananiza malo osungira nthawi iliyonse:

   - 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

Njira iyi imayitanira zosintha zamakina:

  • kusintha GITHUB_ACTOR GitHub imadziyika yokha, ndipo ili ndi dzina lolowera lomwe script iyi idakhazikitsidwa chifukwa cholakwa;
  • kusintha secrets.ACCESS_TOKEN izi zimapangidwa chizindikiro chowongolera Github, titha kuyipereka ngati kusintha kwa chilengedwe poyiyika pa tabu Secrets zokonda zathu zosungira. Chonde dziwani kuti panthawi ya m'badwo chizindikiro chidzaperekedwa kwa ife kamodzi, sipadzakhalanso mwayi wochipeza. Komanso mayendedwe azinthu za Secrets.

5) Tiyeni tipitirire kupanga masamba athu:

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

Magawo omwe amaperekedwa kwa jenereta ali ndi udindo pa chikwatu komwe mafayilo opangidwa adzatumizidwa (-o output) ndi fayilo yosinthira yomwe timagwiritsa ntchito kupanga (-s publishconf.py; Mutha kuwerenga za njira yolekanitsa makonzedwe akomweko ndi kasinthidwe kuti afalitsidwe muzolemba za Pelican.).

Ndiroleni ndikukumbutseni zomwe zili mufoda yathu output Malo osungira malo apangidwa kale.

6) Tiyeni tiyike git ndikulozera mafayilo athu osinthidwa:

    - 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

Panthawiyi, kusintha kodziwika kale kumagwiritsidwa ntchito ndipo bukhu logwira ntchito likuwonetsedwa momwe malamulo ochokera ku sitepeyi adzakhazikitsidwa. Lamulo loti mupite ku bukhu logwira ntchito lingawoneke ngati - cd output.

7) Tiyeni tipange uthenga wodzipereka, sinthani zosinthazo ndikuzikankhira kumalo osungira. Kuti kudziperekako sikunapite pachabe ndipo chifukwa chake sikutulutsa cholakwika mu bash (zotsatira zake siziri 0) - Choyamba, tiyeni tiwone ngati kuli kofunikira kudzipereka ndikukankhira china chake. Kuti tichite izi timagwiritsa ntchito lamulo git diff-index --quiet --cached HEAD -- zomwe zidzatulukire ku terminal 0 ngati palibe zosintha zokhudzana ndi mtundu wakale wa tsambalo, ndi 1 pali kusintha koteroko. Kenako timakonza zotsatira za lamulo ili. Chifukwa chake, muzambiri za kuphedwa kwa script, tidzalemba zambiri zothandiza za momwe tsambalo lilili pakadali pano, m'malo mongowonongeka ndikutumiza lipoti la kuwonongeka kwa script.

Timachitanso izi mu bukhu lathu ndi masamba okonzeka.

   - 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

chifukwa

Zotsatira zake, script yotereyi imakulolani kuti musaganize zopanga masamba osasunthika. Powonjezera zosintha mwachindunji kunkhokwe yachinsinsi, kaya pogwira ntchito ndi git kuchokera pansi pa dongosolo lililonse kapena kupanga fayilo kudzera pa intaneti ya GitHub, Zochita zidzachita zonse zokha. Ngati script iwonongeka mosayembekezereka, chidziwitso chidzatumizidwa ku imelo yanu.

Full kodi

Ndisiya mtundu wanga wogwira ntchito, pomwe gawo lomaliza likuwonjezera kutumiza zidziwitso kuti chopereka chakankhidwira kumalo osungira.

Zomwe tafotokozazi Zinsinsi zimagwiritsidwa ntchito, pomwe chizindikiro cha bot ndi ID ya ogwiritsa ntchito omwe uthengawo uyenera kutumizidwa amawonjezedwa.

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

Zithunzi

GitHub Zochita monga CI/CD yatsamba pa jenereta yokhazikika ndi masamba a GitHub
Zotsatira za imodzi mwamathamangitsidwe omwe akuwonetsedwa pagawo la Zochita za malo oyambira

GitHub Zochita monga CI/CD yatsamba pa jenereta yokhazikika ndi masamba a GitHub
Uthenga wochokera ku bot wokhudza kumalizidwa kwa script

maulalo othandiza

Kumvetsetsa Zochita
Machitidwe syntax
Mndandanda wazoyambitsa
Zosankha za malo enieni
Masamba a Github
Mndandanda wa Static Generator

Source: www.habr.com

Kuwonjezera ndemanga