Github Actions の概念#
GitHub Actions は、ビルド、テスト、デプロイパイプラインを自動的に実行するための継続的インテグレーションおよび継続的デリバリー(CI/CD)プラットフォームです。リポジトリの各プルリクエストをビルドおよびテストするためのワークフローを作成したり、マージされたプルリクエストを本番環境にデプロイしたりできます。
GitHub Actions は DevOps だけでなく、リポジトリ内で他のイベントが発生したときにもワークフローを実行することを許可します。たとえば、誰かがあなたのリポジトリに新しい問題を作成したときに、自動的に適切なラベルを追加するためにワークフローを実行できます。
GitHub は、ワークフローを実行するための Linux、Windows、macOS の仮想マシンを提供しており、または自分のデータセンターやクラウドインフラストラクチャで自己ホスト型ランナーをホストすることもできます。
本文#
Git を GitHub リポジトリにプッシュする一般的な接続方法は、HTTPS と SSH の 2 つの接続方式です。
したがって、Actions の自動化も大きく 2 つに分かれます。ここでは主に HTTPS 接続のデプロイ方法について説明します。
HTTPS 接続デプロイ方法#
GitHub トークンの取得#
- GitHub アクセストークンを取得します。
https://github.com/settings/tokens を開きます。
Generate new token をクリックして新しいトークンを作成します。
Hexo ソースコードを保存するプライベートリポジトリを作成#
作成が完了したら、ブログのソースコードをここにpush
する必要があります。まず、リモートリポジトリのアドレスを取得します。同様にSSH
とHTTPS
の両方が可能です。SSH
は、ssh key
をバインドしたデバイス上ではパスワードを再入力する必要がなく、HTTPS
ではパスワードを入力する必要がありますが、SSH
は時々ポートの占有の問題に直面することがあります。
上記の操作が完了したら、新しく[Blogroot].github/workflows/autodeploy.yml
を作成します。
# masterブランチに変更がプッシュされたときにActionを開始
name: 自動デプロイ
on:
push:
branches:
- main
release:
types:
- published
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: ブランチを確認
uses: actions/checkout@v2
with:
ref: main
- name: Nodeをインストール
uses: actions/setup-node@v1
with:
node-version: "16.x"
- name: Hexoをインストール
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g
- name: Hexoをキャッシュ
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- name: 依存関係をインストール
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install --save
- name: 静的ファイルを生成
run: |
hexo clean
hexo generate
- name: デプロイ #ここでmaster:masterは、ローカルのmasterブランチからリモートリポジトリのmasterブランチにコミットすることを指します(ブログのブランチはmasterと書けばよい)。リモートリポジトリに対応するブランチがない場合は新しく作成されます。他に必要な場合は、自分のニーズに応じて変更できます。
run: |
cd ./public
git init
git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
git config --global user.email '${{ secrets.GITHUBEMAIL }}'
git add .
git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:master
環境変数の追加#
変数の宣言#
変数名 | 定数の説明 |
---|---|
[Blogroot] | ローカルにブログソースコードを保存するフォルダのパス |
GITHUBUSERNAME | GitHub ユーザー名 |
GITHUBTOKEN | GitHub ユーザーのメールアドレス |
TOKENUSER | デプロイサービスの Secrets / 例:GITHUBTOKEN |
GITHUBTOKEN | GitHub キー |
あなたのリポジトリのSettings->Secrets->actions
で設定します。
デプロイ状況の確認#
この時点で、GitHub にソースコードを保存するプライベートリポジトリを開き、アクションを見つけます。
先ほどのコミット記録に基づいて、該当するタスクを見つけ、Deploy をクリックしてデプロイ状況を確認します。すべてにチェックが入っていれば、おめでとうございます。これで自動デプロイの快感を楽しむことができます。
SSH 接続デプロイ方法#
公私鍵の生成#
ターミナルで実行します:
ssh-keygen -t rsa -C "GitHubのメールアドレス"
以前に生成した場合はこのステップをスキップできます。
GitHub で新しいアクションフローを作成#
GitHub リポジトリのルートディレクトリにworkflows
フォルダを新しく作成し、その中にHexo Deploy.yml
を作成します。
内容は以下の通りです:
# 自動化の名前
name: Hexo Deploy
# トリガー条件
on:
push:
branches:
- main
# 環境を設定
jobs:
build:
runs-on: ubuntu-latest
steps:
# ワークフローがアクセスできることを確認する
# from: https://github.com/actions/checkout
- name: リポジトリのmasterブランチをチェックアウト
uses: actions/checkout@master
# from: https://github.com/actions/setup-node
- name: Node.js 16.xをセットアップ
uses: actions/setup-node@master
with:
node-version: "16.x"
- name: Hexoをインストール
run: |
npm install hexo-cli -g
npm install
- name: 秘密鍵を設定
env:
HEXO_DEPLOY_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
- name: Git情報を設定
run: |
git config --global user.name 'あなたのGitHubのユーザー名'
git config --global user.email 'あなたのGitHubのメール'
- name: Hexo三連
run: |
hexo clean
hexo generate
hexo deploy
公開鍵の設定: GitHub サイト→Settings→SSH and GPG keys で、名前を HEXO_DEPLOY_PRIVATE_KEY、内容を.ssh/id_rsa.pub の中に設定します。
秘密鍵の設定: プライベートリポジトリの Settings→Secrets で、名前を HEXO_DEPLOY_PRIVATE_KEY、内容を.ssh/id_rsa の中に設定します。コピーする際に余分なスペースが入ることがあるので、注意して削除してください。
これで大功告成です!