ืคืขื•ืœื•ืช GitHub ื›-CI/CD ืขื‘ื•ืจ ืืชืจ ืขืœ ืžื—ื•ืœืœ ืกื˜ื˜ื™ ื•ื“ืคื™ GitHub

ืคืขื•ืœื•ืช GitHub ื›-CI/CD ืขื‘ื•ืจ ืืชืจ ืขืœ ืžื—ื•ืœืœ ืกื˜ื˜ื™ ื•ื“ืคื™ GitHub

ืœืื—ืจ ืฉื—ื™ืคืฉืชื™ ืืช Habr ืžืขื˜, ื”ื•ืคืชืขืชื™ ืฉืžืขื˜ ืžืื•ื“ ืžืืžืจื™ื ืคื•ืจืกืžื• ื‘ื ื•ืฉื ื”ืชื›ื•ื ื” ืฉืœ GitHub (ื‘ื˜ื) - ืคืขื•ืœื•ืช.

ื ืจืื” ืฉื ื™ืชืŸ ืœื”ืกื‘ื™ืจ ืื ื“ืจืกื˜ื™ื™ื˜ืžื ื˜ ื›ื–ื” ื‘ืขื•ื‘ื“ื” ืฉื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืขื“ื™ื™ืŸ ื‘ื‘ื“ื™ืงื”, ืื ื›ื™ "ื‘ื˜ื". ืื‘ืœ ื–ื• ืชื›ื•ื ื” ืฉื™ืžื•ืฉื™ืช ืฉืœ ื”ื‘ื˜ื ืฉืžืืคืฉืจืช ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื–ื” ื‘ืžืื’ืจื™ื ืคืจื˜ื™ื™ื. ื–ื” ืขืœ ืขื‘ื•ื“ื” ืขื ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ื• ืฉืขืœื™ื” ืื“ื‘ืจ ื‘ืžืืžืจ ื–ื”.

ืคืจื”ื™ืกื˜ื•ืจื™ื”

ืื ื ืชื—ื™ืœ ืœืคื™ ื”ืกื“ืจ, ืื– ืžืŸ ื”ืกืชื ืจืื•ื™ ืœื”ื–ื›ื™ืจ ืฉื‘ืชื”ืœื™ืš ื—ื™ืคื•ืฉ ืื—ืจ ืืคืฉืจื•ืช ืžื”ื™ืจื”, ื ื•ื—ื”, ืงืœื” ื•ื—ื™ื ืžื™ืช ืœืื—ืกื•ืŸ ืืชืจ ืื™ืฉื™ "ืื•ื“ื•ืชื™", ื ืืœืฆืชื™ ืœื‘ืœื•ืช ืžืกืคืจ ืœื™ืœื•ืช ื•ืœืกืจื•ืง ืžืืžืจื™ื ืจื‘ื™ื.

ื™ืฉ ืื ืฉื™ื ืฉื‘ื•ื—ืจื™ื ื‘ืื—ืกื•ืŸ, ืื—ืจื™ื ื‘ืฉืจืช ืขื ืŸ, ื•ืžื™ ืฉืœื ืจื•ืฆื” ืœื”ื‘ื™ืŸ ืืช ื”ืขื‘ื•ื“ื”, ื”ืื™ื ื˜ืจืืงืฆื™ื” ื•ื”ืชืฉืœื•ื ืขืœ ื›ืœ ื–ื” ื›ืžื• ื”ืขืœืืช ืืชืจื™ื ืกื˜ื˜ื™ื™ื ืœืžืื’ืจ, ืฉื›ืŸ ื›ืขืช ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื’ื ื‘-GitHub ื•ื’ื ื‘-GitLab.

ื›ืžื•ื‘ืŸ ืฉื–ื• ื‘ื—ื™ืจื” ืื™ืฉื™ืช ืฉืœ ื›ืœ ืื—ื“.

ื”ื‘ื—ื™ืจื” ื”ืกื•ืคื™ืช ืฉืœื™ ื”ื™ื™ืชื” GitHub Pages.

ืขืœ ื“ืคื™ื

ืžื™ ืœื ืžื•ื“ืข gh-pages - ื–ื•ื”ื™ ืืคืฉืจื•ืช ืœืื—ืกื•ืŸ ืชื™ืขื•ื“ ื‘ืฆื•ืจืช ืืชืจ ืื™ื ื˜ืจื ื˜ ื•ื”ื™ื ื ื™ืชื ืช ืœืœื ืชืฉืœื•ื, ื•ื‘ื ื•ืกืฃ ืœืชื™ืขื•ื“, ืžื•ืฆืข ื’ื ืœืื—ืกืŸ ืืชืจื™ื ืื™ืฉื™ื™ื. ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ืžืกื•ืคืงืช ืขืœ ื™ื“ื™ GitHub ืœื›ืœ ื”ืžืฉืชืžืฉื™ื ื•ื–ืžื™ื ื” ื‘ื”ื’ื“ืจื•ืช ื”ืžืื’ืจ.

ืžืื’ืจ ื”ืคืจื•ื™ืงื˜ื™ื ืžืฉืชืžืฉ ื‘ืขื ืฃ gh-pages, ืขื‘ื•ืจ ืืชืจ ืžืฉืชืžืฉ - ืžืื’ืจ ื ืคืจื“ ืขื ื”ืฉื username.github.io ืขื ืžืงื•ืจื•ืช ื”ืืชืจ ื‘ master ืขื ืฃ.

ืชื•ื›ืœ ืœืจืื•ืช ืคืจื˜ื™ื ื ื•ืกืคื™ื ื‘ืชื™ืขื•ื“, ืื‘ืœ ื”ืจืฉื• ืœื™ ืจืง ืœืฆื™ื™ืŸ ืฉ-GitHub ื”ื•ื ื ื“ื™ื‘ ื‘ืื•ืคืŸ ืžืคืชื™ืข ื‘ื›ืš ืฉื”ื•ื ืžืืคืฉืจ ืœื›ืœ ืื—ื“ ืœืงืฉืจ ืืช ื”ื“ื•ืžื™ื™ืŸ ืฉืœื• ืœืืชืจ ื›ื–ื” ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืงื•ื‘ืฅ CNAME ืขื ืฉื ื”ื“ื•ืžื™ื™ืŸ ื•ื”ื’ื“ืจืช ื”-DNS ืฉืœ ืกืคืง ื”ื“ื•ืžื™ื™ืŸ ืฉืœืš ื‘ืฉืจืชื™ GitHub.

ืื ื™ ื‘ื˜ื•ื— ืฉื™ืฉ ื›ืืŸ ื”ืจื‘ื” ืžืืžืจื™ื ืขืœ ืื™ืš ืœืคืชื— ืืชืจ ื›ื–ื”, ืื– ืœื ืขืœ ื–ื” ืื ื™ ื”ื•ืœืš ืœื“ื‘ืจ ื™ื•ืชืจ.

ืžืชืขื•ืจืจืช ื‘ืขื™ื”

ื”ื‘ืขื™ื” ื”ื™ื™ืชื” ืฉื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘ืžื—ื•ืœืœ ืกื˜ื˜ื™, ื™ืฉ ืฆื•ืจืš ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ื ื•ืกืคื™ื ื•ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื•ืช ื›ื“ื™ ืœืคืฉื˜ ืืช ืชื”ืœื™ืš ื™ืฆื™ืจืช ื”ื“ืคื™ื ื•ื˜ืขื™ื ืชื ืœืžืื’ืจ. ืคืฉื•ื˜, ืื ืืชื” ืžืื—ืกืŸ ืืช ื”ืžืงื•ืจื•ืช ื‘ืžืื’ืจ ืคืจื˜ื™ ื ืคืจื“, ืื– ื‘ื›ืœ ืคืขื ืฉื™ืฉ ืฉื™ื ื•ื™ ื›ืœืฉื”ื• ื‘ืืชืจ, ื”ื™ื” ืฆื•ืจืš ืœืคืจื•ืก ืืช ื”ืกื‘ื™ื‘ื” ื”ืžืงื•ืžื™ืช ืขื‘ื•ืจ ื”ื“ื•ืจ ื”ื‘ื ืฉืœ ื“ืคื™ื ืกื˜ื˜ื™ื™ื ื•ืคืจืกื•ื ื‘ืžืื’ืจ ื”ืืชืจ ื”ืจืืฉื™.

ื™ืฉ ืฉืคืข ื’ื ืจื˜ื•ืจื™ื ืกื˜ื˜ื™ื™ื ื•ืœื›ื•ืœื ื™ืฉ ืืช ืื•ืชื” ื‘ืขื™ื”. ืคืขื•ืœื•ืช ืืœื• ืœื•ืงื—ื•ืช ื™ื•ืชืจ ืžื“ื™ ื–ืžืŸ ื•ืžืืžืฅ, ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืžืื˜ื•ืช ืืช ื”ืขื‘ื•ื“ื” ื‘ืืชืจ, ื‘ืžื™ื•ื—ื“ ืœืื—ืจ ืžืกืคืจ ื”ืขื‘ืจื•ืช ืžืžืขืจื›ืช ื”ืคืขืœื” ืœืžืขืจื›ืช ื”ืคืขืœื” ืื• ืชืงืจื™ื•ืช ืขื ืื•ื‘ื“ืŸ ื ืชื•ื ื™ื ื‘ื›ื•ื ื ื™ื ืงืฉื™ื—ื™ื (ื–ื” ื”ื™ื” ื”ืžืงืจื” ื‘ืžืงืจื” ืฉืœื™).

ืจืง ืœืื—ืจื•ื ื”, ืื• ื‘ื”ืชืจืื” ืžื•ืงืคืฆืช ื‘ืืชืจ ืื• ื‘ื ื™ื•ื–ืœื˜ืจ ืžื‘ื™ืช GitHub, ื”ื‘ื—ื™ื ื• ื‘-CI/CD ื—ื“ืฉ ืฉื ื‘ื ื”, ืฉืื™ืคืฉืจ ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื•ืช ื”ืœืœื• ื‘ืžื™ื ื™ืžื•ื ืžืืžืฅ.

ืขืœ ืžื—ื•ืœืœื™ ื“ืคื™ื ืกื˜ื˜ื™ื™ื

ืœื ืืชืžืงื“ ืชืฉื•ืžืช ืœื‘ ืžื™ื•ื—ื“ืช ื‘ืคืจื™ื˜ ื”ืžืฉื ื” ื”ื–ื”, ืื‘ืœ ืืฉืชืฃ ื›ืžื” ืชื–ื•ืช ืฉื”ื’ืขืชื™ ืืœื™ื”ืŸ ื‘ืžื”ืœืš ื”ื‘ื—ื™ืจื” ื•ื”ืฉื™ืžื•ืฉ ื‘ืคืจื™ื˜ื™ื ื”ื‘ืื™ื:

1) ื‘ื—ืจ ื’ื ืจื˜ื•ืจ ืฉืžืชืื™ื ืœืฉืคืช ื”ืชื›ื ื•ืช ืฉืœืš, ืื• ื›ื–ื” ื‘ืจื•ืจ ื›ื›ืœ ื”ืืคืฉืจ. ื”ื’ืขืชื™ ืœืจืขื™ื•ืŸ ื”ื–ื” ื‘ืชืงื•ืคื” ืฉื‘ื” ืื ื™ ืขืฆืžื™ ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืงืฆืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ื“ื™ ืฉื”ืืชืจ ื™ืขื‘ื•ื“, ืœื”ื•ืกื™ืฃ ืงื‘ื™ื™ื ืœื™ืฆื™ื‘ื•ืช ื•ืื•ื˜ื•ืžืฆื™ื” ื™ื•ืชืจ. ื‘ื ื•ืกืฃ, ื–ื• ืกื™ื‘ื” ื˜ื•ื‘ื” ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื ื•ืกืคืช ื‘ืขืฆืžืš ื‘ืฆื•ืจื” ืฉืœ ืชื•ืกืคื™ื;

2) ืื™ื–ื” ื’ื ืจื˜ื•ืจ ืœื‘ื—ื•ืจ ื”ื™ื ื‘ื—ื™ืจื” ืื™ืฉื™ืช, ืื‘ืœ ื›ื“ืื™ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืฉืœืฆื•ืจืš ื”ื”ืชืขืžืงื•ืช ื”ืจืืฉื•ื ื™ืช ื‘ืขื‘ื•ื“ื” ืฉืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ GitHub Pages, ืชื—ื™ืœื” ืขืœื™ืš ืœื”ืชืงื™ืŸ ื’'ืงื™ืœ. ืœืžืจื‘ื” ื”ืžื–ืœ, ื–ื” ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืืชืจ ืื™ื ื˜ืจื ื˜ ืžืžืงื•ืจื•ืช ื™ืฉื™ืจื•ืช ื‘ืžืื’ืจ (ืื ื™ ืื—ื–ื•ืจ ืขืœ ื–ื” ืขื ื”ื‘ื—ื™ืจื” ืฉืœื™).

ื”ื‘ื—ื™ืจื” ืฉืœื™ ื‘ื’ื ืจื˜ื•ืจ ืžื‘ื•ืกืกืช ืขืœ ื”ื ืงื•ื“ื” ื”ืจืืฉื•ื ื”. ืฉืึทืงื ึทืื™ ืฉื ื›ืชื‘ ื‘ืคื™ื™ืชื•ืŸ ื”ื—ืœื™ืฃ ื‘ืงืœื•ืช ืืช ื’'ืงื™ืœ, ืฉื–ืจ ืœื™ (ื”ืฉืชืžืฉ ื‘ื• ื›ืžืขื˜ ืฉื ื”). ื›ืชื•ืฆืื” ืžื›ืš, ื’ื ื™ืฆื™ืจื” ื•ืขืจื™ื›ื” ืฉืœ ืžืืžืจื™ื ื•ืขื‘ื•ื“ื” ื‘ืืชืจ ื ื•ืชื ื™ื ื ื™ืกื™ื•ืŸ ื ื•ืกืฃ ื‘ืฉืคื” ืฉืžืขื ื™ื™ื ืช ืื•ืชื™.

__

ื”ืฆื”ืจืช ื”ื‘ืขื™ื”

ื”ืžืฉื™ืžื” ื”ืขื™ืงืจื™ืช ืชื”ื™ื” ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ (ืœืžืขืฉื” ืงื•ื‘ืฅ ืชืฆื•ืจื”) ืฉื™ื™ืฆื•ืจ ืื•ื˜ื•ืžื˜ื™ืช ื“ืคื™ื ืกื˜ื˜ื™ื™ื ืžืžืื’ืจ ืคืจื˜ื™. ื”ืคืชืจื•ืŸ ื™ื›ืœื•ืœ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืกื‘ื™ื‘ื” ื•ื™ืจื˜ื•ืืœื™ืช. ื”ืกืงืจื™ืคื˜ ืขืฆืžื• ื™ื•ืกื™ืฃ ื“ืคื™ื ืžื•ื›ื ื™ื ืœืžืื’ืจ ื”ืฆื™ื‘ื•ืจื™.

ื›ืœื™ื ืœืคืชืจื•ืŸ

ื›ืœื™ื ื‘ื”ื ื ืฉืชืžืฉ ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื”:

  • ืคืขื•ืœื•ืช GitHub;
  • ืคื™ื™ืชื•ืŸ 3.7;
  • ืฉืึทืงื ึทืื™;
  • ื’ื™ื˜;
  • ื“ืคื™ GitHub.

ื”ืคืชืจื•ืŸ

ืœื›ืŸ, ืœืื—ืจ ื”ื™ื›ืจื•ืช ืงื˜ื ื” ืขื ื”ืชื™ืขื•ื“ ื•ื”ื‘ื ืช ืื•ืคืŸ ื›ืชื™ื‘ืช ืกืงืจื™ืคื˜ื™ื ืœ-Actions, ื”ืชื‘ืจืจ ื›ื™ ื”ืžื ื’ื ื•ืŸ ื”ื–ื” ื™ืคืชื•ืจ ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ื‘ืขื™ื” ืฉื ื•ืฆืจื”. ื‘ื–ืžืŸ ื”ื›ืชื™ื‘ื”, ืขืœื™ืš ืœื”ื™ืจืฉื ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื•. ืœื‘ื“ื™ืงืช ื‘ื˜ื!

ืคืขื•ืœื•ืช GitHub ื›-CI/CD ืขื‘ื•ืจ ืืชืจ ืขืœ ืžื—ื•ืœืœ ืกื˜ื˜ื™ ื•ื“ืคื™ GitHub
ืชื™ืื•ืจ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื—ื“ืฉื” ืฉืœ Github ืขืฆืžื”

ื›ืชื™ื‘ืช ืกืงืจื™ืคื˜ Actions ืžืชื—ื™ืœื” ื‘ื™ืฆื™ืจืช ืงื•ื‘ืฅ ื‘ืฉื ื‘ืชื™ืงื™ื™ื” .github ื•ืชื™ืงื™ื™ืช ื”ืžืฉื ื” ืฉืœื” workflows. ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืื•ืคืŸ ื™ื“ื ื™ ืื• ืžื”ืขื•ืจืš ื‘ืœืฉื•ื ื™ืช ืคืขื•ืœื•ืช ื‘ื“ืฃ ื”ืžืื’ืจ.

ืคืขื•ืœื•ืช GitHub ื›-CI/CD ืขื‘ื•ืจ ืืชืจ ืขืœ ืžื—ื•ืœืœ ืกื˜ื˜ื™ ื•ื“ืคื™ GitHub
ื“ื•ื’ืžื” ืœื˜ื•ืคืก ืกืงืจื™ืคื˜ ืจื™ืง

ืืขื™ืจ ื‘ืงืฆืจื” ืขืœ ื”ื˜ื•ืคืก

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) ืœืื—ืจ ืžื›ืŸ, ืขืœื™ืš ืœื‘ื—ื•ืจ ืืช ื”ืคืขื•ืœื”/ื˜ืจื™ื’ืจ ืฉื™ืคืขื™ืœ ืืช ื”ืกืงืจื™ืคื˜, ื‘ืžืงืจื” ืฉืœื ื• ื–ื• ื”ื“ื—ื™ืคื” ื”ืจื’ื™ืœื” ืฉืœ commit ื—ื“ืฉ ืœืžืื’ืจ.

on:
  push

2) ื ืฉืื™ืจ ื’ื ืืช ื”ืชืžื•ื ื” ืฉืขืœ ื‘ืกื™ืกื” ื™ื•ืฉืง ื”ืกืงืจื™ืคื˜ ื›ื“ื•ื’ืžื”, ืฉื›ืŸ ืื•ื‘ื•ื ื˜ื• ื“ื™ ืžืจื•ืฆื” ืžื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื“ืจื•ืฉื”. ืžืกืชื›ืœ ืขืœ ื›ืœื™ื ื–ืžื™ื ื™ื ืžืชื‘ืจืจ ืฉื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื›ืœ ืชืžื•ื ื” ื”ื›ืจื—ื™ืช ืื• ืคืฉื•ื˜ ื ื•ื—ื” (ืื• ืงื•ื ื˜ื™ื™ื ืจ Docker ื”ืžื‘ื•ืกืก ืขืœื™ื”).

  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 ื”ื’ื“ืจื•ืช ื”ืžืื’ืจ ืฉืœื ื•. ืฉื™ืžื• ืœื‘ ืฉื‘ืžื”ืœืš ื”ื™ืฆื™ืจื” ื”ืืกื™ืžื•ืŸ ื™ืกื•ืคืง ืœื ื• ืคืขื ืื—ืช, ืœื ืชื”ื™ื” ื’ื™ืฉื” ื ื•ืกืคืช ืืœื™ื•. ื›ืžื• ื’ื ื”ืขืจื›ื™ื ืฉืœ ืคืจื™ื˜ื™ ื”ืกื•ื“ื•ืช.

5) ื‘ื•ืื• ื ืขื‘ื•ืจ ืœื™ืฆื™ืจืช ื”ื“ืคื™ื ืฉืœื ื•:

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

ื”ืคืจืžื˜ืจื™ื ื”ืžื•ืขื‘ืจื™ื ืœืžื—ื•ืœืœ ืื—ืจืื™ื ืขืœ ื”ืกืคืจื™ื™ื” ืืœื™ื” ื™ื™ืฉืœื—ื• ื”ืงื‘ืฆื™ื ืฉื ื•ืฆืจื• (-o output) ื•ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉื‘ื• ืื ื• ืžืฉืชืžืฉื™ื ื›ื“ื™ ืœื™ืฆื•ืจ (-s publishconf.py; ื ื™ืชืŸ ืœืงืจื•ื ืขืœ ื”ื’ื™ืฉื” ืœื”ืคืจื“ืช ื”ืชืฆื•ืจื” ื”ืžืงื•ืžื™ืช ื•ื”ืชืฆื•ืจื” ืœืคืจืกื•ื ื‘ืชื™ืขื•ื“ ื”ืคืœื™ืงืŸ).

ืชืŸ ืœื™ ืœื”ื–ื›ื™ืจ ืœืš ืžื” ื™ืฉ ื‘ืชื™ืงื™ื™ื” ืฉืœื ื• 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) ื‘ื•ืื• ื ื™ืฆื•ืจ ื”ื•ื“ืขืช commit, ื ื‘ืฆืข ืืช ื”ืฉื™ื ื•ื™ื™ื ื•ื ื“ื—ื•ืฃ ืื•ืชื ืœืžืื’ืจ. ื›ืš ืฉื”-commit ืื™ื ื• ืœืฉื•ื•ื ื•ืœื›ืŸ ืื™ื ื• ืžื™ื™ืฆืจ ืฉื’ื™ืื” ื‘-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, Actions ื™ืขืฉื• ื”ื›ืœ ื‘ืขืฆืžื. ืื ื”ืกืงืจื™ืคื˜ ืงื•ืจืก ื‘ืื•ืคืŸ ื‘ืœืชื™ ืฆืคื•ื™, ืชื™ืฉืœื— ื”ื•ื“ืขื” ืœืžื™ื™ืœ ืฉืœืš.

ืงื•ื“ ืžืœื

ืื ื™ ืืฉืื™ืจ ืืช ื’ืจืกืช ื”ืขื‘ื•ื“ื” ืฉืœื™, ืฉื‘ื” ื”ืฉืœื‘ ื”ืื—ืจื•ืŸ ืžื•ืกื™ืฃ ืฉืœื™ื—ืช ื”ื•ื“ืขื” ืขืœ ื›ืš ืฉ-commit ื ื“ื—ืฃ ืœืžืื’ืจ ื”ืจืืฉื™.

ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืกื•ื“ื•ืช ื”ืžืชื•ืืจื™ื ืœืขื™ืœ, ื›ืืฉืจ ืžืชื•ื•ืกืคื™ื ืืกื™ืžื•ืŸ ื”ื‘ื•ื˜ ื•ืžื–ื”ื” ื”ืžืฉืชืžืฉ ืฉืืœื™ื• ื™ืฉ ืœืฉืœื•ื— ืืช ื”ื”ื•ื“ืขื”.

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

ืžืกืš

ืคืขื•ืœื•ืช GitHub ื›-CI/CD ืขื‘ื•ืจ ืืชืจ ืขืœ ืžื—ื•ืœืœ ืกื˜ื˜ื™ ื•ื“ืคื™ GitHub
ื”ืชื•ืฆืื” ืฉืœ ืื—ืช ืžื”ืจื™ืฆื•ืช ื”ืžื•ืฆื’ื•ืช ื‘ืœืฉื•ื ื™ืช ืคืขื•ืœื•ืช ืฉืœ ืžืื’ืจ ื”ืžืงื•ืจ

ืคืขื•ืœื•ืช GitHub ื›-CI/CD ืขื‘ื•ืจ ืืชืจ ืขืœ ืžื—ื•ืœืœ ืกื˜ื˜ื™ ื•ื“ืคื™ GitHub
ื”ื•ื“ืขื” ืžื”ื‘ื•ื˜ ืขืœ ื”ืฉืœืžืช ื”ืชืกืจื™ื˜

ืงื™ืฉื•ืจื™ื ืฉื™ืžื•ืฉื™ื™ื

ื”ื‘ื ืช ืคืขื•ืœื•ืช
ืชื—ื‘ื™ืจ ืคืขื•ืœื•ืช
ืจืฉื™ืžืช ื˜ืจื™ื’ืจื™ื
ืืคืฉืจื•ื™ื•ืช ืขื‘ื•ืจ ืกื‘ื™ื‘ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช
ื“ืคื™ Github
ืจืฉื™ืžืช ืžื—ื•ืœืœ ืกื˜ื˜ื™

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”