ืืืืจ ืฉืืืคืฉืชื ืืช Habr ืืขื, ืืืคืชืขืชื ืฉืืขื ืืืื ืืืืจืื ืคืืจืกืื ืื ืืฉื ืืชืืื ื ืฉื GitHub (ืืื) - ืคืขืืืืช.
ื ืจืื ืฉื ืืชื ืืืกืืืจ ืื ืืจืกืืืืืื ื ืืื ืืขืืืื ืฉืืคืื ืงืฆืืื ืืืืช ืขืืืื ืืืืืงื, ืื ืื "ืืื". ืืื ืื ืชืืื ื ืฉืืืืฉืืช ืฉื ืืืื ืฉืืืคืฉืจืช ืืืฉืชืืฉ ืืืื ืื ืืืืืจืื ืคืจืืืื. ืื ืขื ืขืืืื ืขื ืืืื ืืืืืื ืืื ืฉืขืืื ืืืืจ ืืืืืจ ืื.
ืคืจืืืกืืืจืื
ืื ื ืชืืื ืืคื ืืกืืจ, ืื ืื ืืกืชื ืจืืื ืืืืืืจ ืฉืืชืืืื ืืืคืืฉ ืืืจ ืืคืฉืจืืช ืืืืจื, ื ืืื, ืงืื ืืืื ืืืช ืืืืกืื ืืชืจ ืืืฉื "ืืืืืชื", ื ืืืฆืชื ืืืืืช ืืกืคืจ ืืืืืช ืืืกืจืืง ืืืืจืื ืจืืื.
ืืฉ ืื ืฉืื ืฉืืืืจืื ืืืืกืื, ืืืจืื ืืฉืจืช ืขื ื, ืืื ืฉืื ืจืืฆื ืืืืื ืืช ืืขืืืื, ืืืื ืืจืืงืฆืื ืืืชืฉืืื ืขื ืื ืื ืืื ืืขืืืช ืืชืจืื ืกืืืืื ืืืืืจ, ืฉืื ืืขืช ื ืืชื ืืขืฉืืช ืืืช ืื ื-GitHub ืืื ื-GitLab.
ืืืืื ืฉืื ืืืืจื ืืืฉืืช ืฉื ืื ืืื.
ืืืืืจื ืืกืืคืืช ืฉืื ืืืืชื GitHub Pages.
ืขื ืืคืื
ืื ืื ืืืืข gh-pages
- ืืืื ืืคืฉืจืืช ืืืืกืื ืชืืขืื ืืฆืืจืช ืืชืจ ืืื ืืจื ื ืืืื ื ืืชื ืช ืืื ืชืฉืืื, ืืื ืืกืฃ ืืชืืขืื, ืืืฆืข ืื ืืืืกื ืืชืจืื ืืืฉืืื. ืคืื ืงืฆืืื ืืืืช ืื ืืกืืคืงืช ืขื ืืื GitHub ืืื ืืืฉืชืืฉืื ืืืืื ื ืืืืืจืืช ืืืืืจ.
ืืืืจ ืืคืจืืืงืืื ืืฉืชืืฉ ืืขื ืฃ gh-pages
, ืขืืืจ ืืชืจ ืืฉืชืืฉ - ืืืืจ ื ืคืจื ืขื ืืฉื username.github.io
ืขื ืืงืืจืืช ืืืชืจ ื master
ืขื ืฃ.
ืชืืื ืืจืืืช ืคืจืืื ื ืืกืคืื CNAME
ืขื ืฉื ืืืืืืื ืืืืืจืช ื-DNS ืฉื ืกืคืง ืืืืืืื ืฉืื ืืฉืจืชื GitHub.
ืื ื ืืืื ืฉืืฉ ืืื ืืจืื ืืืืจืื ืขื ืืื ืืคืชื ืืชืจ ืืื, ืื ืื ืขื ืื ืื ื ืืืื ืืืืจ ืืืชืจ.
ืืชืขืืจืจืช ืืขืื
ืืืขืื ืืืืชื ืฉืืืฉืจ ืืฉืชืืฉืื ืืืืืื ืกืืื, ืืฉ ืฆืืจื ืืืชืื ืกืงืจืืคืืื ื ืืกืคืื ืืืืฉืชืืฉ ืืกืคืจืืืช ืืื ืืคืฉื ืืช ืชืืืื ืืฆืืจืช ืืืคืื ืืืขืื ืชื ืืืืืจ. ืคืฉืื, ืื ืืชื ืืืืกื ืืช ืืืงืืจืืช ืืืืืจ ืคืจืื ื ืคืจื, ืื ืืื ืคืขื ืฉืืฉ ืฉืื ืื ืืืฉืื ืืืชืจ, ืืื ืฆืืจื ืืคืจืืก ืืช ืืกืืืื ืืืงืืืืช ืขืืืจ ืืืืจ ืืื ืฉื ืืคืื ืกืืืืื ืืคืจืกืื ืืืืืจ ืืืชืจ ืืจืืฉื.
ืืฉ ืฉืคืข
ืจืง ืืืืจืื ื, ืื ืืืชืจืื ืืืงืคืฆืช ืืืชืจ ืื ืื ืืืืืืจ ืืืืช GitHub, ืืืืื ื ื-CI/CD ืืืฉ ืฉื ืื ื, ืฉืืืคืฉืจ ืืืฆืข ืืช ืืคืขืืืืช ืืืื ืืืื ืืืื ืืืืฅ.
ืขื ืืืืืื ืืคืื ืกืืืืื
ืื ืืชืืงื ืชืฉืืืช ืื ืืืืืืช ืืคืจืื ืืืฉื ื ืืื, ืืื ืืฉืชืฃ ืืื ืชืืืช ืฉืืืขืชื ืืืืื ืืืืื ืืืืืจื ืืืฉืืืืฉ ืืคืจืืืื ืืืืื:
1) ืืืจ ืื ืจืืืจ ืฉืืชืืื ืืฉืคืช ืืชืื ืืช ืฉืื, ืื ืืื ืืจืืจ ืืื ืืืคืฉืจ. ืืืขืชื ืืจืขืืื ืืื ืืชืงืืคื ืฉืื ืื ื ืขืฆืื ืืืืชื ืฆืจืื ืืืืกืืฃ ืงืฆืช ืคืื ืงืฆืืื ืืืืช ืืื ืฉืืืชืจ ืืขืืื, ืืืืกืืฃ ืงืืืื ืืืฆืืืืช ืืืืืืืฆืื ืืืชืจ. ืื ืืกืฃ, ืื ืกืืื ืืืื ืืืชืื ืคืื ืงืฆืืื ืืืืช ื ืืกืคืช ืืขืฆืื ืืฆืืจื ืฉื ืชืืกืคืื;
2) ืืืื ืื ืจืืืจ ืืืืืจ ืืื ืืืืจื ืืืฉืืช, ืืื ืืืื ืืงืืช ืืืฉืืื ืฉืืฆืืจื ืืืชืขืืงืืช ืืจืืฉืื ืืช ืืขืืืื ืฉื ืืคืื ืงืฆืืื ืืืืช ืฉื GitHub Pages, ืชืืืื ืขืืื ืืืชืงืื
ืืืืืจื ืฉืื ืืื ืจืืืจ ืืืืกืกืช ืขื ืื ืงืืื ืืจืืฉืื ื.
__
ืืฆืืจืช ืืืขืื
ืืืฉืืื ืืขืืงืจืืช ืชืืื ืืืชืื ืกืงืจืืคื (ืืืขืฉื ืงืืืฅ ืชืฆืืจื) ืฉืืืฆืืจ ืืืืืืืืช ืืคืื ืกืืืืื ืืืืืจ ืคืจืื. ืืคืชืจืื ืืืืื ืืช ืืคืื ืงืฆืืื ืืืืช ืฉื ืกืืืื ืืืจืืืืืืช. ืืกืงืจืืคื ืขืฆืื ืืืกืืฃ ืืคืื ืืืื ืื ืืืืืจ ืืฆืืืืจื.
ืืืื ืืคืชืจืื
ืืืื ืืื ื ืฉืชืืฉ ืืื ืืคืชืืจ ืืช ืืืขืื:
- ืคืขืืืืช GitHub;
- ืคืืืชืื 3.7;
- ืฉืึทืงื ึทืื;
- ืืื;
- ืืคื GitHub.
ืืคืชืจืื
ืืื, ืืืืจ ืืืืจืืช ืงืื ื ืขื ืืชืืขืื ืืืื ืช ืืืคื ืืชืืืช ืกืงืจืืคืืื ื-Actions, ืืชืืจืจ ืื ืืื ืื ืื ืืื ืืคืชืืจ ืืืืืืื ืืช ืืืขืื ืฉื ืืฆืจื. ืืืื ืืืชืืื, ืขืืื ืืืืจืฉื ืืื ืืืฉืชืืฉ ืืคืื ืงืฆืืื ืืืืช ืื.
ืชืืืืจ ืืคืื ืงืฆืืื ืืืืช ืืืืฉื ืฉื Github ืขืฆืื
ืืชืืืช ืกืงืจืืคื Actions ืืชืืืื ืืืฆืืจืช ืงืืืฅ ืืฉื ืืชืืงืืื .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) ืืืืจ ืืื, ืขืืื ืืืืืจ ืืช ืืคืขืืื/ืืจืืืจ ืฉืืคืขืื ืืช ืืกืงืจืืคื, ืืืงืจื ืฉืื ื ืื ืืืืืคื ืืจืืืื ืฉื commit ืืืฉ ืืืืืจ.
on:
push
2) ื ืฉืืืจ ืื ืืช ืืชืืื ื ืฉืขื ืืกืืกื ืืืฉืง ืืกืงืจืืคื ืืืืืื, ืฉืื ืืืืื ืื ืื ืืจืืฆื ืืืคืื ืงืฆืืื ืืืืช ืืืจืืฉื. ืืกืชืื ืขื
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
ืืกื
ืืชืืฆืื ืฉื ืืืช ืืืจืืฆืืช ืืืืฆืืืช ืืืฉืื ืืช ืคืขืืืืช ืฉื ืืืืจ ืืืงืืจ
ืืืืขื ืืืืื ืขื ืืฉืืืช ืืชืกืจืื
ืงืืฉืืจืื ืฉืืืืฉืืื
ืืงืืจ: www.habr.com