先日、GitHub Actionsはpublicリポジトリなら無料でArm Runnerを利用できるようになりました。
それによって、setup-rubyもArm対応されCIのArm化に挑戦したのですが、一点引っかかった点があったので、どう解決したかのメモです。
実際のコード
- こちらは元々RSpecを実行していたgithub actionsのファイルをarmにしたものです
- bundle installして、rspecコマンドを実行するだけ
- 現時点での変更点はRunnerをArmに書き換えているだけです
- privateリポジトリの場合はarm runnerを用意してください
name: Test
on:
push:
jobs:
rspec:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04-arm
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: bundle exec rspec
services:
mysql:
image: mysql:8.0.28
env:
MYSQL_USER: nobody
MYSQL_PASSWORD: nobody
MYSQL_ROOT_HOST: "%"
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: yes
ports:
- 3306:3306
volumes:
- mysql-data:/var/lib/mysql
ただし、こちらはエラーが出ます。
no matching manifest for linux/arm64/v8 in the manifest list entries
Error: Docker pull failed with exit code 1
エラーメッセージを読むとわかる通り、MySQLコンテナがarm対応をしていないんですね。
platformオプションを下記のように書く、ということも考えましたが、GitHub Actionsで直書きする場合platformオプションは対応していません。
services:
mysql:
image: mysql:8.0.28
+ platform: linux/amd64
env:
MYSQL_USER: nobody
MYSQL_PASSWORD: nobody
MYSQL_ROOT_HOST: "%"
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: yes
実はこのMySQLコンテナ、バージョンを一つ挙げるとArm環境でも問題なく動作します。
services:
mysql:
- image: mysql:8.0.28
+ image: mysql:8.0.29
env:
MYSQL_USER: nobody
MYSQL_PASSWORD: nobody
MYSQL_ROOT_HOST: "%"
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: yes
8.0.28で対応したということが書いてあるドキュメントもありましたが、自分が試したところだと8.0.29以降で動作しました。
8.0.28を続ける必要がある場合、docker-compose.ymlを作っての対応なども考えられますが、上げられるのであれば上げてしまうのがいいでしょう。