Nā hana GitHub ma ke ʻano he CI/CD no kahi pūnaewele ma kahi mea hoʻoheheʻe static a me nā ʻaoʻao GitHub

Nā hana GitHub ma ke ʻano he CI/CD no kahi pūnaewele ma kahi mea hoʻoheheʻe static a me nā ʻaoʻao GitHub

Ma hope o ka ʻimi liʻiliʻi ʻana iā Habr, pīhoihoi wau i ka liʻiliʻi o nā ʻatikala i paʻi ʻia ma ke kumuhana o ka hiʻohiʻona o GitHub (beta) - Nā hana.

Me he mea lā hiki ke wehewehe ʻia kēlā ʻōlelo haʻahaʻa e ka ʻoiaʻiʻo e hoʻāʻo mau ana ka hana, ʻoiai ʻo "beta". Akā he hiʻohiʻona pono ia o ka beta e hiki ai i kēia mea hana ke hoʻohana ʻia i nā waihona pilikino. E pili ana i ka hana ʻana me kēia ʻenehana aʻu e kamaʻilio ai ma kēia ʻatikala.

Prehistory

Inā hoʻomaka mākou i ka hoʻonohonoho, a laila pono paha e haʻi aku i ka ʻimi ʻana i kahi koho wikiwiki, maʻalahi, maʻalahi a me ka manuahi no ka mālama ʻana i kahi pūnaewele pilikino "About Me", pono wau e noho i kekahi mau pō a hui pū i nā ʻatikala he nui.

Ke koho nei kekahi poʻe i ka hoʻokipa, ʻo nā mea ʻē aʻe he kikowaena kapua, a ʻo ka poʻe makemake ʻole e hoʻomaopopo i ka hana, ka launa pū ʻana a me ka uku no kēia mau mea a pau e like me ka hoʻouka ʻana i nā pūnaewele static i kahi waihona, no ka mea hiki ke hana ʻia kēia ma GitHub a me GitLab.

ʻOiaʻiʻo, ʻo kēia ke koho pilikino o kēlā me kēia kanaka.

ʻO kaʻu koho hope loa ʻo GitHub Pages.

E pili ana i nā ʻaoʻao

ʻO wai ka mea ʻike ʻole gh-pages - he koho kēia no ka mālama ʻana i nā palapala ma ke ʻano o kahi pūnaewele a hāʻawi ʻia me ka uku ʻole, a ma kahi o nā palapala, ua manaʻo ʻia e mālama i nā pūnaewele pilikino. Hāʻawi ʻia kēia hana e GitHub i nā mea hoʻohana āpau a loaʻa i nā hoʻonohonoho waihona.

Hoʻohana ka waihona papahana i kahi lālā gh-pages, no kahi kahua hoʻohana - kahi waihona ʻokoʻa me ka inoa username.github.io me nā kumu pūnaewele ma master lālā.

Hiki iā ʻoe ke ʻike i nā kikoʻī hou aku ma ka palapala, akā, e ʻae mai iaʻu e hoʻomaopopo wale aku ʻo GitHub i ka lokomaikaʻi i ka ʻae ʻana i kekahi e hoʻopili i kā lākou pūnaewele ponoʻī i kahi pūnaewele ma ka hoʻohui ʻana i kahi faila. CNAME me ka inoa kikowaena a me ka hoʻonohonoho ʻana i ka DNS o kāu mea hoʻolako kikowaena ma nā kikowaena GitHub.

ʻIke wau he nui nā ʻatikala ma aneʻi e pili ana i ka hoʻomohala ʻana i kahi pūnaewele, no laila ʻaʻole ia kaʻu e kamaʻilio hou aku ai.

Pilikia

ʻO ka pilikia, i ka wā e hoʻohana ai i kahi mea hoʻoheheʻe static, pono e kākau i nā palapala hou a hoʻohana i nā hale waihona puke e maʻalahi i ke kaʻina hana o ka hana ʻana i nā ʻaoʻao a hoʻouka iā lākou i loko o ka waihona. ʻO ka maʻalahi, inā mālama ʻoe i nā kumu i loko o kahi waihona pilikino kaʻawale, a laila i kēlā me kēia manawa ke hoʻololi ʻia ma ka pūnaewele, pono ia e hoʻolālā i ke kaiapuni kūloko no ka hanauna ma hope o nā ʻaoʻao static a me ka hoʻolaha ʻana i ka waihona pūnaewele nui.

Aia ka nui nā mea hoʻoheheʻe paʻa a he pilikia like ko lakou a pau. Nui ka manawa a me ka hoʻoikaika ʻana o kēia mau hana, a hoʻolohi i ka hana ma ka pūnaewele, ʻoi aku ma hope o kekahi mau neʻe ʻana mai OS a i OS a i ʻole nā ​​hanana me ka nalowale ʻana o ka ʻikepili ma nā pahu paʻakikī. (ʻo ia ka hihia i koʻu hihia).

ʻO ka mea i hala koke iho nei, ma kahi hoʻolaha pop-up ma ka pūnaewele a i ʻole ma kahi nūhou mai GitHub, ua ʻike ʻia kahi CI/CD hou i kūkulu ʻia, e hiki ai ke hana ʻia kēia mau hana me ka hoʻoikaika liʻiliʻi.

E pili ana i nā mea hana ʻaoʻao static

ʻAʻole au e kau i ka manaʻo kūikawā ma kēia ʻatikala, akā e kaʻana aku wau i kekahi mau kumuhana aʻu i hele mai ai i ke koho ʻana a me ka hoʻohana ʻana i kēia mau mea:

1) E koho i ka mīkini hana i kūpono i kāu ʻōlelo hoʻolālā, a i ʻole ka ʻōlelo maopopo loa. Ua hele au i kēia manaʻo i ka manawa aʻu iho e hoʻohui i kekahi mau hana no ka pūnaewele e hana, hoʻohui i nā koʻokoʻo no kona kūpaʻa a me ka automation. Eia kekahi, he kumu maikaʻi kēia e kākau ai i nā hana hou iā ʻoe iho ma ke ʻano o nā plugins;

2) ʻo ka mea hoʻoheheʻe e koho ai he koho pilikino, akā pono e noʻonoʻo ʻia no ka hoʻomaʻamaʻa mua ʻana i ka hana o ka hana ʻo GitHub Pages, pono ʻoe e hoʻokomo mua. ʻO Iekyll. ʻO ka mea pōmaikaʻi, hiki iā ʻoe ke hana i kahi pūnaewele mai nā kumu i loko o ka waihona (E hana hou wau i kēia me kaʻu koho).

ʻO kaʻu koho o ka generator e pili ana i ka helu mua. Pelika ʻO ka mea i kākau ʻia ma Python ua hoʻololi maʻalahi iā Jekyll, kahi mea ʻē iaʻu (hoʻohana ia no kahi kokoke i hoʻokahi makahiki). ʻO ka hopena, ʻo ka hana ʻana a me ka hoʻoponopono ʻana i nā ʻatikala a me ka hana ʻana ma kahi pūnaewele e hāʻawi i ka ʻike hou aku ma kahi ʻōlelo hoihoi iaʻu.

__

Ka hoʻokumu ʻana i ka pilikia

ʻO ka hana nui, ʻo ia ke kākau ʻana i kahi palapala (ʻoiaʻiʻo he faila hoʻonohonoho) e hoʻopuka koke i nā ʻaoʻao static mai kahi waihona pilikino. E pili ana ka hoʻonā i ka hana o kahi kaiapuni virtual. Na ka ʻatikala ponoʻī e hoʻohui i nā ʻaoʻao i mākaukau i ka waihona lehulehu.

Nā mea hana no ka hoʻonā

Nā mea hana a mākou e hoʻohana ai e hoʻoponopono i ka pilikia:

  • Nā hana GitHub;
  • Python3.7;
  • Pelican;
  • Git;
  • Nā ʻaoʻao GitHub.

ʻO ka pilikia

No laila, ma hope o ka hoʻomaʻamaʻa liʻiliʻi ʻana i ka palapala a me ka hoʻomaopopo ʻana i ke kākau ʻana o nā scripts for Actions, ua ʻike ʻia e hoʻopau loa kēia mīkini i ka pilikia i kū mai. I ka manawa kākau, pono ʻoe e kau inoa e hoʻohana i kēia hana. no ka hoʻāʻo beta!

Nā hana GitHub ma ke ʻano he CI/CD no kahi pūnaewele ma kahi mea hoʻoheheʻe static a me nā ʻaoʻao GitHub
ʻO ka wehewehe ʻana i ka hana hou e Github ponoʻī

Hoʻomaka ke kākau ʻana i kahi palapala Actions ma ka hana ʻana i kahi faila i kapa ʻia i loko o kahi waihona .github a me kona waihona waihona workflows. Hiki ke hana me ka lima a i ʻole mai ka mea hoʻoponopono ma ka pā Hana ma ka ʻaoʻao waihona.

Nā hana GitHub ma ke ʻano he CI/CD no kahi pūnaewele ma kahi mea hoʻoheheʻe static a me nā ʻaoʻao GitHub
Ka laʻana o kahi palapala palapala hakahaka

E ʻōlelo pōkole wau i ka palapala

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.

E kākau kāua i kā mākou iho ma muli o ke kumu hoʻohālike:

0) Hiki iā ʻoe ke waiho i ka inoa "CI". He mea ʻono.

1) A laila, pono ʻoe e koho i ka hana / trigger e hoʻomaka i ka palapala, i kā mākou hihia, ʻo ia ka pana maʻamau o kahi hana hou i ka waihona.

on:
  push

2) E waiho pū mākou i ke kiʻi ma ke kumu e hoʻomaka ʻia ai ka palapala ma ke ʻano he laʻana, no ka mea, ua ʻoluʻolu ʻo Ubuntu i ka hana pono. Ke nana nei mea paahana i loaa ʻike ʻia he kiʻi pono a kūpono paha kēia (a i ʻole kahi pahu Docker e pili ana iā ia).

  build:
    runs-on: ubuntu-latest

3) Ma nā ʻanuʻu, e hoʻonohonoho mua mākou i ke kaiapuni e hoʻomākaukau no ka hana nui.

3.1) hele i ka lālā e pono ai mākou (paepae maʻamau checkout):

- uses: actions/checkout@v1

3.2) hoʻokomo iā Python:

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

3.3) hoʻokomo i nā mea hilinaʻi o kā mākou generator:

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

3.4) hana i kahi papa kuhikuhi kahi e hana ʻia ai nā ʻaoʻao pūnaewele:

   - name: Make output folder
      run: mkdir output

4) I mea e paʻa ai ka hana ma ka pūnaewele, ʻo ia hoʻi, ʻaʻole e holoi i nā hoʻololi mua a hiki ke hoʻohui i nā loli i ka waihona pūnaewele me ka ʻole o nā paio, ʻo ka hana aʻe e hoʻopili i ka waihona pūnaewele i kēlā me kēia manawa:

   - 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

Kāhea kēia ʻanuʻu i nā ʻōnaehana ʻōnaehana:

  • loli GITHUB_ACTOR Hoʻokomo ʻo GitHub iā ia iho, a ʻo ia ka inoa inoa nona ka hewa i hoʻomaka ai kēia palapala;
  • loli secrets.ACCESS_TOKEN hana ʻia kēia hōʻailona no ka mālama ʻana iā Github, hiki iā mākou ke hāʻawi iā ia ma ke ʻano he hoʻololi kaiapuni ma ka hoʻonohonoho ʻana iā ia ma ka pā Secrets kā mākou hoʻonohonoho waihona. E ʻoluʻolu e hoʻomaopopo i ka wā o ka hanauna e hāʻawi ʻia ka hōʻailona iā mākou i hoʻokahi manawa, ʻaʻole e loaʻa hou iā ia. A me nā waiwai o nā mea huna.

5) E neʻe kākou i ka hana ʻana i kā mākou ʻaoʻao:

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

ʻO nā palena i hāʻawi ʻia i ka generator ke kuleana no ka papa kuhikuhi kahi e hoʻouna ʻia ai nā faila i hana ʻia (-o output) a me ka faila hoʻonohonoho a mākou e hoʻohana ai e hana (-s publishconf.py; Hiki iā ʻoe ke heluhelu e pili ana i ke ala e hoʻokaʻawale ai i ka config kūloko a me ka config no ka paʻi ʻana i ka palapala Pelican).

E hoʻomanaʻo wau i ka mea i loko o kā mākou waihona output Ua hoʻopili ʻia ka waihona pūnaewele.

6) E hoʻonohonoho i ka git a kuhikuhi i kā mākou mau faila i hoʻololi ʻia:

    - 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

I kēia manawa, hoʻohana ʻia kahi ʻano hoʻololi i ʻike ʻia a hōʻike ʻia ka papa kuhikuhi hana kahi e hoʻomaka ai nā kauoha mai kēia kaʻina. E like paha ke kauoha e hele i ka papa kuhikuhi hana - cd output.

7) E hana mākou i kahi memo commit, e hana i nā hoʻololi a hoʻokomo iā lākou i loko o ka waihona. No laila ʻaʻole i makehewa ka hana a no laila ʻaʻole i hana hewa i ka bash (ʻaʻole ka hopena hopena 0) — ʻo ka mua, e nānā kākou inā pono e hoʻokō a paʻi i kekahi mea. No ka hana ʻana i kēia, hoʻohana mākou i ke kauoha git diff-index --quiet --cached HEAD -- ka mea e hoʻopuka i ka terminal 0 inā ʻaʻohe hoʻololi e pili ana i ka mana mua o ka pūnaewele, a 1 aia nā hoʻololi like. A laila hana mākou i ka hopena o kēia kauoha. No laila, i ka ʻike e pili ana i ka hoʻokō ʻana i ka palapala, e hoʻopaʻa mākou i ka ʻike kūpono e pili ana i ka mokuʻāina o ka pūnaewele i kēia manawa, ma kahi o ka hāʻule ʻokoʻa ʻana a hoʻouna mai iā mākou i kahi hōʻike e pili ana i ka hāʻule ʻana o ka script.

Hana pū mākou i kēia mau hana ma kā mākou papa kuhikuhi me nā ʻaoʻao i mākaukau.

   - 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

hopena

ʻO ka hopena, ʻo ia ʻano palapala e ʻae iā ʻoe ʻaʻole e noʻonoʻo e pili ana i ka hana ʻana i nā ʻaoʻao static. Ma ka hoʻohui pololei ʻana i nā hoʻololi i kahi waihona pilikino, inā ma ka hana ʻana me git mai lalo o kekahi ʻōnaehana a i ʻole ka hana ʻana i kahi faila ma o ka pūnaewele pūnaewele GitHub, e hana nā hana i nā mea āpau iā lākou iho. Inā hāʻule ʻole ka ʻatikala, e hoʻouna ʻia kahi leka i kāu leka uila.

Code piha

E haʻalele wau i kaʻu hana hana, kahi e hoʻohui ai ka hana hope i ka hoʻouna ʻana i kahi leka hoʻomaopopo ua hoʻokau ʻia kahi hana i ka waihona nui.

Hoʻohana ʻia nā mea huna i hōʻike ʻia ma luna, kahi e hoʻohui ʻia ai ka hōʻailona bot a me ka ID mea hoʻohana e hoʻouna ʻia ai ka leka.

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

Nānāʻana

Nā hana GitHub ma ke ʻano he CI/CD no kahi pūnaewele ma kahi mea hoʻoheheʻe static a me nā ʻaoʻao GitHub
ʻO ka hopena o kekahi o nā holo i hōʻike ʻia ma ka pā Hana o ka waihona kumu

Nā hana GitHub ma ke ʻano he CI/CD no kahi pūnaewele ma kahi mea hoʻoheheʻe static a me nā ʻaoʻao GitHub
Ka memo mai ka bot e pili ana i ka pau ʻana o ka palapala

nā loulou pono

Hoomaopopo i na Hana
Syntax hana
Ka papa inoa o nā mea hoʻomaka
Nā koho no nā kaiapuni virtual
Nā ʻaoʻao Github
Ka papa inoa o nā mea hana hoʻoheheʻe

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka