gotohayato.com

月(ダークモード)
太陽(ライトモード)

GitHub Actions で WordPress のプラグインを自動更新する方法

GitHubWordPress

GitHub Actions を使って WordPress のプラグインを自動的に更新する方法をご紹介します。

より正確に言うと「 Git でコードを管理している WordPress サイトのプラグインを GitHub Actions で更新する方法」というお話です。

前提

以下前提です。

  • サイトに WordPress を使っている
  • コードを Git + GitHub で管理している
  • リポジトリの wp_root ディレクトリに WordPress のルートがある
  • GitHub Actions のマシン ubuntu-latest が Ubuntu 18.04 を指す

GitHub Actions で WordPress のプラグインを自動更新する

GitHub Actions ワークフローを使って以下の流れでプラグインを実行します。

  1. コードをチェックアウトする
  2. PHP をセットアップする
  3. WP-CLI をインストールする
  4. MySQL を起動する
  5. MySQL のユーザーとデータベースを作成する
  6. WordPress の設定ファイルを作成する
  7. WordPress をインストールする
  8. プラグインを有効化する
  9. プラグインを更新する
  10. Pull Request を作成する

設定ファイルの全体像は次のとおりです。

.github/workflows/plugins-update.yml

name: Update plugins
on:
schedule:
# 毎日 14 時(= UTC 5 時)に実行する
- cron: '0 5 * * *'
jobs:
update:
runs-on: ubuntu-latest
env:
MYSQL_DATABASE: wp
MYSQL_USER: wp
MYSQL_PASSWORD: wp
steps:
# 1. コードをチェックアウトする
- name: Checkout
uses: actions/checkout@v2
# 2. PHP をセットアップする
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: gd, mbstring, mysqli, zip
# 3. WP-CLI をインストールする
- name: Install WP-CLI
run: |
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
# 4. MySQL を起動する
- name: Start MySQL
run: sudo systemctl start mysql.service
# 5. MySQL のユーザーとデータベースを作成する
- name: Create MySQL database
run: >
mysql --user=root --password=root -e "
CREATE DATABASE \`$MYSQL_DATABASE\` ;
CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;
GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;
FLUSH PRIVILEGES ;
"
# 6. WordPress の設定ファイルを作成する
- name: Configure WordPress
run: >
wp config create
--allow-root
--dbname=$MYSQL_DATABASE
--dbuser=$MYSQL_USER
--dbpass=$MYSQL_PASSWORD
--locale=ja
--force
working-directory: wp_root
# 7. WordPress をインストールする
- name: Install WordPress
run: >
wp core install
--allow-root
--url=localhost
--title=WP
--admin_user=admin
--admin_email=example@example.com
--admin_password=password
--skip-email
working-directory: wp_root
# 8. プラグインを有効化する
- name: Enable Plugins
run: >
wp plugin activate
--allow-root
--all
working-directory: wp_root
# 9. プラグインを更新する
- name: Update Plugins
run: >
wp plugin update
--allow-root
--all
working-directory: wp_root
# 10. Pull Request を作成する
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3

ポイント

name

name: Update plugins

name でワークフローの名前を指定します。 これは GitHub リポジトリの Actions のページに表示されます。

on

on:
schedule:
# 毎日 14 時(= UTC 5 時)に実行する
- cron: '0 5 * * *'

on でワークフローの実行タイミングを指定します。 イベントが起こらなくても定期的にワークフローを実行したい場合はこの schedule というイベントを使用します。

参考: GitHub Actions ワークフローで処理を定期実行する方法

cron の値は crond 形式で指定します。 タイムゾーンは UTC です。 上の 0 5 * * * の場合は、毎日 UTC 5 時(日本時間で 14 時)に処理を実行するという意味になります。

jobs

jobs:
update:

jobs で実行する処理を指定します。

一般にはひとつの YAML ファイルの中に複数のジョブを定義することができますが、ここでは WordPress のプラグインを実行するための update という名前のワークフローをひとつだけ定義しています。 尚 update という名前は私がわかりやすいと思ってこうしただけなので、別の名前にしても OK です。 これも GitHub リポジトリの Actions のページに表示されます。

jobs.<job_id>.runs-on

runs-on: ubuntu-latest

runs-on でジョブを実行するマシンのタイプを指定します。 今回は ubuntu-latest で指定できる Ubuntu 18.04 を使います。

ちなみに、本記事執筆時点では ubuntu-latest の他に以下のオプションが用意されています。

  • ubuntu-20.04
  • ubuntu-18.04
  • ubuntu-16.04
  • windows-latest / windows-2019
  • macos-latest / macos-10.15

jobs.<job_id>.env

env:
MYSQL_DATABASE: wp
MYSQL_USER: wp
MYSQL_PASSWORD: wp

env で環境変数をセットします。 ここでは MySQL のデータベース名・ユーザー名・パスワードを設定しています。 値は適当です。 ここでセットした環境変数は update ジョブのすべてのアクションから利用できます。

jobs.<job_id>.steps

steps:

steps で順番に実行する処理を指定します。

事前準備

# 1. コードをチェックアウトする
- name: Checkout
uses: actions/checkout@v2
# 2. PHP をセットアップする
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: gd, mbstring, mysqli, zip
# 3. WP-CLI をインストールする
- name: Install WP-CLI
run: |
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
# 4. MySQL を起動する
- name: Start MySQL
run: sudo systemctl start mysql.service
# 5. MySQL のユーザーとデータベースを作成する
- name: Create MySQL database
run: >
mysql --user=root --password=root -e "
CREATE DATABASE \`$MYSQL_DATABASE\` ;
CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;
GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;
FLUSH PRIVILEGES ;
"

steps 以下では最初に事前準備を行います。

インラインのコメントに書かれているとおり、ここでは、まずリポジトリのコードをチェックアウトしてから PHP をセットアップし、続いて WP-CLI をインストール、そして MySQL を起動してデータベースの作成を行っています。

PHP のセットアップには shivammathur/setup-php アクションを使っています。

MySQL については、 services を使ってサービスコンテナとして用意するという選択肢もありますが、サービスコンテナの MySQL を利用する場合いろいろとハマりどころが多いので、ここでは GitHub Actions の Ubuntu 18.04 にデフォルトで入っている MySQL を使います。

記事執筆時点では MySQL は初期状態で停止しているので、 sudo systemctl start mysql.service で起動する必要があります。

MySQL を起動したら、 WordPress で利用するデータベースとユーザーを作成します。 この処理にはユーザー root を使用します。 記事執筆時点での root のパスワードは root です。

ちなみに、 GitHub Actions の runs-on で指定できるマシンにどのようなソフトウェアが含まれているかは actions/virtual-environments リポジトリで確認することができます:

本処理

# 6. WordPress の設定ファイルを作成する
- name: Configure WordPress
run: >
wp config create
--allow-root
--dbname=$MYSQL_DATABASE
--dbuser=$MYSQL_USER
--dbpass=$MYSQL_PASSWORD
--locale=ja
--force
working-directory: wp_root
# 7. WordPress をインストールする
- name: Install WordPress
run: >
wp core install
--allow-root
--url=localhost
--title=WP
--admin_user=admin
--admin_email=example@example.com
--admin_password=password
--skip-email
working-directory: wp_root
# 8. プラグインを有効化する
- name: Enable Plugins
run: >
wp plugin activate
--allow-root
--all
working-directory: wp_root
# 9. プラグインを更新する
- name: Update Plugins
run: >
wp plugin update
--allow-root
--all
working-directory: wp_root
# 10. Pull Request を作成する
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3

一連の事前処理の後にプラグイン更新のための本処理を実行します。

WordPress のセットアップとプラグインの有効化・更新まではすべて WP-CLI を利用しています。 今回は WordPress のルートがリポジトリの wp_root ディレクトリにある想定なので、 WP-CLI を使うときは必ず working-directory で実行ディレクトリを指定しています。

プラグインの更新が無事に完了したら、最後に peter-evans/create-pull-request アクションを使って Pull Request を作成しています。

コミット対象外のファイルの指定

プラグインを有効化あるいは更新したときに生成されるファイルの中には Git にコミットしたくないファイルもあります。 それらのファイルを除外したい場合は、 peter-evans/create-pull-request アクションで個別に除外することはできないため .gitignore を使います。 .gitignore での対処がどうしても難しい場合は、スクリプトを書いて対応します。

ポイントは以上です。

この .github/workflows/plugins-update.yml ファイルをコミットして GitHub にプッシュしたら、指定したタイミングでプラグインの自動更新が行われ Pull Request が作成されます。 設定が間違っている可能性もあるので、最初のうちは特にコミットの中身をしっかりチェックしてから受け入れるようにするとよいと思います。

ちなみに、最初から on.schedule を使うとデバッグに時間がかかるので、作成中やデバッグ中は push 等を対象イベントに追加しておくと捗ります。

まとめ

ということで、 GitHub Actions を使って WordPress サイトのプラグインを自動的に更新する方法についてでした。

今回は最後のところを Pull Request を出して終了にしていますが、必要に応じてテスト → コミット → デプロイ等に差し替えてもよいと思います。

記事中の YAML とほぼ同じ内容のものを GitHub に置いたので興味がある方はそちらもご覧ください:

参考

GitHub Actions のワークフローの YAML シンタックスについて詳しく知りたい方は公式のドキュメントをご覧ください:


後藤隼人
ウェブサイト制作・ウェブアプリ開発やマーケティングをしています。
GitHub

お知らせ

大阪大学医学部附属病院さんで現在クラウドファンディングのプロジェクトをされています(後藤も少しだけ寄附させていただきました)。
© 2020 gotohayato.com
サイトについてタグアーカイブメッセージを送る