github actionsのrunner-osを今までubuntu-18.0.4
を使ってたが、今更ながら
アップデートしました。
https://github.com/actions/runner-images/issues/6002
変更後
jobs:
runs-on: ubuntu-latest
困ったこと
これで再プッシュして一件落着かと思ったが、プッシュ後データベースのマイグレーションjobでテストが落ち、調べているとubuntu-latest
のラベルを指定するとubuntu-22.0.4
のイメージを使うことになるらしい。
https://github.com/actions/runner-images#available-images
んでこちらのイメージだとプリインストールされているmysqlは8系だよとのこと。
https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md
CI回してるサービスはmysql5.7系なのでここで詰まった。
解決法
github actionではサービスコンテナというものがあった。
これは私の中での解釈はローカルでdocker-composeにサービス名とイメージ指定すればコンテナ立ち上がって、別コンテナからアクセスできるのと同じでgithub action上でもジョブ内からコンテナにアクセスできるという理解。
test:
runs-on: ubuntu-latest
services:
mysql:
# 使いたいイメージを指定
image: mysql:5.7
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: root
# ヘルスチェック
options: >-
--health-cmd "mysqladmin ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
- name: Database migration
env:
RAILS_ENV: test
# mysqlのバージョン確認とマイグレージョン実行
# mysql -vを実行するとプリインストールされている8系が出るので立ち上げたサービスコンテナに接続
run: |
echo 'select version();' | mysql -h 127.0.0.1 --port 3306 -u root -proot
cp -v config/database.test.yml config/database.yml
bin/rails db:prepare
公式にはサービスコンテナへのアクセスの方法としてlocalhost:<port>
または 127.0.0.1:<port>
でいけるよと書いてましたが、localhost
指定だとConnection Errorになったので
127.0.0.1
に変更して解決しました。原因わかる方教えてください。
test:
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_general_ci
host: 127.0.0.1 #localhostだと接続できず
port: 3306
username: root
password: root
database: test