GitHub Actions で WordPress のプラグインを自動更新する方法
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 ワークフローを使って以下の流れでプラグインを実行します。
- コードをチェックアウトする
- PHP をセットアップする
- WP-CLI をインストールする
- MySQL を起動する
- MySQL のユーザーとデータベースを作成する
- WordPress の設定ファイルを作成する
- WordPress をインストールする
- プラグインを有効化する
- プラグインを更新する
- 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/runner-images
リポジトリで確認することができます(追記: リポジトリが actions/virtual-environments
から actions/runner-images
に変更されたのにあわせてリンク更新しました):
- runner-images/Ubuntu1804-Readme.md at main · actions/runner-images · GitHub
- GitHub - actions/runner-images: GitHub Actions runner images
本処理
# 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 シンタックスについて詳しく知りたい方は公式のドキュメントをご覧ください: