GitHub Actions を介して Web サイトのコンテンツをスケジュールどおりに更新する

PHPz
リリース: 2024-08-17 15:20:01
オリジナル
583 人が閲覧しました

従来の意味でのコンテンツ データベースを必要としない、自立可能なコンテンツ管理システムを構築する私のこれまでの道のりを共有したいと思います。

問題

この Web サイトのコンテンツ (ブログ投稿とブックマーク) は、Notion データベースに保存されます。

Updating website content on schedule via GitHub Actions

ブックマークのあるデータベース – Notion UI

私が解決しようとしていた問題は、ブックマークを追加するたびに Web サイトを手動で展開する必要がないようにすることでした。それに加えて、ホスティングをできるだけ安く保ちます。私にとって、Notion データベースに追加したブックマークがどれだけ早くオンラインになるかはあまり重要ではないからです。

そこで、いくつかの調査を行った結果、次の設定を思いつきました:

Updating website content on schedule via GitHub Actions

コンテンツ配信メカニズムの概要

システムはいくつかのコンポーネントで構成されています:

  • 変更をデプロイする「メインにプッシュ」アクション
  • Notion API からコンテンツをダウンロードし、変更をコミットする「コンテンツの更新」アクション
  • 「スケジュールに従ってコンテンツを更新」アクションが時々実行され、「コンテンツを更新」アクションがトリガーされます

それぞれを内側から外側まで詳しく見てみましょう。

「メインにプッシュ」ワークフロー

ここで言うことはあまりありません。非常に標準的なセットアップです。メインブランチへのプッシュがある場合、このワークフローはアプリを構築し、Wrangler CLI を使用して Cloudflare Pages にデプロイします。

name: Push to Main
on:
  push:
    branches: [main]
  workflow_dispatch: {}
jobs:
  deploy-cloudflare-pages:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup pnpm
        uses: pnpm/action-setup@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version-file: .node-version
          cache: pnpm
      - name: Install node modules
        run: |
          pnpm --version
          pnpm install --frozen-lockfile
      - name: Build the App
        run: |
          pnpm build
      - name: Publish Cloudflare Pages
        env:
          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
        run: |
          pnpm wrangler pages deploy ./out --project-name ${{ secrets.CLOUDFLARE_PROJECT_NAME }}
ログイン後にコピー

「コンテンツの更新」ワークフロー

このワークフローは「手動」でのみトリガーできますが、GitHub Personal Access Token (別名 PAT) を使用してトリガーできるため、自動でもトリガーできます。最初にこれを書いたのは、携帯電話から変更をデプロイしたかったからです。 Notion API を使用して投稿とブックマークをダウンロードし、コードベースに変更があった場合はコミットを作成してプッシュします。適切に機能するには、このワークフローにリポジトリの「コードへの読み取りおよび書き込みアクセス」を持つ PAT が提供されている必要があります:

name: Update Content
on:
  workflow_dispatch: {}
jobs:
  download-content:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          # A Github Personal Access Token with access to the repository 
          # that has the follwing permissions:
          # ✅ Read and Write access to code
          token: ${{ secrets.GITHUB_PAT_CONTENT }}
      - name: Setup pnpm
        uses: pnpm/action-setup@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version-file: .node-version
          cache: pnpm
      - name: Install node modules
        run: |
          pnpm --version
          pnpm install --frozen-lockfile
      - name: Download articles content from Notion
        env:
          NOTION_KEY: "${{ secrets.NOTION_KEY }}"
          NOTION_ARTICLES_DATABASE_ID: "${{ secrets.NOTION_ARTICLES_DATABASE_ID }}"
        run: |
          pnpm download-articles
      - name: Download bookmarks content from Notion
        env:
          NOTION_KEY: ${{ secrets.NOTION_KEY }}
          NOTION_BOOKMARKS_DATABASE_ID: ${{ secrets.NOTION_BOOKMARKS_DATABASE_ID }}
        run: |
          pnpm download-bookmarks
      - name: Configure Git
        run: |
          git config --global user.email "${{ secrets.GIT_USER_EMAIL }}"
          git config --global user.name "${{ secrets.GIT_USER_NAME }}"
      - name: Check if anything changed
        id: check-changes
        run: |
          if [ -n "$(git status --porcelain)" ]; then
            echo "There are changes"
            echo "HAS_CHANGED=true" >> $GITHUB_OUTPUT
          else
            echo "There are no changes"
            echo "HAS_CHANGED=false" >> $GITHUB_OUTPUT
          fi
      - name: Commit changes
        if: steps.check-changes.outputs.HAS_CHANGED == 'true'
        run: |
          git add ./src/content
          git add ./public
          git commit -m "Automatic content update commit"
          git push
ログイン後にコピー

「スケジュールに従ってコンテンツを更新」ワークフロー

これは非常に単純です。時々実行され、上記のワークフローをトリガーするだけです。このワークフローが適切に機能するには、リポジトリの「アクションへの読み取りおよび書き込みアクセス」を持つ GitHub PAT が提供される必要があります。私の場合は別の PAT です:

name: Update Content on Schedule
on:
  schedule:
    - cron: "13 0,12 * * *"
  workflow_dispatch: {}
jobs:
  trigger-update-content:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Dispatch the Update Content workflow
        env:
          # A Github Personal Access Token with access to the repository 
          # that has the follwing permissions:
          # ✅ Read and Write access to actions
          GH_TOKEN: ${{ secrets.GITHUB_PAT_ACTIONS }}
        run: |
          gh workflow run "Update Content" --ref main
ログイン後にコピー

結論

私にとって、この設定は非常に優れており、柔軟であることがわかりました。モジュール構造のため、「コンテンツの更新」アクションは手動でトリガーできます。旅行中に携帯電話から。私にとって、これもワークフローを段階的に強化する貴重な経験でした。

これが役に立ちましたか?

以上がGitHub Actions を介して Web サイトのコンテンツをスケジュールどおりに更新するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!