Xlenco

Xlenco

github
zhihu
email

Github Actionsを利用してあなたのHexoブログを自動化デプロイする

Github Actions の概念#

GitHub Actions は、ビルド、テスト、デプロイパイプラインを自動的に実行するための継続的インテグレーションおよび継続的デリバリー(CI/CD)プラットフォームです。リポジトリの各プルリクエストをビルドおよびテストするためのワークフローを作成したり、マージされたプルリクエストを本番環境にデプロイしたりできます。

GitHub Actions は DevOps だけでなく、リポジトリ内で他のイベントが発生したときにもワークフローを実行することを許可します。たとえば、誰かがあなたのリポジトリに新しい問題を作成したときに、自動的に適切なラベルを追加するためにワークフローを実行できます。

GitHub は、ワークフローを実行するための Linux、Windows、macOS の仮想マシンを提供しており、または自分のデータセンターやクラウドインフラストラクチャで自己ホスト型ランナーをホストすることもできます。

本文#

Git を GitHub リポジトリにプッシュする一般的な接続方法は、HTTPS と SSH の 2 つの接続方式です。

したがって、Actions の自動化も大きく 2 つに分かれます。ここでは主に HTTPS 接続のデプロイ方法について説明します。

HTTPS 接続デプロイ方法#

GitHub トークンの取得#

  1. GitHub アクセストークンを取得します。
    https://github.com/settings/tokens を開きます。
    Generate new token をクリックして新しいトークンを作成します。
    image

image

image

Hexo ソースコードを保存するプライベートリポジトリを作成#

作成が完了したら、ブログのソースコードをここにpushする必要があります。まず、リモートリポジトリのアドレスを取得します。同様にSSHHTTPSの両方が可能です。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]ローカルにブログソースコードを保存するフォルダのパス
GITHUBUSERNAMEGitHub ユーザー名
GITHUBTOKENGitHub ユーザーのメールアドレス
TOKENUSERデプロイサービスの Secrets / 例:GITHUBTOKEN
GITHUBTOKENGitHub キー

あなたのリポジトリのSettings->Secrets->actionsで設定します。

image

デプロイ状況の確認#

この時点で、GitHub にソースコードを保存するプライベートリポジトリを開き、アクションを見つけます。

image

image

先ほどのコミット記録に基づいて、該当するタスクを見つけ、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 の中に設定します。コピーする際に余分なスペースが入ることがあるので、注意して削除してください。
これで大功告成です!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。