bon now

ありのままの現実を書き殴る吐き溜め。底辺SEの備忘録。
Written by bon who just a foolish IT Engineer.

MySQLとRubyを用いてテストするbitbucket-pipeline

Created Date: 2019/04/19 00:03
Updated Date: 2023/11/05 03:00

意外と需要がありそうでなさそうなネタとして、Railsアプリの単体テストをするっていうビルドステップをBitbucket Pipelineで作るっていうものを投稿してみる。

Bitbucket Pipelineって何?って人向けに簡単に説明すると、 要するにCircleCIとかTravisCIとかのクラウド型CIサービスが、Bitbucketにも標準で備わってて、そいつの名前がBitbucket Pipelineというわけである。 詳しいところは先人がQiitaの記事 お手軽CI Bitbucket Pipelinesの使い方に書いてくださっているので参考にしてほしい。

bitbucket-pipeline.yml

内容もほぼQiitaの記事にかぶってしまってるが、あっちはGolang、こっちはRubyなのでそこはちょっと違う。 中身はこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
pipelines:
  default:
     - step:
        name: Setting and Run for Rspec
        image: ruby:2.6.3
        services:
        - database
        caches:
        - bundler #cache is defined below in the definitions section
        script:
        - apt-get update && apt-get install -y nodejs
        - bundle install
        - bundle exec rake db:migrate:reset RAILS_ENV=test
        - bundle exec rspec --format RspecJunitFormatter --out spec/test-results/rspec.xml spec
definitions:
  services:
    database:
      image: mysql:5.7
      environment:
        MYSQL_ROOT_PASSWORD: 'password'
        MYSQL_PASSWORD: 'password'
        MYSQL_DATABASE: 'testdb'
        MYSQL_USER: 'user'
  caches:
    bundler: vendor/bundle

やってること

ベースのイメージはRuby2.6.3。つい先日(2019/04/18)のRubykaigi2019で発表されたバージョン。 そいつにサービスとしてMySQL5.7の環境をつなげて稼働させ、依存するライブラリをapt-getで入れ、 DBを初期化してRspecでの単体テストを実施 > xml形式のテストレポートを生成みたいな流れになっている。

あとbundlerのインストールとか毎回実行されると時間も意外と食うのでcacheを使ってみているのだが、正しく動いてないくさいので無視してもらってもいい。

おわりに

CircleCIとかも似たようなYAMLで構成されていると思うので、そのへんの移植性も高いと思う。 Bitbucket使ってプライベートレポジトリの管理をやってるようなシャイなOSS開発者には、 ぜひ使ってほしい代物である。

ちなみに僕がBitbucket Pipelineを使うことにした理由は、CIの自動化をミニマムではじめ、 利用するエンジニアたちに「CI使って自動化すると便利だな」と思ってもらい、 「だったらもっと自動化できる範囲を考えてやってみよう」とかいう自発的な改善・変革を促したいという意図があったためである。
また、例えばJenkinsでCIを進めるにあたって、その間CIというかテストのリグレッション自動化ができないっていうのはまあまあの機会損失なので、 サクッと作れる仕組みで実現しておいて「とにかく始めよう」という意図もある。

  • できることからミニマムにはじめよう
  • 自動化はテストのみでなく手続きも自動化できることを念頭にどんどん人から手作業を解放しよう
  • リスクと戦っているのなら、まずは簡単な仕組みで体現し、開発者の理解を先に得よう

こんな感じ。温め続けたお宝が、その時価値のあるものではないかもしれないという点も疑って仕事を進める事が重要だと僕は思う。

local_offer
folder work