Habr ã«ã€ããŠå°ã調ã¹ãŠã¿ããšãããGitHub ã® (ããŒã¿) æ©èœã§ããã¢ã¯ã·ã§ã³ã«é¢ããèšäºãã»ãšãã©å ¬éãããŠããªãããšã«é©ããŸããã
ãã®ãããªæ§ãããªè¡šçŸã¯ããã®æ©èœããããŒã¿çãã§ã¯ãããã®ã®ãŸã ãã¹ãäžã§ãããšããäºå®ã«ãã£ãŠèª¬æã§ããããã§ãã ãã ãããã®ããŒã«ããã©ã€ããŒã ãªããžããªã§äœ¿çšã§ããããã«ããã®ã¯ããŒã¿çã®äŸ¿å©ãªæ©èœã§ãã ãã®èšäºã§èª¬æããã®ã¯ããã®ãã¯ãããžãŒã®æŽ»çšã«ã€ããŠã§ãã
å å²æ代
é çªã«èª¬æããŠãããšãå人ã®ãAbout MeãWeb ãµã€ããä¿åããããã®ãé«éã䟿å©ãç°¡åããããŠç¡æã®ãªãã·ã§ã³ãæ¢ãéçšã§ãç§ã¯æ°æ©ãããŠå€ãã®èšäºã調ã¹ãªããã°ãªããªãã£ããšããããšã¯ãããããèšåãã䟡å€ãããã§ãããã
ãã¹ãã£ã³ã°ãéžæãã人ãããã°ãã¯ã©ãŠã ãµãŒããŒãéžæãã人ãããŸãããŸããéçãµã€ãããªããžããªã«ã¢ããããŒããããªã©ã®äœæ¥ãæäœãæ¯æããç解ããããªã人ãããŸããããã¯ãçŸåšã§ã¯ GitHub ãš GitLab ã®äž¡æ¹ã§å®è¡ã§ããããã§ãã
ãã¡ãããããã¯èª°ããå人çãªéžæã§ãã
æçµçã«éžãã ã®ã¯ GitHub Pages ã§ããã
ããŒãžã«ã€ããŠ
誰ãç¥ããªã gh-pages
- ããã¯ãããã¥ã¡ã³ãã Web ãµã€ãã®åœ¢åŒã§ä¿åããããã®ãªãã·ã§ã³ã§ãããç¡æã§æäŸãããŸããããã¥ã¡ã³ãã«å ããŠãå人㮠Web ãµã€ããä¿åããããšãææ¡ãããŠããŸãã ãã®æ©èœã¯ GitHub ã«ãã£ãŠãã¹ãŠã®ãŠãŒã¶ãŒã«æäŸããããªããžããªèšå®ã§å©çšã§ããŸãã
ãããžã§ã¯ã ãªããžããªã¯ãã©ã³ãã䜿çšããŸã gh-pages
ããŠãŒã¶ãŒ ãµã€ãã®å Žå - ãšããååã®å¥ã®ãªããžã㪠username.github.io
ãµã€ãã®ãœãŒã¹ãå«ã master
ãã©ã³ãã
ãã£ãšèŠãããšãã§ããŸã CNAME
ãã¡ã€ã³åã䜿çšããŠãGitHub ãµãŒããŒäžã«ãã¡ã€ã³ãããã€ããŒã® DNS ãèšå®ããŸãã
ãã®ãããªãµã€ãã®éçºæ¹æ³ã«ã€ããŠã¯ãããã«ããããã®èšäºããããšæããŸãã®ã§ããã以äžèª¬æããã€ããã¯ãããŸããã
åé¡ã®çºç
åé¡ã¯ãéçãžã§ãã¬ãŒã¿ãŒã䜿çšããå ŽåãããŒãžãçæããŠãªããžããªã«ããŒãããããã»ã¹ãç°¡çŽ åããããã«ãè¿œå ã®ã¹ã¯ãªãããäœæããã©ã€ãã©ãªã䜿çšããå¿ èŠããããšããããšã§ããã ç°¡åã«èšãã°ããœãŒã¹ãå¥ã®ãã©ã€ããŒã ãªããžããªã«ä¿åãããšããµã€ãã«å€æŽãçãããã³ã«ãåŸç¶ã®éçããŒãžã®çæãšã¡ã€ã³ ãµã€ã ãªããžããªã§ã®å ¬éã®ããã«ããŒã«ã«ç°å¢ãå±éããå¿ èŠããããŸããã
è±å¯ã«ãããŸã
ã€ãæè¿ãWeb ãµã€ãäžã®ãããã¢ããéç¥ãŸã㯠GitHub ããã®ãã¥ãŒã¹ã¬ã¿ãŒã§ãæå°éã®åŽåã§ãããã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ãããæ°ããæ§ç¯ããã CI/CD ã泚ç®ãããŸããã
éçããŒãžãžã§ãã¬ãŒã¿ãŒã«ã€ããŠ
ãã®ãµãé ç®ã«ã¯ç¹ã«çŠç¹ãåœãŠãŸãããã以äžã®é ç®ã®éžæãšäœ¿çšäžã«ç§ãæãã€ããããã€ãã®ä»®èª¬ãå ±æããŸãã
1) ããã°ã©ãã³ã°èšèªã«åã£ããžã§ãã¬ãŒã¿ãŒããŸãã¯ã§ããã ããããããããžã§ãã¬ãŒã¿ãŒãéžæããŸãã ç§èªèº«ããµã€ããæ©èœããããã«ããã€ãã®æ©èœãè¿œå ãããµã€ãã®å®å®æ§ãšèªååãé«ããããã«æŸèæãè¿œå ããå¿ èŠããã£ããšãã«ããã®ã¢ã€ãã¢ã«è³ããŸããã ããã«ãããã¯ãã©ã°ã€ã³ã®åœ¢åŒã§è¿œå æ©èœãèªåã§äœæããååãªçç±ã«ãªããŸãã
2) ã©ã®ãžã§ãã¬ãŒã¿ãŒãéžæãããã¯å人çãªéžæã§ãããGitHub Pages æ©èœã®äœæ¥ã«æåã«æ²¡é ããã«ã¯ãæåã«ã€ã³ã¹ããŒã«ããå¿
èŠãããããšãèæ
®ãã䟡å€ããããŸãã
ç§ã®çºé»æ©ã®éžæã¯æåã®ç¹ã«åºã¥ããŠããŸãã
__
åé¡ã®å®åŒå
äž»ãªã¿ã¹ã¯ã¯ããã©ã€ããŒã ãªããžããªããéçããŒãžãèªåçã«çæããã¹ã¯ãªãã (å®éã«ã¯æ§æãã¡ã€ã«) ãäœæããããšã§ãã ãã®ãœãªã¥ãŒã·ã§ã³ã«ã¯ãä»®æ³ç°å¢ã®æ©èœãå«ãŸããŸãã ã¹ã¯ãªããèªäœã¯ãæ¢è£œã®ããŒãžããããªã㯠ãªããžããªã«è¿œå ããŸãã
解決ã®ããã®ããŒã«
åé¡ã解決ããããã«äœ¿çšããããŒã«:
- GitHub ã¢ã¯ã·ã§ã³ã
- Python3.7;
- ããªã«ã³;
- ã®ãã;
- GitHub ããŒãžã
ãœãªã¥ãŒã·ã§ã³
ããã§ãããã¥ã¡ã³ããå°ãèªãã§ãã¢ã¯ã·ã§ã³ã®ã¹ã¯ãªãããã©ã®ããã«èšè¿°ãããŠããããç解ããåŸããã®ã¡ã«ããºã ãçºçããåé¡ãå®å
šã«è§£æ±ºããããšãæããã«ãªããŸããã å·çæç¹ã§ã¯ããã®æ©èœã䜿çšããã«ã¯ãµãã¹ã¯ã©ã€ãããå¿
èŠããããŸãã
Githubèªèº«ã«ããæ°æ©èœã®èª¬æ
ã¢ã¯ã·ã§ã³ ã¹ã¯ãªããã®äœæã¯ããã©ã«ããŒå
ã«ååä»ããã¡ã€ã«ãäœæããããšããå§ãŸããŸãã .github
ãšãã®ãµããã©ã«ã㌠workflows
ã ããã¯æåã§è¡ãããšãããªããžã㪠ããŒãžã®ãã¢ã¯ã·ã§ã³ãã¿ãã«ãããšãã£ã¿ãŒããè¡ãããšãã§ããŸãã
空ã®ã¹ã¯ãªãããã©ãŒã ã®äŸ
ãã©ãŒã ã«ç°¡åã«ã³ã¡ã³ãããŸã
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.
ãã³ãã¬ãŒãã«åºã¥ããŠç¬èªã®ã³ãŒããäœæããŠã¿ãŸãããã
0) ååããCIãã®ãŸãŸã«ããããšãã§ããŸãã ããã¯å¥œã¿ã®åé¡ã§ãã
1) 次ã«ãã¹ã¯ãªãããèµ·åããã¢ã¯ã·ã§ã³/ããªã¬ãŒãéžæããå¿ èŠããããŸãããã®å Žåãããã¯ãªããžããªãžã®æ°ããã³ãããã®éåžžã®ããã·ã¥ã§ãã
on:
push
2) Ubuntu ã¯å¿
èŠãªæ©èœãååã«åããŠããããããµã³ãã«ãšããŠã¹ã¯ãªãããèµ·åããããã®ã€ã¡ãŒãžãæ®ããŠãããŸãã èŠã€ããŠãã
build:
runs-on: ubuntu-latest
3) æé ã§ã¯ããŸãæ¬äœæ¥ã®æºåãšãªãç°å¢ãæ§ç¯ããŸãã
3.1) å¿
èŠãªãã©ã³ãã«ç§»åããŸã (æšæºã®æé ) checkout
):
- uses: actions/checkout@v1
3.2) Python ãã€ã³ã¹ããŒã«ããŸãã
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.7
3.3) ãžã§ãã¬ãŒã¿ãŒã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
3.4) ãµã€ã ããŒãžãçæããããã£ã¬ã¯ããªãäœæããŸãã
- name: Make output folder
run: mkdir output
4) ãµã€ãã§ã®äœæ¥ã«äžè²«æ§ãæããããããã€ãŸãã以åã®å€æŽãåé€ããã競åããããšãªããµã€ã ãªããžããªã«å€æŽãè¿œå ã§ããããã«ããããã«ã次ã®ã¹ãããã§ã¯æ¯åãµã€ã ãªããžããªã®ã¯ããŒã³ãäœæããŸãã
- 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
ãã®ã¹ãããã§ã¯ãã·ã¹ãã å€æ°ãåŒã³åºããŸãã
- å€æ°
GITHUB_ACTOR
GitHub ã¯èªåçã«ã€ã³ã¹ããŒã«ãããŸããããã¯ããã®ã¹ã¯ãªãããèµ·åããããŠãŒã¶ãŒåã§ãã - å€æ°
secrets.ACCESS_TOKEN
ããã¯çæãããŸãGithubã管çããããã®ããŒã¯ã³ ãã¿ãã§èšå®ããããšã§ç°å¢å€æ°ãšããŠæž¡ãããšãã§ããŸãSecrets
ãªããžããªèšå®ã çæäžã«ããŒã¯ã³ãäžåºŠæäŸãããã ãã§ããã以éã¯ã¢ã¯ã»ã¹ã§ããªãããšã«æ³šæããŠãã ããã Secrets ã¢ã€ãã ã®å€ãåæ§ã§ãã
5) ããŒãžã®çæã«é²ã¿ãŸãããã
- name: Generate static pages
run: pelican content -o output -s publishconf.py
ãžã§ãã¬ãŒã¿ãŒã«æž¡ããããã©ã¡ãŒã¿ãŒã¯ãçæããããã¡ã€ã«ãéä¿¡ããããã£ã¬ã¯ããªãŒãæ
åœããŸã (-o output
) ãšçæã«äœ¿çšããæ§æãã¡ã€ã« (-s publishconf.py
; ããŒã«ã«èšå®ãšå
¬éçšã®èšå®ãåé¢ããã¢ãããŒãã«ã€ããŠã¯ãPelican ã®ããã¥ã¡ã³ããåç
§ããŠãã ããã).
ãã©ã«ããŒã®å
容ãæãåºãããŠãã ãã output
ãµã€ã ãªããžããªã¯ãã§ã«è€è£œãããŠããŸãã
6) git ãèšå®ããŠãå€æŽãããã¡ã€ã«ã®ã€ã³ããã¯ã¹ãäœæããŸãããã
- 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
ãã®æç¹ã§ãæ¢ç¥ã®å€æ°ã䜿çšããããã®ã¹ãããã®ã³ãã³ããèµ·åãããäœæ¥ãã£ã¬ã¯ããªã瀺ãããŸãã ãã以å€ã®å Žåãäœæ¥ãã£ã¬ã¯ããªã«ç§»åããã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã cd output
.
7) ã³ãããã¡ãã»ãŒãžãçæããå€æŽãã³ãããããŠãªããžããªã«ããã·ã¥ããŸãããã ã³ããããç¡é§ã«ãªãããbash ã§ãšã©ãŒãçºçããªãããã«ãããã (åºåçµæ㯠0
) â ãŸããäœããã³ãããããŠããã·ã¥ããå¿
èŠããããã©ããã確èªããŠã¿ãŸãããã ãããè¡ãã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸã git diff-index --quiet --cached HEAD --
端æ«ã«åºåãããŸã 0
ãµã€ãã®ä»¥åã®ããŒãžã§ã³ãšæ¯èŒããŠå€æŽããªãå Žåãããã³ 1
ãã®ãããªå€åããããŸãã 次ã«ããã®ã³ãã³ãã®çµæãåŠçããŸãã ãããã£ãŠãã¹ã¯ãªããã®å®è¡ã«é¢ããæ
å ±ã«ã¯ãèªåçã«ã¯ã©ãã·ã¥ããŠã¹ã¯ãªããã®ã¯ã©ãã·ã¥ã«é¢ããã¬ããŒããéä¿¡ãããã®ã§ã¯ãªãããã®æ®µéã§ã®ãµã€ãã®ç¶æ
ã«é¢ããæçšãªæ
å ±ãèšé²ãããŸãã
ãŸããæ¢è£œã®ããŒãžã䜿çšããŠãã£ã¬ã¯ããªå ã§ãããã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
- 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
çµæ
ãã®çµæããã®ãããªã¹ã¯ãªããã䜿çšãããšãéçããŒãžã®äœæã«ã€ããŠèããå¿ èŠããªããªããŸãã ãã©ã€ããŒã ãªããžããªã«çŽæ¥å€æŽãè¿œå ããããšã§ãä»»æã®ã·ã¹ãã ãã git ãæäœããããGitHub Web ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãã¡ã€ã«ãäœæãããã«ããããããã¢ã¯ã·ã§ã³ã¯ãã¹ãŠãèªåçã«å®è¡ããŸãã ã¹ã¯ãªãããäºæããã¯ã©ãã·ã¥ããå Žåãéç¥ãé»åã¡ãŒã«ã«éä¿¡ãããŸãã
å®å šãªã³ãŒã
äœæ¥ããŒãžã§ã³ã¯ãã®ãŸãŸã«ããŠãããŸããæåŸã®ã¹ãããã§ã¯ãã³ããããã¡ã€ã³ ãªããžããªã«ããã·ã¥ããããšããéç¥ã®éä¿¡ãè¿œå ããŸãã
äžèšã® Secret ã䜿çšãããããã ããŒã¯ã³ãšã¡ãã»ãŒãžã®éä¿¡å ãšãªããŠãŒã¶ãŒ ID ãè¿œå ãããŸãã
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
ã¹ã¯ãªãŒã³ã·ã§ãã
ãœãŒã¹ ãªããžããªã® [ã¢ã¯ã·ã§ã³] ã¿ãã«è¡šç€ºãããå®è¡ã® XNUMX ã€ã®çµæ
ã¹ã¯ãªããã®å®äºã«é¢ãããããããã®ã¡ãã»ãŒãž
䟿å©ãªãªã³ã¯é
åºæïŒ habr.com