Skip to content

Instantly share code, notes, and snippets.

@toshi3221
Last active December 9, 2019 06:06
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save toshi3221/957bb86ec5d4d9e4f7c722d471f61953 to your computer and use it in GitHub Desktop.
Save toshi3221/957bb86ec5d4d9e4f7c722d471f61953 to your computer and use it in GitHub Desktop.
Github Actionsの概要とRSpecテストフローサンプル

Github Actions

(2019/12/9現在)

概要

  • Githubが提供するCI/CD
  • CircleCIとほぼ同じ事が出来るが2019/11/14に正式版になったことを発表したばかりでCacheなどBeta機能もある
  • Linux/MacOS/Windowsの実行を提供
    • 各OS共、2core CPU / 7GB RAM / 14GB SSD
  • 同時ジョブ実行数はアカウント・OS毎に異なる
アカウント種別 同時ジョブ数 同時macOSジョブ数
Github Free 20 5
Github Pro 40 5
Github Team 60 5
Github Enterprise Cloud 180 15
  • かなり十分な無料枠がある。publicリポジトリは無料、privateリポジトリは分単位・ストレージ(多分Github Packagesのデータ量)単位で実行時間をカウントする。月毎に時間はリセットされる:
アカウント種別 ストレージ 無料枠(分)
Github Free 500MB 2,000(約33時間)
Github Pro 1GB 3,000(約50時間)
Github Team 2GB 10,000(約166時間)
Github Enterprise Cloud 50GB 50,000(約833時間)
  • 無料枠でmacOSも使える。但しLinuxよりも10倍実行時間を消費
OS 消費実行時間(分)
Linux 1
macOS 10
Windows 2
  • アカウントの課金上限(spending limit)はデフォルトで0$になっているので上限を設定しない限り課金されない。
  • 無料枠上限を超えた場合の料金は以下の通り:
OS 実行料金(分あたり)
Linux $0.008
macOS $0.08
Windows $0.016

使い方

test.yml はGithub Actions提供には入ってないMySQL5.6.34を利用したRailsアプリでのRSpecテストの例。

  • .github/workflows フォルダに test.yml など任意の名称で設定ファイルを置くと実行トリガ(on)のタイミングで実行される
  • runs-on で実行するOS環境を選択。DBやRuby等開発環境で想定されるアプリがインストール済み仮想環境が用意されている。詳しくはGitHubホストランナーの仮想環境 - GitHub ヘルプ
    • 今回はUbuntu 18.04(ubuntu-latest)を利用した。LTSを用意する臭い
  • services で追加Dockerコンテナを用意できる。詳しくはjobs.<job_id>.services - GitHub Actionsのワークフロー構文 - GitHub ヘルプ
  • キャッシュが利用出来る(Beta)。bundleに時間かかる(2分くらい)のでこちらに適用した
  • あとは単純にコマンドを実行する記述を行う。stepを分けておけば個別に実行時間と結果がセクションで表示される

躓いた点

  • rubyのパッチバージョンを指定しても指定のもので実行されない
    • マイナーバージョンの最新あたりしかデフォルトインストールされてないのでターゲットアプリ側を揃える
  • mysql2 gemを利用する時にNative Buildで失敗
    • デフォルトのOSで入っていなかった sudo apt-get install libmysqlclient-dev を追加
  • bundle install でキャッシュされない
    • キャッシュするパスをvendor/bundleで揃える
name: Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
services:
db:
image: mysql:5.6.34
ports:
- 13306:3306
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
steps:
- uses: actions/checkout@v1
- name: Set up Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: 2.4.x
- name: apt-get
run: |
sudo apt-get update
sudo apt-get install libmysqlclient-dev
- name: Set up bundler
run: gem install bundler -v 1.17.3
- name: Cache gems
uses: actions/cache@preview
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gem-
- name: bundle install
run: bundle install --path vendor/bundle --jobs 4 --retry 3
- name: Setup Database
run: bundle exec rails db:setup
- name: Test with RSpec
run: bundle exec rails spec
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment