LoginSignup
2
2

More than 1 year has passed since last update.

【GitHub Actions】を導入しテストとデプロイを自動化

Last updated at Posted at 2021-10-03

学習のアウトプットとして投稿しています。
何かご指摘がございましたらお願いいたします。

 GitHub Actions とは

GitHub Actionsは、GitHub上にあるリポジトリの変更を検知し、自動でテストを実行したりデプロイを行ってくれるCI/CDツールのこと。パブリックリポジトリでは無料で使用できる。
テストコードを実行する際、bundle exec rspecなど手動でコマンドを実行する必要があったが、その部分を自動化できるため手間が減り、実行を忘れてしまうことも防ぐことができる。

 GitHub Actionsの導入

ファイルの作成

GitHub Actionsは、YAML 構文を使用して、イベント、ジョブ、およびステップを定義します。 これらの YAML ファイルは、コードリポジトリの .github/workflows というディレクトリに保存されます。
引用: サンプルワークフローを作成する

以上から.github/workflowsディレクトリにsample.ymlファイルを作成します。
まずはテストを自動化する設定を書きます。

.github/workflows/sample.yml
name: Tests and Deproy
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby 2.6.7
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.6.7
        env:
          RAILA_ENV: test
        run: |
          sudo apt-get -yqq install libsqlite3-dev
          bundle install
          bin/rails db:create
          bin/rails db:migrate
          bin/yarn install
          bundle exec rubocop
          bundle exec rspec

ファイル構成

on: の部分でイベントを作成します。今回はpush時とpull_request時にGitHub Actionosが起動します。ブランチを指定することもできます。

runs-on:で実行環境のOSを指定します。

steps:以下でアクションやコマンドなどを記述していきます。

uses: actions/checkout@v2コミュニティーアクションを使い対象コードを実行環境内に取り込みます。

uses: ruby/setup-ruby@v1コミュニティーアクションを使いRuby実行環境を用意します。with:ruby-versionでバージョンを指定できます。今回は2.6.7に設定してあります。

run:以下で実行したいコマンドを記述していきます。今回はDBにsqliteを使います。テストコマンドにbundle execはつけなくても良いかもしれませんが一様つけておきます。

ここまでのファイルでリポジトリにコードが新しくpush,pull_requestされた際、テストが自動で動いてくれるようになります。

Herokuデプロイの自動化

Heroku Deployを参考にファイルに追記します。

.github/workflows/sample.yml
name: Tests and Deproy
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Ruby 2.6.7
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.6.7
        env:
          RAILA_ENV: test
        run: |
          sudo apt-get -yqq install libsqlite3-dev
          bundle install
          bin/rails db:create
          bin/rails db:migrate
          bin/yarn install
          bundle exec rubocop
          bundle exec rspec
  heroku-deproy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: akhileshns/heroku-deploy@v3.12.12
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: "YOUR APP's NAME"
          heroku_email: "YOUR EMAIL"

ジョブは、同じランナーで実行される一連のステップです。 デフォルトでは、複数のジョブを含むワークフローは、それらのジョブを並行して実行します。 ジョブを順番に実行するようにワークフローを設定することもできます。 たとえば、ワークフローにコードのビルドとテストという2つのシーケンシャルなジョブを持たせ、テストジョブをビルドジョブのステータスに依存させることができます。 ビルドジョブが失敗した場合は、テストジョブは実行されません。
引用:ジョブ

以上より、テストとデプロイがデフォルトでは同時に実行されてしまうのでneeds: buildでbuildが成功したらデプロイするようにしています。

HEROKU_API_KEYを対象リポジトリの環境変数に設定しなければいけないので、そちらも設定しておきます。

これで、GitHub Actionsの設定が終わりです。

 GitHubへPush

スクリーンショット 2021-10-03 15.04.31.png
これで自動テストと自動デプロイが導入できました。

参考

Understanding GitHub Actions
GitHub Action Deploy to Heroku
リポジトリに暗号化されたシークレットを作成する
パーフェクト Ruby on Rails 【増補改訂版】

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2