Omume GitHub dị ka CI/CD maka saịtị na generator static na ibe GitHub

Omume GitHub dị ka CI/CD maka saịtị na generator static na ibe GitHub

Mgbe m lechara Habr ntakịrị, ọ tụrụ m n'anya na ebipụtala akụkọ ole na ole n'isiokwu nke njirimara GitHub (beta) - Actions.

Ọ ga-adị ka enweghị nkọwa dị otú ahụ nwere ike ịkọwa site n'eziokwu na ọrụ ahụ ka na-anwale, n'agbanyeghị "beta". Mana ọ bụ njirimara bara uru nke beta nke na-enye ohere iji ngwá ọrụ a mee ihe na ebe nchekwa nzuzo. Ọ bụ maka ịrụ ọrụ na teknụzụ a ka m ga-ekwu maka ya n'isiokwu a.

Akụkọ ihe mere eme

Ọ bụrụ na anyị amalite n'usoro, mgbe ahụ, ọ ga-abụ na ọ bara uru ịkọ na n'ime usoro nke ịchọ ngwa ngwa, dị mfe, dị mfe na nhọrọ efu maka ịchekwa ebe nrụọrụ weebụ "About Me" nkeonwe, aghaghị m ịnọ ọtụtụ abalị na-agbakọta ọtụtụ isiokwu.

Ụfọdụ ndị na-ahọrọ Bochum, ndị ọzọ ihe nkesa ígwé ojii, na ndị na-achọghị ịghọta ọrụ, mmekọrịta na ugwo maka ihe a nile dị ka ibugo saịtị static na ebe nchekwa, ebe ọ bụ na ugbu a, nke a nwere ike ime na ma GitHub na GitLab .

N'ezie, nke a bụ nhọrọ onye ọ bụla.

Nhọrọ ikpeazụ m bụ GitHub Pages.

Banyere ibe

Onye na-amaghị gh-pages - nke a bụ nhọrọ maka ịchekwa akwụkwọ n'ụdị weebụsaịtị na a na-enye ya n'efu, na mgbakwunye na akwụkwọ, a na-atụkwa aro ka ịchekwa weebụsaịtị nkeonwe. GitHub na-enye ndị ọrụ niile ọrụ a ma dị na ntọala nchekwa.

Ebe nchekwa ọrụ na-eji alaka ụlọ ọrụ gh-pages, maka saịtị onye ọrụ - ebe nchekwa dị iche nwere aha username.github.io na isi mmalite saịtị na master alaka.

Ị nwere ike ịhụ nkọwa ndị ọzọ na akwụkwọ, mana ka m mara na GitHub na-emesapụ aka n'ụzọ dị ịtụnanya n'ikwe ka onye ọ bụla jikọta ngalaba nke ha na saịtị dị otú ahụ site na ịtinye faịlụ. CNAME na aha ngalaba na ịtọlite ​​​​DNS nke onye na-eweta ngalaba gị na sava GitHub.

Eji m n'aka na enwere ọtụtụ akụkọ ebe a gbasara otu esi emepụta saịtị dị otú ahụ, nke mere na ọ bụghị ihe m ga-ekwu maka ya.

Nsogbu na-ebilite

Nsogbu bụ na mgbe ị na-eji generator static, ọ dị mkpa ka e dee ederede ọzọ ma jiri ụlọ akwụkwọ mee ka usoro ịmepụta ibe dị mfe na ịkwanye ha n'ime ebe nchekwa. Naanị, ọ bụrụ na ị na-echekwa isi mmalite na ebe nchekwa dị iche iche, mgbe ahụ, oge ọ bụla enwere mgbanwe ọ bụla na saịtị ahụ, ọ dị mkpa ịkwanye gburugburu ebe obibi maka ọgbọ na-esote nke ibe static na mbipụta na ebe nchekwa saịtị.

Enwere ụbara static generators na ha niile nwere otu nsogbu. Omume ndị a na-ewe oge na mgbalị dị ukwuu, na-emecha kwụsị ọrụ na saịtị ahụ, karịsịa mgbe ọtụtụ njem sitere na OS gaa na OS ma ọ bụ ihe mere na enweghị data na draịva siri ike. (Nke a bụ ikpe m).

Naanị n'oge na-adịbeghị anya, ma na ọkwa mmapụta na webụsaịtị ma ọ bụ na akwụkwọ akụkọ sitere na GitHub, ahụrụ CI/CD arụpụtara ọhụrụ, nke mere ka o kwe omume iji obere mbọ mee omume ndị a.

Banyere ndị na-emepụta ibe static

Agaghị m elekwasị anya pụrụ iche na mpaghara ihe a, mana m ga-ekekọrịta edemede ole na ole m bịara n'oge nhọrọ na ojiji nke ndị a:

1) họrọ generator nke dabara asụsụ mmemme gị, ma ọ bụ nke doro anya dịka o kwere mee. Abịara m n'echiche a n'oge mụ onwe m ga-agbakwunye ụfọdụ ọrụ maka saịtị ahụ iji rụọ ọrụ, tinye crutches maka nkwụsi ike ya na akpaaka. Na mgbakwunye, nke a bụ ezigbo ihe mere ị ga-eji dee ọrụ ọzọ n'onwe gị n'ụdị plugins;

2) nke generator ịhọrọ bụ nhọrọ nkeonwe, mana ọ bara uru ịtụle na maka ntinye mbụ na ọrụ nke GitHub Pages, ị ga-ebu ụzọ wụnye. Jekyll. Ọ dabara nke ọma, ọ na-enye gị ohere ịmepụta weebụsaịtị site na isi mmalite ozugbo na ebe nchekwa (M ga-emeghachi nke a na nhọrọ m).

Nhọrọ m nke generator dabeere na isi ihe mbụ. Pelikan nke e dere na Python dị mfe dochie Jekyll, nke bụụrụ m mba ọzọ (jiri ya ihe fọrọ nke nta ka ọ bụrụ otu afọ). N'ihi ya, ọbụna ịmepụta na idezi akụkọ na ịrụ ọrụ na webụsaịtị na-enyekwu ahụmahụ na asụsụ na-amasị m.

__

Ulationkpụzi nsogbu a

Isi ọrụ ga-abụ ide edemede (n'ezie faịlụ nhazi) nke ga-ewepụta ibe na-akpaghị aka site na ebe nchekwa nkeonwe. Ihe ngwọta ga-agụnye ọrụ nke gburugburu ebe obibi. Edemede n'onwe ya ga-agbakwunye ibe emebere na ebe nchekwa ọha.

Ngwa maka ngwọta

Ngwa ndị anyị ga-eji dozie nsogbu ahụ:

  • Omume GitHub;
  • Python3.7;
  • Pelican;
  • Git;
  • Ibe GitHub.

Nchọpụta nsogbu

Ya mere, mgbe ị matachara akwụkwọ ahụ ntakịrị ma ghọta otú e si ede ederede maka Actions, ọ bịara doo anya na usoro a ga-edozi nsogbu ahụ kpamkpam. N'oge ederede, ị ga-edebanye aha ka ị jiri ọrụ a. maka ule beta!

Omume GitHub dị ka CI/CD maka saịtị na generator static na ibe GitHub
Nkọwa nke ọrụ ọhụrụ nke Github n'onwe ya

Ide edemede omume na-amalite site na ịmepụta faịlụ aha ya na nchekwa .github na nchekwa nchekwa ya workflows. Enwere ike ime nke a site na aka ma ọ bụ site na onye ndezi na taabụ omume na ibe nchekwa.

Omume GitHub dị ka CI/CD maka saịtị na generator static na ibe GitHub
Ọmụmaatụ nke ụdị edemede efu

M ga-ekwu nkenke n'ụdị

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.

Ka anyị dee nke anyị dabere na template:

0) Ị nwekwara ike hapụ aha "CI". Ọ bụ ihe ụtọ.

1) Na-esote, ịkwesịrị ịhọrọ ihe omume / na-akpali akpali nke ga-amalite edemede ahụ, n'ọnọdụ anyị, nke a bụ ihe a na-emekarị nke ntinye ọhụrụ na ebe nchekwa.

on:
  push

2) Anyị ga-ahapụkwa onyonyo a na ndabere nke a ga-ewepụta edemede ahụ dịka ọmụmaatụ, ebe ọ bụ na Ubuntu nwere afọ ojuju maka ọrụ dị mkpa. Na-ele anya ndị na-agba ọsọ ọ bịara doo anya na nke a nwere ike ịbụ ihe oyiyi ọ bụla dị mkpa ma ọ bụ dị mfe (ma ọ bụ akpa Docker dabere na ya).

  build:
    runs-on: ubuntu-latest

3) Na nzọụkwụ, anyị ga-ebu ụzọ guzobe gburugburu ebe obibi iji kwadebe maka isi ọrụ.

3.1) gaa na alaka ụlọ ọrụ anyị chọrọ (usoro ọkọlọtọ checkout):

- uses: actions/checkout@v1

3.2) wụnye Python:

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

3.3) wụnye ndabere nke generator anyị:

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

3.4) mepụta ndekọ nke a ga-emepụta ibe saịtị:

   - name: Make output folder
      run: mkdir output

4) Ka ọrụ dị na saịtị ahụ wee na-agbanwe agbanwe, ya bụ, ọ bụghị ihichapụ mgbanwe ndị gara aga na inwe ike ịgbakwunye mgbanwe na ebe nchekwa saịtị na-enweghị esemokwu, nzọụkwụ ọzọ ga-abụ imechi ebe nchekwa saịtị oge ọ bụla:

   - 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

Nzọụkwụ a na-akpọ usoro mgbanwe:

  • mgbanwe GITHUB_ACTOR GitHub na-arụnye onwe ya, na nke a bụ aha njirimara nke sitere n'aka ya kpatara mmebi edemede a;
  • mgbanwe secrets.ACCESS_TOKEN nke a na-emepụta token maka ijikwa Github, anyị nwere ike ịgafe ya dị ka mgbanwe gburugburu ebe obibi site na ịtọ ya na taabụ Secrets ntọala nchekwa anyị. Biko mara na n'oge ọgbọ a ga-enye anyị akara ngosi otu ugboro, a gaghị enwe ohere ọzọ na ya. Yana ụkpụrụ nke ihe Nzuzo.

5) Ka anyị gaa n'ihu na ịmepụta ibe anyị:

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

Ihe ndị a na-agafe na generator bụ maka ndekọ aha ebe a ga-eziga faịlụ ndị emepụtara (-o output) na faịlụ nhazi nke anyị na-eji mepụta (-s publishconf.py; Ị nwere ike ịgụ maka ụzọ a ga-esi kewaa nhazi mpaghara na nhazi maka mbipụta na akwụkwọ Pelican.).

Ka m chetara gị ihe dị na folda anyị output E mechilarị ebe nchekwa saịtị ahụ.

6) Ka anyị guzobe git wee depụta faịlụ anyị gbanwere:

    - 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

N'oge a, a na-eji mgbanwe ama ama ama na-egosikwa akwụkwọ ndekọ aha nke a ga-ewepụta iwu sitere na usoro a. Iwu ịga na ndekọ ọrụ ga-adị ka- cd output.

7) Ka anyị wepụta ozi nkwa, mee mgbanwe ma tinye ha n'ime ebe nchekwa. Ya mere na ime ihe ahụ abụghị ihe efu ma ya mere ọ naghị emepụta njehie na bash (nsonaazụ mmepụta abụghị 0) — nke mbụ, ka anyị lelee ma ọ dị mkpa ime na ịkwanye ihe ọ bụla. Iji mee nke a, anyị na-eji iwu ahụ git diff-index --quiet --cached HEAD -- nke ga-apụta na njedebe 0 ọ bụrụ na enweghị mgbanwe n'ihe gbasara ụdị saịtị gara aga, na 1 enwere mgbanwe ndị dị otú ahụ. Mgbe ahụ anyị na-ahazi nsonaazụ nke iwu a. Ya mere, na ozi gbasara ogbugbu nke edemede ahụ, anyị ga-edekọ ozi bara uru banyere ọnọdụ saịtị ahụ n'oge a, kama ịdaba na-akpaghị aka na-ezigara anyị akụkọ banyere ọdịda edemede ahụ.

Anyị na-emekwa ihe ndị a n'akwụkwọ ndekọ aha anyị na ibe ndị emebere.

   - 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

N'ihi

N'ihi ya, edemede dị otú ahụ na-enye gị ohere ịghara iche echiche ịmepụta ibe static. Site n'ịgbakwunye mgbanwe ozugbo na ebe nchekwa nkeonwe, ma site na iji git rụọ ọrụ n'okpuru sistemụ ọ bụla ma ọ bụ mepụta faịlụ site na GitHub web interface, Omume ga-eme ihe niile n'onwe ha. Ọ bụrụ na edemede ahụ daa na mberede, a ga-eziga ọkwa na email gị.

Koodu zuru oke

M ga-ahapụ ụdị ọrụ m, nke nzọụkwụ ikpeazụ na-agbakwụnye izipu ọkwa na ntinye aka na-akwaga na ebe nchekwa isi.

A na-eji ihe nzuzo ndị a kọwara n'elu, ebe a na-agbakwunye bot token na ID onye ọrụ nke ekwesịrị iziga ozi ahụ.

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

Nseta ihuenyo

Omume GitHub dị ka CI/CD maka saịtị na generator static na ibe GitHub
Nsonaazụ nke otu n'ime ọsọ ahụ egosiri na taabụ omume nke ebe nchekwa isi mmalite

Omume GitHub dị ka CI/CD maka saịtị na generator static na ibe GitHub
Ozi sitere na bot gbasara mmecha nke edemede

Njikọ ndị bara uru

Ịghọta Omume
Actions syntax
Ndepụta ihe na-akpalite
Nhọrọ maka gburugburu mebere
Ibe Github
Ndepụta Generator Static

isi: www.habr.com

Tinye a comment