GitHub Actions を使用して、Hugo ブログを GitHub Pages および Gitee に自動でデプロイします。
背景説明
昨日ブログを更新した際に、Travisサービスが利用できないことを発見しました。Travisのウェブサイトを確認すると、ソースコードの取得時に進捗が止まっていることがわかりました。そこで、GitHubが以前に発表していたActionサービスを思いつきました。 当時、業務が多忙であり、Actionを利用するには申請が必要だったため、現在は正式にリリースされ、週末に暇を持て余している間に、新しいおもちゃを試してみようかと思いました? 公式資料は、ご自身でウェブサイトをご確認ください。本記事では、より多くの転載を行いません。もしKubernetesをご利用経験がある場合、ActionのYAMLファイル設定がKubernetesと非常に似ていることに気づくでしょう。 入門チュートリアル、あるいは中国語の説明資料については、阮一峰のブログを検索することをお勧めします。2つの記事があり、1つ目は基本的な構文の紹介であり、もう1つは実際のケーススタディです。
---
正文
必要な知識点
- GitHub Secrets
- Action の構文
コアのジョブは既存のコンポーネントを使用して完了し、国内のGiteeにプッシュするにはコマンドを使用します。このコマンド部分は粗暴で、強制プッシュのみを実装しており、Travisを使用していた際のロジックを継承しています。
```yaml
name: github pages and gitee pages
on:
push:
branches:
- hugo
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true
- name: Build Github and Gitee ## 単独ステップには1つのrunコマンドしか書けない
run: hugo -b "https://www.xiangtianlong.com/" -d "github_public" && hugo -b "https://www.xiangtianlong.com/" -d "gitee_public" && ls
- name: Deploy Github
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.BLOG_TOKEN }}
publish_dir: ./github_public
publish_branch: master
cname: xiangtianlong.com
- name: Deploy Gitee
run: cd ./gitee_public && git init && git config user.name "TianlongXiang" && git config user.email "tianlongxiang51@gmail.com" && git add . && git commit -m "Update TianlongXiang's Blog" && git push --force "https://xiangtianlong:${{ secrets.GITEE_PASSWORD }}@gitee.com/xiangtianlong/xiangtianlong.git" master:master
付録
公式マーケットで提供されているactionを見ると、現在サポートされている遊び方があまりにも多い。Dockerイメージを構築すれば、Docker Hubから提供されるサービスへの依存関係もなくなります。
Hugoのissueを調査すると、GitHub Actionを使ってgit pagesを自動デプロイする際に、最終的に公開されるウェブサイトがmasterブランチにある必要があることがわかります。もし他のブランチにデプロイする場合は、設定画面でGitHubはウェブサイトに構文エラーがあると警告します。
これは単にHugoのソースファイルがmasterブランチにあるため、GitHubがjellyブログのソースコードとして検出し、構文チェックが通らない場合に発生するエラーです。
解決策は簡単です。Hugoのソースファイルを他のブランチに配置し、静的ファイルをmasterブランチに公開します。