1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflare Workersの自動デプロイの失敗を解決した

Last updated at Posted at 2025-02-09

はじめに

以前、Cloudflare Workersのプロジェクトを自動デプロイするため、GitHub Actionsを設定する方法を書いたことがあります。

しかし、新規プロジェクトを生成し、自動デプロイを設定しましたが、GitHub Actionsからの自動デプロイが失敗してしまったことがありました。 (昔に作成したプロジェクトは問題なく自動デプロイできました。)
色々調べて、今は問題解決ができたので、今回は、その解決方法を記録しておきたいと思います。

環境

  • Ubuntu 24.04
  • Wrangler 3.107.3

作成したworkflowファイルの内容は以下になります。

.github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: Deploy
    steps:
      - uses: actions/checkout@v4
      - name: Deploy
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}

デプロイ成功/失敗の状況

ローカル環境でデプロイすると正常にデプロイできるが、GitHubにpushしてGitHub Actionsからデプロイすると失敗になります。

環境 デプロイ
成功/失敗
ローカル 成功
GitHub Actions 失敗

GitHub Actionsの処理が失敗内容は以下のようにでした。

   /usr/local/bin/npx wrangler deploy
  
   ⛅️ wrangler 3.90.0 (update available 3.107.3)
  ----------------------------------------------
  
  
  ✘ [ERROR] Missing entry-point: The entry-point should be specified via the command line (e.g. `wrangler deploy path/to/script`) or the `main` config field.

原因

結論から言うと、新規プロジェクト作成で使用したローカルのWranglerのバージョンと、Github Actionsのバージョンの違いが自動デプロイ失敗の原因だと思います。

まず、以下のエラーメッセージは、ルートディレクトリにwrangler.tomlファイルがない場合、発生するエラーでした。

  ✘ [ERROR] Missing entry-point: The entry-point should be specified via the command line (e.g. `wrangler deploy path/to/script`) or the `main` config field.

確かに、新規生成したプロジェクトのディレクトリを確認してみると、wrangler.tomlはなく、wrangler.jsonファイルがありました。
しかし、私はプロジェクトを新規作成した後、ファイルを触ったことがありませんでした。

もう少し調べてみると、Wrangler 3.91.0バージョンから、設定ファイルの仕様変更があったことを見つけました。

As of Wrangler v3.91.0 Wrangler supports both JSON (wrangler.json or wrangler.jsonc) and TOML (wrangler.toml) for its configuration file. Prior to that version, only wrangler.toml was supported. The format of Wrangler's configuration file is exactly the same across both languages, except that the syntax is JSON rather than TOML. Throughout this page and the rest of Cloudflare's documentation config snippets are provided as both JSON and TOML.

つまり、3.91.0バージョンからは設定ファイルとしてJSON (wrangler.jsonまたはwrangler.jsonc)とTOML (wrangler.toml)を両方使えるようになったようです。

なので、最新のWranglerバージョンからは新規プロジェクトを生成すると、wrangler.tomlではなくwrangler.jsonファイルを生成するようですね。

しかし、GitHub Actionsで動作するWranglerは、cloudflare/wrangler-actionが起動するとき、Wranglerの存在をチェックし、存在しないならWranglerをインストールしてDeployをしますが、デフォルトで設定されているWranglerバージョンが3.90.0のようです。(2025/02/09時点)

src/index.ts
const DEFAULT_WRANGLER_VERSION = "3.90.0";

整理すると、ローカル環境と、GitHub Actionsで動いているWranglerのバージョンは以下のように違いがありました。

環境 Wranglerバージョン
ローカル 3.107.3
GitHub Actions 3.90.0

ローカル環境のWrangler (v3.107.3)から新規のプロジェクトを生成すると、wrangler.tomlファイルはなくwrangler.jsonファイルのみ生成されますが、
GitHub Actionsでインストールされて動作するWrangler (v3.90.0)はwrangler.tomlがないとエラーが発生されます。
これが、今回の自動デプロイ失敗の原因だと思います。

解決

古いバージョンのWranglerがインストールされることが問題だと思ったので、Deploy前にパッケージをインストールし、最新のWranglerでDeployを行うようにworkflowファイルを修正して問題を解決しました。

.github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: Deploy
    steps:
      - uses: actions/checkout@v4

+     - name: Install     # 追加
+       run: npm install  # 追加

      - name: Deploy
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}


おわりに

新規生成したプロジェクトは急に自動デプロイができなかったのでびっくりしましたが、cloudflare/wrangler-actionで設定されているWranglerのデフォルトバージョンが最新に変更されたら、別に何もしなくても解決されると思います。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?