GitHub ActionsでMySQLのcharacter setを変更する
Dockerイメージでのcharacter set指定の対策として、docker-compose等であれば以下のように起動コマンドを指定する。 code:yaml
docker run -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
しかし、GitHub Actionsのサービス設定ではCMDをオーバーライドできない。
そこで、サービス起動後に設定を変更して再起動することで対策する
docker cp ./mysql/conf.d/test.cnf ${{ job.services.mysql.id }}:/etc/mysql/conf.d/ のように /etc/mysql/conf.d に設定ファイルをコピーで送りこんで、 docker restart ${{ job.services.mysql.id }} でリスタートして、 以下のように再起動待ちをすることで実現しました。
code:bash
for sleep in 0 ${WAITS:- 1 2 4 8 15 25 100}; do
sleep "$sleep"
health_status=docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" ${{ job.services.mysql.id }}
exit 0
fi
done
exit 1
他の方法も考えてみましたが、GHAでservice指定したいし、service指定だとリポジトリにあるファイルをvolumeマウントできない(checkoutより先にserviceが起動するため)し、カスタムDockerfileを用意する案もリポジトリがまだチェックアウト前のため使えない、ということで無理そうでした。
GitHub Actionsの設定でCMD指定出来るようになるか、リポジトリのファイルをvolumeマウントできるようになればよさそうだけど、今時点では無理そう 参考
jobs.<job_id>.services
MySQL公式Dockerイメージ
shimizukawa.iconここにいつか対策が掲載されるだろうか?
cweinberger/github-actions-mysql と mirromutth/mysql-action
このActionはrootユーザーとDB別ユーザーを両方同時には作れない
cweinberger/github-actions-mysql を使っている
mirromutth/mysql-action を使っている