🐈⬛
GitHubActions 入門【HelloworldとRails TestによるCI/CD】
実行環境
- OS: Linux(Ubuntu)【WSL/Docker/AWS EC2】などお好みで
- 言語: Ruby 3.2.3
- WebAPPフレームワーク: Ruby on Rails 8
前提
- Gitインストール
- GitHubアカウント作成
- Githubが提供する、GitHub-Hosted Runnersを使用する(Self-Hosted-Runnersは使わない)
対象読者
- 初めてGitHubActionsを作成する方
- とりあえず簡単なサンプルを作って動かしたい方
Helloworldなハンズオン
環境構築
GitHub CLIコマンドのインストール
sudo apt update
sudo apt install gh -y
インストールされたか確認
gh --version
自分のアカウントをghコマンドで認証する
gh auth login
- GitHub.comを選択
- HTTPSを選択
- Login with a web browserを選択
- 「XXXX-XXXX」形式のコードをコピーする
- エンターを押してブラウザで認証
リポジトリ一覧表示
gh repo list
リポジトリの作成
パブリックリポジトリを作成する
gh repo create my-gh-test --public --clone --add-readme
--public: パブリックリポジトリを作成
--clone: リポジトリ作成時にクローンする
--add-readme: READMEを作成
ワークフローファイルの作成
先ほど作成したリポジトリがクローンされたフォルダに移動
cd my-gh-test
ワークフローフォルダとファイルを作成
mkdir -p .github/workflows
touch .github/workflows/hello.yml
VSCodeのツリー上の表記
ファイルを記述
.github/workflows/hello.yml
name: Hello # workflowの名前
on: push # イベント、この場合push時workflow実行
jobs: # ここにジョブを記載
hello: # ジョブ名
runs-on: ubuntu-latest # 実行OS、他にもMacやWindowsがあるがUbuntuが一番低コスト
steps:
- run: echo "Hello, workd" # runにシェルのコマンドを記載する
- uses: actions/checkout@v4 # ワークフロー内でチェックアウトactionを実行
with:
ref: main # actionを実行する際の引数、mainブランチを指定
ワークフローを実行するためにgit push
git add .
git commit -m "add hello.yml"
git push
ブラウザで実行ログの確認
対象のリポジトリにて
- Actionsタブクリック
- Helloサイドメニュークリック
- add hello.ymlのコミットのワークフローをクリック
- helloをクリック
ymlファイルで設定したシェルやcheckoutアクションが実行されたことを確認可能
無事Helloworld完了!
Ruby on Railsのテストを使ったハンズオン
環境構築
RubyとRailsのインストール
sudo apt update
sudo apt install curl gnupg2 build-essential libssl-dev libreadline-dev zlib1g-dev libffi-dev libyaml-dev
# rbenvのインストール
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-installer | bash
# rbenvの設定
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
# ruby-buildのインストール
rbenv install --list
rbenv install 3.2.3
rbenv global 3.2.3
gem install bundler
gem install rails
rbenv rehash
rails -v
これから使用するサンプルリポジトリについて
- railsアプリを新規作成した状態
- 簡単な被テスト関数とテストが作成済み
被テスト対象ファイル
/home/yuya/rails-test/app/helpers/application_helper.rb
テスト対象関数(簡単な引数を足し算して返す関数)
module ApplicationHelper
def add_numbers(a, b)
a + b
end
end
テストファイル
/home/yuya/rails-test/test/helpers/application_helper_test.rb
テストコード(足し算の結果を想定した簡単なテスト)
require 'test_helper'
class ApplicationHelperTest < ActionView::TestCase
test "add numbers test" do
assert_equal add_numbers(1, 2), 2
end
end
- 今回使用するymlファイル
/home/yuya/rails-test/.github/workflows/ci.yml
今回はrailsのテストを実行するため、必要なパッケージのインストールが必要になるのでそこに注目!
name: CI # ワークフローの名前(CI: 継続的インテグレーション)
on: # ワークフローの実行トリガー
pull_request: # プルリクエストが作成または更新されたときに実行
push: # ブランチにプッシュされたときに実行
branches: [ main ] # `main` ブランチへのプッシュ時のみ実行
jobs: # ジョブ(ワークフロー内の処理)の定義
test: # ジョブID
runs-on: ubuntu-latest # Ubuntuの最新バージョンで実行
steps: # ジョブ内で実行するステップのリスト
- name: Install packages # 必要なパッケージをインストール
run: sudo apt-get update && sudo apt-get install --no-install-recommends -y build-essential git libyaml-dev pkg-config google-chrome-stable
- name: Checkout code # リポジトリのコードをチェックアウト
uses: actions/checkout@v4
- name: Set up Ruby # Ruby のセットアップ
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version # `.ruby-version` ファイルに指定されたバージョンを使用
bundler-cache: true # Bundlerのキャッシュを有効にし、インストール時間を短縮
- name: Run tests # テストを実行
env:
RAILS_ENV: test # Railsのテスト環境を設定
run: bin/rails test # `bin/rails test` を実行してテストを実行
Ruby on railsサンプルリポジトリをクローンして自分のリポジトリにpushする
# サンプルクローン
git clone https://github.com/blossom54321/rails-test.git
cd rails-test
# サンプルの.gitフォルダは削除
sudo rm -r .git
# 新しく.git作成
git init
# 自分のリポジトリ作成
gh repo create rails-test --public --source=.
# 自分のリポジトリにpushする
git push --set-upstream origin master
フォルダを移動してbundle installを実行
cd rails-test
bundle install
試しにrails testを実行
rails test
テスト結果【特にエラーなく成功することを確認】
Run options: --seed 51280
# Running:
.
Finished in 0.015116s, 66.1569 runs/s, 66.1569 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
プルリクエストを作成して成功確認
ブランチを作成してpush
git checkout -b newbranch
naon README.md
# なんでもいいので編集してCtrl + xして保存
git add .
git commit -m "成功"
git push --set-upstream origin newbranch
GitHubのリポジトリ画面から、新しいプルリクエストを作成
しばらく待つとプルリクエスト内にCIの結果が表示される
プルリクエストを作成して失敗確認
ブランチを作成してわざとテスト失敗するように修正してpush
git checkout -b newbranch-fail
nano test/helpers/application_helper_test.rb
# assert部分でテストを失敗させるためにわざと予測結果を3から2に変更する
assert_equal add_numbers(1, 2), 2 # 3を2に変更
git add .
git commit -m "失敗"
git push --set-upstream origin newbranch-fail
先ほどと同じようにプルリクエスト作成
少し待って結果が表示されたら、失敗したことを確認する
テストに失敗してエラーになっていることが確認できる
まとめ
- 簡単なHelloworldを実行するために、「.github/workflows/」配下にymlファイルを作成することで動作確認ができた
- 実践的なハンズオンを実施するために、Ruby on Railsアプリケーションのtestを使ってプルリクエスト時のCIを作成して、動作確認した
- この記事を完了した方は書籍や公式ドキュメントなどで細かい周辺知識を埋めることをおすすめします
Discussion