
Dopu avè scupertu Habr un pocu, eru surprised chì assai pochi articuli sò stati publicati nantu à u tema di a funzione di GitHub (beta) - Azzioni.
Sembra chì una tale understatement pò esse spiegata da u fattu chì a funziunalità hè sempre in prova, anche se "beta". Ma hè una funzione utile di a beta chì permette à questu strumentu per esse usatu in repositori privati. Si tratta di travaglià cù sta tecnulugia chì vi parleraghju in questu articulu.
Preistoria
Sè avemu principiatu in ordine, allora hè prubabilmente degne di mencionà chì in u prucessu di ricerca di una opzione rapida, còmuda, faciule è libera per almacenà un situ web persunale "About Me", aghju avutu à passà parechje notti è pettine assai articuli.
Qualchidunu sceglie l'ospitu, l'altri un servitore in nuvola, è quelli chì ùn volenu micca capisce u travagliu, l'interazzione è u pagamentu per tuttu questu cum'è uploading siti statici à un repository, postu chì avà questu pò esse fattu in GitHub è GitLab .
Di sicuru, questu hè a scelta persunale di tutti.
A mo scelta finale era GitHub Pages.
À propositu di e Pagine
Chi nun sà gh-pages - Questa hè una opzione per almacenà a documentazione in forma di un situ web è hè furnita gratuitamente, è in più di a documentazione, hè ancu prupostu di guardà siti web persunali. Questa funziunalità hè furnita da GitHub à tutti l'utilizatori è hè dispunibule in i paràmetri di repository.
U repositoriu di u prugettu usa una branche gh-pages, per un situ d'utilizatore - un repository separatu cù u nome username.github.io cù fonti di situ in master ramu.
Pudete vede più , ma lasciami solu nutà chì GitHub hè sorprendentemente generoso per permette à qualcunu di ligà u so propiu duminiu à un tali situ semplicemente aghjunghjendu un schedariu. CNAME cù u nome di duminiu è cunfigurà u DNS di u vostru fornitore di duminiu nantu à i servitori GitHub.
Sò sicuru chì ci sò parechji articuli quì nantu à cumu sviluppà un tali situ, per quessa ùn hè micca ciò ch'e aghju da parlà più.
Prublemu chì sorge
U prublema era chì quandu si usa un generatore staticu, ci hè bisognu di scrive script supplementari è aduprà biblioteche per simplificà u prucessu di generazione di e pagine è di carica in u repository. Simply, se guardate e fonti in un repository privatu separatu, allora ogni volta chì ci hè un cambiamentu in u situ, era necessariu di implementà l'ambiente lucale per a generazione successiva di pagine statiche è publicazione in u repositoriu di u situ principale.
Ci hè una abbundanza è tutti anu u listessu prublema. Queste azzioni piglianu troppu tempu è sforzu, è infine rallentà u travagliu nantu à u situ, soprattuttu dopu à parechje migrazioni da OS à OS o incidenti cù a perdita di dati nantu à i discu duru. (questu era u casu in u mo casu).
Recentemente, o in una notificazione pop-up in u situ web o in un newsletter da GitHub, hè statu nutatu un CI / CD di novu custruitu, chì hà permessu di esse realizatu queste azzioni cù u minimu sforzu.
Circa i generatori di pagine statiche
Ùn aghju micca cuncentratu una attenzione speciale nantu à questu sub-elementu, ma sparteraghju un paru di tesi chì sò ghjuntu durante a selezzione è l'usu di i seguenti:
1) sceglite un generatore chì cunvene à a vostra lingua di prugrammazione, o quellu chì hè u più chjaru pussibule. Aghju ghjuntu à questa idea in un momentu quandu aghju avutu aghjustà qualchì funziunalità per u situ per travaglià, aghjunghje crutches per a so più grande stabilità è automatizazione. Inoltre, questu hè un bonu mutivu per scrive funziunalità supplementu sè stessu in forma di plugins;
2) quale generatore di sceglie hè una scelta persunale, ma vale a pena cunsiderà chì per l'immersione iniziale in u travagliu di e funziunalità di e Pagine GitHub, avete prima installatu. . Fortunatamente, vi permette di generà un situ web da fonti direttamente in u repository (Ripeteraghju questu cù a mo scelta).
A mo scelta di generatore hè basatu annantu à u primu puntu. chì hè scrittu in Python facilmente rimpiazzatu Jekyll, chì hè straneru per mè (usu per quasi un annu). In u risultatu, ancu creà è edità articuli è travaglià in un situ web dà una sperienza supplementaria in una lingua chì hè interessante per mè.
__
Formulazione di u prublema
U compitu principale serà di scrive un script (in realtà un schedariu di cunfigurazione) chì generà automaticamente pagine statiche da un repository privatu. A suluzione implicarà a funziunalità di un ambiente virtuale. U script stessu aghjunghje pagine pronti à u repositoriu publicu.
Strumenti per suluzione
Strumenti chì avemu aduprà per risolve u prublema:
- Azzioni GitHub;
- Python3.7;
- Pelicanu;
- Git;
- Pagine GitHub.
Solución di salvezza
Allora, dopu avè familiarizatu cù a ducumentazione un pocu è capiscenu cumu i scripts per l'Azzioni sò scritti, hè diventatu chjaru chì stu miccanisimu risolve cumplettamente u prublema chì hè ghjuntu. À u mumentu di a scrittura, duvete abbonate per aduprà sta funziunalità. !

Descrizzione di a nova funziunalità da Github stessu
A scrittura di un script Actions principia da creà un schedariu chjamatu in un cartulare .github è u so sottucartulariu workflows. Questu pò esse fattu manualmente o da l'editore in a tabulazione Azioni in a pagina di repository.

Esempiu di una forma di scrittura in biancu
Cumentu brevemente nantu à a forma
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.Scrivemu u nostru propiu basatu annantu à u mudellu:
0) Pudete ancu lascià u nome "CI". Hè una questione di gustu.
1) Dopu, avete bisognu di selezziunà l'azzione / trigger chì lanciarà u script, in u nostru casu, questu hè u solitu push di un novu impegnu à u repository.
on:
push2) L'imagine nantu à a basa di a quale serà lanciatu u script serà ancu lasciata da l'esempiu, postu chì Ubuntu Hè abbastanza satisfacente in termini di funzionalità richieste. Fighjendu diventa chjaru chì questu pò esse qualsiasi imagine necessariu o simplicemente convenientu (o un containeru Docker basatu annantu à questu).
build:
runs-on: ubuntu-latest3) In i passi, avemu prima stallatu l'ambienti per preparà u travagliu principale.
3.1) vai à u ramu chì avemu bisognu (passu standard checkout):
- uses: actions/checkout@v13.2) installate Python:
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.73.3) installate e dipendenze di u nostru generatore:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt3.4) creà un repertoriu in quale e pagine di u situ seranu generate:
- name: Make output folder
run: mkdir output4) Per chì u travagliu nantu à u situ sia coherente, vale à dì, per ùn sguassà i cambiamenti precedenti è per pudè aghjunghje cambiamenti à u repository di u situ senza cunflitti, u prossimu passu serà di clone u repository di u situ ogni volta:
- name: Clone master branch
run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./outputStu passu chjama variabili di u sistema:
- variabile
GITHUB_ACTORGitHub s'installa, è questu hè u nome d'utilizatore per a culpa di quale stu script hè statu lanciatu; - variabile
secrets.ACCESS_TOKENquestu hè generatu , pudemu passà cum'è una variabile di l'ambiente mettendulu in a tabulazioneSecretsi nostri paràmetri di repository. Per piacè nutate chì durante a generazione u token ci sarà furnitu una volta, ùn ci sarà più accessu à questu. Cum'è i valori di l'articuli Secrets.
5) Passemu à generà e nostre pagine:
- name: Generate static pages
run: pelican content -o output -s publishconf.pyI paràmetri passati à u generatore sò rispunsevuli di u cartulare induve i fugliali generati seranu mandati (-o output) è u schedariu di cunfigurazione chì avemu usatu per generà (-s publishconf.py; Pudete leghje nantu à l'approcciu per separà a cunfigurazione lucale è a cunfigurazione per a publicazione in a documentazione Pelican).
Lasciami ricurdà ciò chì hè in u nostru cartulare output U repositoriu di u situ hè digià statu clonatu.
6) Configuremu git è indexemu i nostri schedarii cambiati:
- 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À questu puntu, una variabile digià cunnisciuta hè aduprata è u cartulare di travagliu hè indicatu in quale i cumandamenti da questu passu seranu lanciati. U cumandimu per andà in u cartulare di travagliu altrimenti parerebbe - cd output.
7) Generemu un missaghju di cummissione, committemu i cambiamenti è spinghjeli in u repository. Cusì chì l'impegnu ùn hè micca in vanu è per quessa ùn pruduce micca un errore in bash (u risultatu di output ùn hè micca 0) - prima, verificate s'ellu hè necessariu di impegnà è spinghje qualcosa in tuttu. Per fà questu avemu aduprà u cumandamentu git diff-index --quiet --cached HEAD -- chì hà da esse uscita à u terminal 0 s'ellu ùn ci hè micca cambiamenti relative à a versione precedente di u situ, è 1 ci sò tali cambiamenti. Allora processemu u risultatu di stu cumandamentu. Cusì, in l'infurmazioni nantu à l'esekzione di u script, avemu da registrà infurmazioni utili nantu à u statu di u situ in questa fase, invece di crashing automaticamente è di mandà un rapportu nantu à u script crash.
Eseguimu ancu queste azzioni in u nostru annuariu cù pagine pronti.
- 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: ./outputrisultatu
In u risultatu, un tali script permette micca di pensà à creà pagine statiche. Aghjunghjendu cambiamenti direttamente à un repositoriu privatu, sia per travaglià cù git da qualsiasi sistema o creendu un schedariu attraversu l'interfaccia web GitHub, Actions farà tuttu. Se u script crashes inaspettatamente, una notificazione serà mandata à u vostru email.
Codice cumpletu
Lascià a mo versione di travagliu, in quale l'ultimu passu aghjusta l'inviu di una notificazione chì un commit hè statu imbuttatu à u repositoriu principale.
I Secrets descritti sopra sò usati, induve u token di bot è l'ID d'utilizatore à quale u messagiu deve esse mandatu sò aghjuntu.
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: ./outputScreenshots

U risultatu di una di e corse affissate in a tabulazione Azioni di u repositoriu fonte

Messaghju da u bot nantu à a fine di u script
E ligami utili
Source: www.habr.com
