Ayyukan GitHub azaman CI/CD don rukunin yanar gizo akan janareta na tsaye da Shafukan GitHub

Ayyukan GitHub azaman CI/CD don rukunin yanar gizo akan janareta na tsaye da Shafukan GitHub

Bayan na leka Habr kadan, na yi mamakin cewa an buga labarai kaɗan akan jigon fasalin GitHub (beta) - Ayyuka.

Zai zama kamar ana iya bayyana irin wannan rashin fahimta ta gaskiyar cewa aikin yana cikin gwaji, kodayake "beta". Amma fasali ne mai amfani na beta wanda ke ba da damar yin amfani da wannan kayan aiki a cikin ma'ajiyar sirri. Yana da game da aiki tare da wannan fasaha wanda zan yi magana game da shi a cikin wannan labarin.

Tarihi

Idan muka fara cikin tsari, to tabbas yana da mahimmanci a ambaci cewa a cikin aiwatar da bincike mai sauri, dacewa, sauƙi da zaɓi na kyauta don adana gidan yanar gizon "Game da Ni" na sirri, dole ne in ciyar da dare da yawa kuma in haɗu ta cikin labarai da yawa.

Wasu mutane suna zaɓar hosting, wasu uwar garken girgije, da waɗanda ba sa so su fahimci aikin, hulɗar da biyan kuɗi don duk wannan kamar loda shafukan yanar gizo zuwa wurin ajiya, tun da yanzu ana iya yin wannan akan duka GitHub da GitLab.

Tabbas wannan zabin kowa ne.

Zaɓin ƙarshe na shine GitHub Shafukan.

Game da Shafuka

Wanda bai sani ba gh-pages - wannan zaɓi ne don adana takardu a cikin hanyar yanar gizon kuma ana ba da shi kyauta, kuma ban da takaddun shaida, an kuma ba da shawarar adana gidajen yanar gizo na sirri. GitHub ne ya samar da wannan aikin ga duk masu amfani kuma ana samunsa a cikin saitunan ma'ajiya.

Ma'ajiyar aikin tana amfani da reshe gh-pages, don rukunin yanar gizon mai amfani - wurin ajiya daban tare da sunan username.github.io tare da tushen saiti a ciki master reshe.

Kuna iya ganin ƙarin cikakkun bayanai a cikin takardun, amma bari in lura cewa GitHub yana da ban mamaki mai karimci wajen barin kowa ya danganta yankin nasu zuwa irin wannan rukunin yanar gizon ta hanyar ƙara fayil kawai. CNAME tare da sunan yanki da kafa DNS na mai bada yankin ku akan sabar GitHub.

Na tabbata akwai labarai da yawa a nan kan yadda ake haɓaka irin wannan rukunin yanar gizon, don haka ba shine abin da zan ƙara magana akai ba.

Lokacin da matsala ta faru

Matsalar ita ce, lokacin amfani da janareta na tsaye, akwai buƙatar rubuta ƙarin rubutun da amfani da ɗakunan karatu don sauƙaƙe tsarin samar da shafuka da loda su cikin ma'ajiyar. Kawai, idan kun adana maɓuɓɓuka a cikin ma'ajin masu zaman kansu daban, to duk lokacin da aka sami wani canji akan rukunin yanar gizon, ya zama dole a tura yanayin gida don ƙarni na gaba na shafuka masu tsattsauran ra'ayi da bugawa a cikin babban ma'ajiyar rukunin yanar gizon.

Akwai yalwa a tsaye janareta kuma dukkansu suna da matsala iri daya. Waɗannan ayyukan suna ɗaukar lokaci da ƙoƙari da yawa, kuma a ƙarshe suna rage aiki akan rukunin yanar gizon, musamman bayan ƙaura da yawa daga OS zuwa OS ko abubuwan da suka faru tare da asarar bayanai akan rumbun kwamfyuta. (haka ne a lamarina).

Kwanan nan, ko dai a cikin sanarwar bugu akan gidan yanar gizon ko a cikin wasiƙar labarai daga GitHub, an lura da sabon CI/CD da aka gina, wanda ya ba da damar aiwatar da waɗannan ayyukan tare da ƙaramin ƙoƙari.

Game da masu samar da shafi na tsaye

Ba zan mai da hankali sosai kan wannan ƙaramin abu ba, amma zan raba wasu abubuwa guda biyu waɗanda na zo a lokacin zaɓe da amfani da waɗannan abubuwan:

1) zaɓi janareta wanda ya dace da yaren shirye-shiryen ku, ko wanda yake a sarari yadda zai yiwu. Na zo kan wannan ra'ayin ne a lokacin da ni kaina na ƙara wasu ayyuka don rukunin yanar gizon ya yi aiki, ƙara crutches don ƙarin kwanciyar hankali da sarrafa kansa. Bugu da ƙari, wannan dalili ne mai kyau don rubuta ƙarin ayyuka da kanka a cikin nau'i na plugins;

2) wanda janareta don zaɓar zaɓi ne na sirri, amma yana da daraja la'akari da cewa don nutsewar farko a cikin ayyukan GitHub Shafukan, dole ne ku fara shigar da su. Jekyll. Abin farin ciki, yana ba ku damar samar da gidan yanar gizon daga tushe kai tsaye a cikin ma'ajin (Zan maimaita wannan da zabi na).

Zaɓin janareta na ya dogara ne akan batu na farko. Pelikanci wanda aka rubuta da Python cikin sauƙi ya maye gurbin Jekyll, wanda baƙon abu ne a gare ni (ana amfani dashi kusan shekara guda). A sakamakon haka, har ma da ƙirƙira da gyara labarai da aiki akan gidan yanar gizon yana ba da ƙarin ƙwarewa a cikin yaren da ke da ban sha'awa a gare ni.

__

Tsara matsalar

Babban aikin zai kasance rubuta rubutun (ainihin fayil ɗin daidaitawa) wanda zai haifar da tsayayyen shafuka ta atomatik daga ma'ajiyar sirri. Maganin zai ƙunshi ayyuka na yanayin kama-da-wane. Rubutun da kansa zai ƙara shirye-shiryen da aka ƙera zuwa wurin ajiyar jama'a.

Kayan aiki don mafita

Kayan aikin da za mu yi amfani da su don magance matsalar:

  • Ayyukan GitHub;
  • Python3.7;
  • Pelican;
  • Git;
  • Shafukan GitHub.

Shirya matsala

Don haka, bayan ɗan ɗan saba da takardun kuma fahimtar yadda ake rubuta rubutun Ayyukan Ayyuka, ya bayyana a fili cewa wannan hanyar za ta magance matsalar da ta taso gaba ɗaya. A lokacin rubutawa, dole ne ku yi rajista don amfani da wannan aikin. don gwajin beta!

Ayyukan GitHub azaman CI/CD don rukunin yanar gizo akan janareta na tsaye da Shafukan GitHub
Bayanin sabon ayyuka ta Github kanta

Rubuta rubutun Ayyuka yana farawa ta hanyar ƙirƙirar fayil mai suna a cikin babban fayil .github da babban fayil ɗin sa workflows. Ana iya yin wannan ko dai da hannu ko daga edita a cikin shafin Ayyuka akan shafin ma'ajiya.

Ayyukan GitHub azaman CI/CD don rukunin yanar gizo akan janareta na tsaye da Shafukan GitHub
Misalin fom ɗin rubutun mara komai

Zan yi sharhi a takaice akan form din

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.

Bari mu rubuta namu bisa ga samfur:

0) Hakanan zaka iya barin sunan "CI". Al'amarin dandano ne.

1) Na gaba, kuna buƙatar zaɓar aikin / mai kunnawa wanda zai ƙaddamar da rubutun, a cikin yanayinmu wannan shine turawa na yau da kullun na sabon ƙaddamarwa zuwa ma'ajiyar.

on:
  push

2) Za mu kuma bar hoton a kan abin da za a kaddamar da rubutun a matsayin misali, tun da Ubuntu ya gamsu da aikin da ya dace. Kallon samuwa kayan aikin ya bayyana a sarari cewa wannan na iya zama kowane hoto mai mahimmanci ko sauƙi (ko akwati Docker dangane da shi).

  build:
    runs-on: ubuntu-latest

3) A cikin matakan, za mu fara saita yanayin don shirya babban aikin.

3.1) je zuwa reshe da muke bukata (matakin mizani checkout):

- uses: actions/checkout@v1

3.2) shigar da Python:

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

3.3) shigar da abin dogara na janareta:

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

3.4) ƙirƙirar kundin adireshi wanda za a samar da shafukan yanar gizon:

   - name: Make output folder
      run: mkdir output

4) Domin aikin da ke kan rukunin ya kasance daidai, wato, ba don share canje-canjen da suka gabata ba kuma don samun damar ƙara canje-canje a ma'ajiyar rukunin yanar gizon ba tare da rikice-rikice ba, mataki na gaba zai kasance don rufe ma'ajin yanar gizon kowane lokaci:

   - 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

Wannan matakin yana kiran masu canjin tsarin:

  • m GITHUB_ACTOR GitHub yana shigar da kanta, kuma wannan shine sunan mai amfani wanda ta hanyarsa aka ƙaddamar da wannan rubutun;
  • m secrets.ACCESS_TOKEN wannan ya haifar Alamar sarrafa Github, za mu iya wuce shi azaman yanayin yanayi ta hanyar saita shi a cikin shafin Secrets saitunan ma'ajiyar mu. Da fatan za a lura cewa a lokacin tsara za a ba mu alamar sau ɗaya, ba za a sami ƙarin damar yin amfani da shi ba. Kazalika darajar abubuwan Sirri.

5) Mu ci gaba zuwa samar da shafukanmu:

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

Ma'aunin da aka wuce zuwa janareta suna da alhakin jagorar inda za a aika fayilolin da aka samar (-o output) da fayil ɗin daidaitawa da muke amfani da su don samarwa (-s publishconf.py; Kuna iya karantawa game da tsarin raba tsarin gida da tsarin bugawa a cikin takaddun Pelican).

Bari in tunatar da ku abin da ke cikin jakar mu output An riga an rufe ma'ajiyar rukunin yanar gizon.

6) Bari mu saita git kuma mu sanya fayilolin mu da aka canza:

    - 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

A wannan gaba, ana amfani da madaidaicin da aka sani kuma ana nuna jagorar aiki inda za a ƙaddamar da umarni daga wannan matakin. Umurnin zuwa ga kundin aiki zai yi kama da haka - cd output.

7) Bari mu samar da saƙon sadaukarwa, aiwatar da canje-canje kuma tura su cikin ma'ajin. Don haka aikatawa ba a banza ba ne don haka baya haifar da kuskure a cikin bash (sakamakon fitarwa ba 0) — da farko, bari mu bincika ko yana da muhimmanci a yi da kuma tura wani abu kwata-kwata. Don yin wannan muna amfani da umarnin git diff-index --quiet --cached HEAD -- wanda zai fita zuwa tashar tashar 0 idan babu canje-canje dangane da sigar da ta gabata ta shafin, kuma 1 akwai irin wadannan canje-canje. Sannan muna aiwatar da sakamakon wannan umarni. Don haka, a cikin bayanan aiwatar da rubutun, za mu rubuta bayanai masu amfani game da yanayin rukunin yanar gizon a wannan matakin, maimakon faɗuwa ta atomatik tare da aiko mana da rahoto game da haɗarin rubutun.

Muna kuma aiwatar da waɗannan ayyukan a cikin kundin adireshinmu tare da shirye-shiryen shafukan da aka yi.

   - 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

sakamakon

A sakamakon haka, irin wannan rubutun yana ba ku damar yin tunani game da ƙirƙirar shafuka masu tsayi. Ta ƙara canje-canje kai tsaye zuwa ma'ajiyar sirri, ko ta hanyar aiki tare da git daga ƙarƙashin kowane tsarin ko ƙirƙirar fayil ta hanyar haɗin yanar gizon GitHub, Ayyuka za su yi komai da kansu. Idan rubutun ya fado ba zato ba tsammani, za a aika sanarwa zuwa imel ɗin ku.

Cikakken lamba

Zan bar sigar aiki na, wanda mataki na ƙarshe ya ƙara aika sanarwar cewa an tura alƙawarin zuwa babban ma'ajiyar.

Ana amfani da Sirri da aka bayyana a sama, inda ake ƙara alamar bot da ID ɗin mai amfani wanda ake buƙatar aika saƙon.

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

Ayyukan GitHub azaman CI/CD don rukunin yanar gizo akan janareta na tsaye da Shafukan GitHub
Sakamakon ɗaya daga cikin ayyukan da aka nuna a cikin Ayyukan Ayyuka na ma'ajiyar tushen

Ayyukan GitHub azaman CI/CD don rukunin yanar gizo akan janareta na tsaye da Shafukan GitHub
Sako daga bot game da kammala rubutun

hanyoyi masu amfani

Fahimtar Ayyuka
Actions syntax
Jerin abubuwan jan hankali
Zaɓuɓɓuka don mahallin kama-da-wane
Shafukan Github
Jerin Generator Static

source: www.habr.com

Add a comment