предисловие
В последнее время я видел, как многие люди в Интернете начинают использовать GitHub Actions для непрерывной интеграции (CI) и непрерывного развертывания (CD) своих проектов. Итак, по прихоти я начал использовать GitHub Actions для автоматизации развертывания личных блогов. Должен сказать, GitHub Actions действительно ароматный!
Раньше, когда я развертывал блог Hexo, я сначалаhexo gПреобразуйте записанный файл Markdown в файл HTML, а затем используйтеhexo dОтправьте сгенерированные общедоступные файлы в репозиторий Github, а затем используйте команду git, чтобы отправить исходный код разработки блога Hexo в другую ветвь репозитория для резервного копирования. Эта операция туда и обратно действительно немного хлопотна. Но после использования GitHub Actions это гораздо удобнее, мне нужно только заранее написать скрипт для автоматического выполнения, когда я пушу исходники разработки Hexo в указанную ветку, GitHub Actions автоматически генерирует для меня HTML-файлы и публикует их в GitHub Pages Да Не очень удобно.
Далее давайте посмотрим, как использовать действия GitHub для автоматизации развертывания блогов Hexo.
GitHub Actions
GitHub Actions— сервис непрерывной интеграции, запущенный GitHub в октябре 2018 года.
Как работает GitHub Actions: после того, как мы настроим сценарий задачи (файл .yml в .github/workflows), который необходимо автоматизировать заранее, GitHub Actions отслеживает операцию (например, push) текущего хранилища. , Для автоматизации этих задач назначается виртуальный хост.
Ставим задачу — Action, которая хранится в корневом каталоге проекта..github/workflowsфайл, суффикс .yml. Действие эквивалентно рабочему процессу рабочего процесса, а рабочий процесс может иметь несколько задач, и каждая задача может быть разделена на несколько шагов. Задачи и шаги будут выполняться последовательно.
Дополнительные сведения о действиях GitHub см.Начало работы с действиями GitHub — Руан ИфэнилиОфициальный сайт GitHub Actions.
Готов к работе
Репозиторий GitHub
Во-первых, нам нужно подготовить репозиторий для развертывания блогов, который обычно называется{{username}}.github.ioВ этой форме в этом репозитории создается еще одна ветка для сохранения исходного кода разработки Hexo. Я использую встроенныйhexo-blog-backupВетвь для резервного копирования исходного кода разработки Hexo, используйтеmasterВетка для развертывания исходного кода блога.
Напоминаем, что вы также можете создать два хранилища здесь, чтобы сохранить исходный код блога и исходный код разработки Hexo, точно так же, как создать две ветки.
Создайте токен личного доступа GitHub
Вам также необходимо создать токен личного доступа для виртуальной системы, созданной GitHub Actions, чтобы отправлять содержимое в репозиторий.
Руководство по созданию токена личного доступа см.Creating a personal access token
Настроить секреты репозитория
Добавьте созданный Personal Access Token в Секреты склада и задайте имя, как показано на рисунке:
Создан в корневом каталоге проекта.github/workflowsпапку и создайте файл YAML в папке для сценария выполнения задачи. (То, что я создал здесь, это main.yml, имя может быть произвольным)
Содержание скрипта следующее:
name: Blog CI/CD
# 触发条件:在 push 到 hexo-blog-backup 分支后触发
on:
push:
branches:
- hexo-blog-backup
env:
TZ: Asia/Shanghai
jobs:
blog-cicd:
name: Hexo blog build & deploy
runs-on: ubuntu-latest # 使用最新的 Ubuntu 系统作为编译部署的环境
steps:
- name: Checkout codes
uses: actions/checkout@v2
- name: Setup node
# 设置 node.js 环境
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Cache node modules
# 设置包缓存目录,避免每次下载
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- name: Install hexo dependencies
# 下载 hexo-cli 脚手架及相关安装包
run: |
npm install hexo-cli gulp -g
npm install
- name: Generate files
# 编译 markdown 文件
run: |
hexo clean
hexo generate
- name: Execute gulp task
run: gulp
- name: Deploy hexo blog
env:
# Github 仓库
GITHUB_REPO: github.com/yifanzheng/yifanzheng.github.io
# Coding 仓库
CODING_REPO: e.coding.net/yifanzheng/blogs.git
# Gitee 仓库
GITEE_REPO: gitee.com/yifanzheng/yifanzheng.gitee.io
# 将编译后的博客文件推送到指定仓库
run: |
cd ./public && git init && git add .
git config user.name "yifanzheng"
git config user.email "zhengyifan1996@outlook.com"
git add .
git commit -m "GitHub Actions Auto Builder at $(date +'%Y-%m-%d %H:%M:%S')"
git push --force --quiet "https://${{ secrets.ACCESS_TOKEN }}@$GITHUB_REPO" master:master
git push --force --quiet "https://RoYFbFDSfM:${{ secrets.CODING_TOKEN }}@$CODING_REPO" master:master
git push --force --quiet "https://yifanzheng:${{ secrets.GITEE_ACCESS_TOKEN }}@$GITEE_REPO" master:master
Подробный синтаксис рабочего процесса см.Синтаксис рабочего процесса для действий GitHub
Друзья могут изменить приведенный выше сценарий в свои собственные доступные сценарии в соответствии с реальной ситуацией.
развертывать
Наконец, нам просто нужно отправить исходный код в указанную ветку, и GitHub Actions автоматически развернет проект для нас.
- Официальное действие GitHub:github.com/actions
- Действия на официальной торговой площадке GitHub:GitHub.com/рынок…
- Полезные действия, собранные третьими лицами:GitHub.com/SDRAS/awe так…