やりたかったこと
CircleCIで複数のMySQL DBを立てたかった。
困ったところ
mysqlオフィシャルDockerイメージ( https://hub.docker.com/_/mysql )では使えても、 circleci/mysql
のイメージ( https://hub.docker.com/r/circleci/mysql )では使えない機能が多いせいで悩んだ。
以下に詰まりどころを挙げる。これらの2つは circleci/mysql
で使えない。
volumes
が使えないので.sqlファイルのマウント・流し込みが効かないports
も指定できないので複数のcircleci/mysql
イメージを立てると2つ目以降はポート3306で衝突して死ぬ- /etc/mysql/my.cnf の設定なので外側から変えられない。変えるには違うイメージを作るしかない https://discuss.circleci.com/t/multiple-mysql-dbs/12419/2
- 複数イメージを立てたい場合の公式解はコレらしい。マジかよ! https://discuss.circleci.com/t/how-to-setup-multiple-databases/939/9
対応策
他ポートにバインドされたイメージを作ってあげるか、愚直にexecuteする以外はございません…
自分は愚直にexecuteするほうを選びました。
version: 2 definitions: workspace: &workspace working_directory: ~/working_directory docker: - image: circleci/python - image: circleci/mysql:5.7 environment: MYSQL_USER: root MYSQL_ROOT_HOST: "%" MYSQL_ALLOW_EMPTY_PASSWORD: yes commands: set_up: steps: - run: name: execute sql command: | mysql -h 127.0.0.1 -u root -e "<SQL>"
※ -h 127.0.0.1
は以下のエラー対策。付けないと出ちゃう。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)