GitHub Kev Ua raws li CI / CD rau qhov chaw ntawm lub tshuab hluav taws xob zoo li qub thiab GitHub Nplooj ntawv

GitHub Kev Ua raws li CI / CD rau qhov chaw ntawm lub tshuab hluav taws xob zoo li qub thiab GitHub Nplooj ntawv

Tau scoured Habr me ntsis, Kuv xav tsis thoob tias ob peb tsab xov xwm tau tshaj tawm rau lub ntsiab lus ntawm GitHub's (beta) feature - Kev Ua.

Nws yuav zoo li tias cov lus tsis txaus ntseeg no tuaj yeem piav qhia los ntawm qhov tseeb tias kev ua haujlwm tseem nyob hauv kev sim, txawm tias "beta". Tab sis nws yog qhov muaj txiaj ntsig zoo ntawm beta uas tso cai rau cov cuab yeej no siv rau hauv cov chaw khaws khoom ntiag tug. Nws yog hais txog kev ua haujlwm nrog cov thev naus laus zis no uas kuv yuav tham txog hauv kab lus no.

Ua ntej keeb kwm

Yog hais tias peb pib nyob rau hauv kev txiav txim, ces tej zaum nws yog tsim nyog hais tias nyob rau hauv tus txheej txheem ntawm kev tshawb nrhiav rau ib tug ceev, yooj yim, yooj yim thiab dawb kev xaiv rau khaws cia ib tug tus kheej lub website "Hais txog kuv", kuv yuav tsum tau siv ob peb hmos thiab zuag los ntawm ntau cov ntawv.

Qee tus neeg xaiv hosting, lwm tus huab server, thiab cov neeg uas tsis xav nkag siab txog kev ua haujlwm, kev sib cuam tshuam thiab kev them nyiaj rau txhua qhov no xws li uploading qhov chaw zoo li qub rau lub chaw cia khoom, txij li tam sim no qhov no tuaj yeem ua tiav ntawm GitHub thiab GitLab.

Tau kawg, qhov no yog txhua tus neeg xaiv tus kheej.

Kuv qhov kev xaiv kawg yog GitHub Nplooj ntawv.

Hais txog Nplooj

Leej twg tsis paub gh-pages - qhov no yog ib qho kev xaiv rau khaws cia cov ntaub ntawv nyob rau hauv daim ntawv ntawm ib lub website thiab nws yog muab dawb xwb, thiab ntxiv rau cov ntaub ntawv, nws kuj yog npaj los khaws cov websites ntawm tus kheej. Qhov kev ua haujlwm no yog muab los ntawm GitHub rau txhua tus neeg siv thiab muaj nyob hauv qhov chaw khaws cia.

Qhov project repository siv ib ceg gh-pages, rau tus neeg siv qhov chaw - ib qho chaw khaws cia nrog lub npe username.github.io nrog rau qhov chaw nyob hauv master ceg.

Koj tuaj yeem pom cov ntsiab lus ntxiv hauv cov ntaub ntawv, tab sis cia kuv cia li nco ntsoov tias GitHub yog qhov xav tsis thoob hauv kev tso cai rau leej twg los txuas lawv tus kheej lub npe mus rau qhov chaw zoo li no los ntawm kev ntxiv cov ntaub ntawv. CNAME nrog lub npe sau npe thiab teeb tsa DNS ntawm koj tus kws kho mob sau npe ntawm GitHub servers.

Kuv paub tseeb tias muaj ntau cov lus ntawm no yuav ua li cas los tsim ib lub vev xaib, yog li ntawd tsis yog qhov kuv yuav tham ntxiv.

Teeb meem tshwm sim

Qhov teeb meem yog tias thaum siv lub tshuab hluav taws xob zoo li qub, yuav tsum tau sau cov ntawv sau ntxiv thiab siv cov tsev qiv ntawv kom yooj yim cov txheej txheem tsim cov nplooj ntawv thiab thauj lawv mus rau hauv qhov chaw cia khoom. Tsuas yog, yog tias koj khaws cov peev txheej hauv ib qho chaw khaws cia ntiag tug, tom qab ntawd txhua zaus muaj kev hloov pauv ntawm lub xaib, nws yog qhov tsim nyog yuav tsum xa cov cheeb tsam hauv zos rau cov tiam tom ntej ntawm nplooj ntawv zoo li qub thiab tshaj tawm hauv lub vev xaib tseem ceeb.

Muaj kev nplua nuj static generators thiab lawv txhua tus muaj teeb meem tib yam. Cov kev ua no siv sij hawm ntau dhau thiab siv zog, thiab thaum kawg ua haujlwm qeeb hauv qhov chaw, tshwj xeeb tshaj yog tom qab ob peb tsiv ntawm OS mus rau OS lossis teeb meem nrog cov ntaub ntawv poob ntawm hard drives. (qhov no yog rooj plaub hauv kuv rooj plaub).

Tsis ntev los no, nyob rau hauv ib qho kev ceeb toom pop-up ntawm lub vev xaib lossis hauv tsab ntawv xov xwm los ntawm GitHub, tau pom qhov tsim tshiab CI / CD, uas ua rau nws muaj peev xwm ua tau cov haujlwm no nrog kev siv zog tsawg.

Hais txog static page generators

Kuv yuav tsis tsom ntsoov rau qhov tshwj xeeb ntawm cov khoom no, tab sis kuv yuav qhia ob peb yam no uas kuv tuaj rau thaum xaiv thiab siv cov hauv qab no:

1) xaiv lub tshuab hluav taws xob uas haum rau koj cov lus programming, lossis ib qho uas meej npaum li qhov ua tau. Kuv tuaj rau lub tswv yim no ntawm ib lub sij hawm thaum kuv tus kheej yuav tsum tau ntxiv ib co functionality rau lub site mus ua hauj lwm, ntxiv crutches rau nws ntau dua stability thiab automation. Tsis tas li ntawd, qhov no yog qhov laj thawj zoo los sau cov haujlwm ntxiv ntawm koj tus kheej hauv daim ntawv ntawm plugins;

2) lub tshuab hluav taws xob twg los xaiv yog tus kheej xaiv, tab sis nws tsim nyog xav txog tias rau qhov pib nkag rau hauv kev ua haujlwm ntawm GitHub Nplooj ntawv ua haujlwm, koj yuav tsum xub nruab Jekyll. Hmoov zoo, nws tso cai rau koj los tsim lub vev xaib los ntawm cov chaw ncaj qha hauv qhov chaw cia khoom (Kuv yuav rov ua qhov no nrog kuv xaiv).

Kuv qhov kev xaiv ntawm lub tshuab hluav taws xob yog raws li thawj qhov chaw. Noog muab ntses uas yog sau nyob rau hauv Python yooj yim hloov Jekyll, uas yog txawv teb chaws rau kuv (siv nws yuav luag ib xyoos). Yog li ntawd, txawm tias tsim thiab kho cov ntawv thiab ua haujlwm ntawm lub vev xaib muab kev paub ntxiv hauv cov lus uas txaus siab rau kuv.

__

Nqe lus ntawm qhov teeb meem

Lub luag haujlwm tseem ceeb yuav yog sau ib tsab ntawv (qhov tseeb yog cov ntaub ntawv teeb tsa) uas yuav cia li tsim cov nplooj ntawv zoo li qub los ntawm cov chaw khaws ntaub ntawv ntiag tug. Qhov kev daws teeb meem yuav koom nrog kev ua haujlwm ntawm ib puag ncig virtual. Tsab ntawv nws tus kheej yuav ntxiv cov nplooj ntawv npaj tau rau hauv cov chaw khaws ntaub ntawv pej xeem.

Cov cuab yeej rau kev daws teeb meem

Cov cuab yeej uas peb yuav siv los daws qhov teeb meem:

  • GitHub Kev Ua Haujlwm;
  • Python 3.7;
  • Pelican;
  • Git;
  • GitHub Nplooj ntawv.

Tshawb Fawb

Yog li, tom qab paub txog cov ntaub ntawv me ntsis thiab nkag siab tias cov ntawv sau ua haujlwm li cas, nws tau pom tseeb tias qhov txheej txheem no yuav daws tau qhov teeb meem uas tau tshwm sim. Thaum lub sijhawm sau ntawv, koj yuav tsum sau npe siv cov haujlwm no. rau kev kuaj beta!

GitHub Kev Ua raws li CI / CD rau qhov chaw ntawm lub tshuab hluav taws xob zoo li qub thiab GitHub Nplooj ntawv
Kev piav qhia ntawm kev ua haujlwm tshiab los ntawm Github nws tus kheej

Sau tsab ntawv ua haujlwm pib los ntawm kev tsim cov ntaub ntawv muaj npe hauv ib daim ntawv tais ceev tseg .github thiab nws subfolder workflows. Qhov no tuaj yeem ua tiav manually lossis los ntawm tus editor hauv Cov Haujlwm tab ntawm nplooj ntawv khaws cia.

GitHub Kev Ua raws li CI / CD rau qhov chaw ntawm lub tshuab hluav taws xob zoo li qub thiab GitHub Nplooj ntawv
Piv txwv ntawm daim ntawv dawb paug

Kuv yuav qhia luv luv ntawm daim ntawv

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.

Cia peb sau peb tus kheej raws li tus qauv:

0) Koj tuaj yeem tso lub npe "CI". Nws yog ib qho teeb meem ntawm saj.

1) Tom ntej no, koj yuav tsum xaiv qhov kev nqis tes ua / qhov tshwm sim uas yuav tso tawm tsab ntawv, hauv peb rooj plaub qhov no yog qhov kev thawb ib txwm ua ntawm kev cog lus tshiab rau lub chaw cia khoom.

on:
  push

2) Peb kuj tseem yuav tso cov duab los ntawm qhov uas tsab ntawv yuav raug tso tawm ua piv txwv, txij li Ubuntu txaus siab heev rau qhov tsim nyog ua haujlwm. Saib cov cuab yeej muaj Nws paub meej tias qhov no tuaj yeem yog qhov tsim nyog lossis yooj yim duab (lossis Docker ntim raws li nws).

  build:
    runs-on: ubuntu-latest

3) Hauv cov kauj ruam, peb yuav ua ntej teeb tsa ib puag ncig los npaj rau txoj haujlwm tseem ceeb.

3.1) mus rau ceg peb xav tau (tus qauv kauj ruam checkout):

- uses: actions/checkout@v1

3.2) nruab Python:

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

3.3) nruab qhov kev cia siab ntawm peb lub tshuab hluav taws xob:

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

3.4) tsim ib daim ntawv teev npe uas cov nplooj ntawv yuav raug tsim tawm:

   - name: Make output folder
      run: mkdir output

4) Txhawm rau kom ua haujlwm ntawm lub xaib kom zoo ib yam, uas yog, tsis txhob rho tawm cov kev hloov pauv yav dhau los thiab tuaj yeem ntxiv cov kev hloov pauv rau qhov chaw khaws cia yam tsis muaj kev tsis sib haum xeeb, cov kauj ruam tom ntej yuav yog clone lub chaw cia khoom txhua lub sijhawm:

   - 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

Cov kauj ruam no hu rau qhov system variables:

  • sib txawv GITHUB_ACTOR GitHub teeb tsa nws tus kheej, thiab qhov no yog tus neeg siv lub npe los ntawm qhov nws ua txhaum tsab ntawv no tau pib;
  • kuj sib txawv thiab secrets.ACCESS_TOKEN qhov no yog generated token rau kev tswj Github, peb tuaj yeem hla nws raws li ib puag ncig hloov pauv los ntawm kev teeb tsa hauv tab Secrets peb repository chaw. Thov nco ntsoov tias thaum tiam tus token yuav muab rau peb ib zaug, yuav tsis muaj kev nkag mus rau nws ntxiv. Raws li qhov tseem ceeb ntawm cov khoom Secrets.

5) Cia peb mus rau tsim peb nplooj ntawv:

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

Cov tsis dhau mus rau lub tshuab hluav taws xob yog lub luag haujlwm rau cov npe uas cov ntaub ntawv tsim tawm yuav raug xa mus (-o output) thiab cov ntaub ntawv teeb tsa uas peb siv los tsim (-s publishconf.py; Koj tuaj yeem nyeem txog txoj hauv kev rau kev sib cais hauv zos config thiab config rau kev tshaj tawm hauv Pelican cov ntaub ntawv).

Cia kuv ceeb toom koj tias dab tsi nyob hauv peb daim ntawv tais ceev tseg output Lub site repository twb tau cloned.

6) Cia peb teeb git thiab ntsuas peb cov ntaub ntawv hloov pauv:

    - 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

Lub sijhawm no, ib qho kev hloov pauv uas twb paub lawm tau siv thiab cov npe ua haujlwm tau qhia nyob rau hauv uas cov lus txib los ntawm cov kauj ruam no yuav raug tso tawm. Cov lus txib kom mus rau cov npe ua haujlwm yuav zoo li - cd output.

7) Cia peb tsim cov lus cog lus, ua qhov kev hloov pauv thiab thawb lawv mus rau hauv qhov chaw cia khoom. Yog li hais tias qhov kev cog lus tsis nyob rau hauv vain thiab yog li ntawd tsis tsim ib qho yuam kev nyob rau hauv bash (qhov tso zis tshwm sim yog tsis. 0) - ua ntej, cia saib seb puas tsim nyog tau cog lus thiab thawb ib yam dab tsi txhua. Ua li no peb siv cov lus txib git diff-index --quiet --cached HEAD -- uas yuav tawm mus rau lub davhlau ya nyob twg 0 yog tias tsis muaj kev hloov pauv txheeb ze rau yav dhau los version ntawm lub xaib, thiab 1 muaj cov kev hloov no. Tom qab ntawd peb ua cov txiaj ntsig ntawm cov lus txib no. Yog li, hauv cov ntaub ntawv hais txog kev ua tiav ntawm tsab ntawv, peb yuav sau cov ntaub ntawv tseem ceeb ntawm lub xeev ntawm lub xaib ntawm theem no, tsis txhob cia li poob thiab xa peb tsab ntawv ceeb toom txog tsab ntawv poob.

Peb kuj ua cov haujlwm no hauv peb cov npe nrog cov nplooj ntawv npaj txhij.

   - 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

tshwm sim

Yog li ntawd, cov ntawv zoo li no tso cai rau koj tsis txhob xav txog kev tsim cov nplooj ntawv zoo li qub. Los ntawm kev ntxiv cov kev hloov pauv ncaj qha mus rau qhov chaw khaws cia ntiag tug, txawm hais tias los ntawm kev ua haujlwm nrog git los ntawm txhua qhov system lossis tsim cov ntaub ntawv los ntawm GitHub web interface, Kev Ua Haujlwm yuav ua txhua yam lawv tus kheej. Yog tias tsab ntawv poob poob poob poob qis, ceeb toom yuav raug xa mus rau koj tus email.

Tag nrho cov cai

Kuv yuav tawm hauv kuv qhov kev ua haujlwm version, uas cov kauj ruam kawg ntxiv xa cov ntawv ceeb toom tias kev cog lus tau raug thawb mus rau qhov chaw cia khoom loj.

Cov lus piav qhia saum toj no yog siv, qhov twg tus bot token thiab tus neeg siv ID rau tus neeg xav tau xa cov lus ntxiv.

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

Screenshots

GitHub Kev Ua raws li CI / CD rau qhov chaw ntawm lub tshuab hluav taws xob zoo li qub thiab GitHub Nplooj ntawv
Qhov tshwm sim ntawm ib qho ntawm cov kev khiav dej num tau tshwm sim hauv Kev Ua tab ntawm qhov chaw cia khoom

GitHub Kev Ua raws li CI / CD rau qhov chaw ntawm lub tshuab hluav taws xob zoo li qub thiab GitHub Nplooj ntawv
Cov lus los ntawm bot txog kev ua tiav ntawm tsab ntawv

Pab kev sib txuas lus

Nkag siab Kev Ua
Kev ua syntax
Daim ntawv teev npe
Cov kev xaiv rau ib puag ncig virtual
Github Pages
Static Generator daim ntawv teev npe

Tau qhov twg los: www.hab.com

Ntxiv ib saib