GitLab CIとは?GitLab上でユニットテストを自動化する方法
2018.10.18
こんにちは。データサイエンスチームのtmtkです。
この記事では、GitLab上で簡単にユニットテストを自動化できるGitLab CIを紹介します。
はじめに
CI(継続的インテグレーション、continuous integration)というものがあります。プログラムの開発効率や品質の向上のため、ビルドやテストを継続的に実行していくことです。具体的にはたとえば、Gitのリポジトリに変更点がpushされるごとに自動的にビルドやテストを実行するように設定します。そうすれば、間違えてビルドを破壊してしまったりテストを通らなくしてしまったりしても、自動的に実行されたテストによってすぐに気付くことができます。
通常、CIの環境を整備するにあたっては、ビルドやテストを実行するサーバを用意する必要があります。ビルドやテストの実行を起動するソフトウェアも必要となります(たとえばJenkinsなど)。
GitLabはGitLab社が開発するオープンソースのGitリポジトリの管理ツールです。Wiki機能、Issue Tracker機能、CI/CD機能などがついています。
GitLabはオープンソースのソフトウェアなので自分でインストール・管理することが可能ですが、GitLab社が管理するGitLabもあり、GitLab.comで利用できます。GitLab.comでは、GitHubと違いプライベートなリポジトリを無料で管理できるところが魅力です。
GitLab CIではCIでのビルドやテストのためにサーバがGitLab.com側によって用意されているため、自分で用意する必要がなく、手軽にCIの設定をできます。
今回は、GitLab.com上でGitLab CIを使うことで簡単にCIが導入できるところを見てみます。Pythonでの例を紹介します。
Gitリポジトリの作成
それでは、実際にGitLab上でユニットテストを自動化します。GitLab.comでアカウントを登録し、ログインしておきます。SSH公開鍵の設定なども済ませておきます。
GitLab.comから、「New Project」をクリックし、プロジェクト作成画面に進みます。
「Project name」欄に「gitlab-ci-test」と入力し、「Create project」をクリックしてプロジェクトを作成します。
ターミナルから
git clone git@gitlab.com:[あなたのGitLab.comでのユーザー名]/gitlab-ci-test.git
と入力して、いま作ったプロジェクトをクローンします。
プログラムの作成
cd gitlab-ci-test
と入力し、いまクローンしたリポジトリに移動します。テスト対象のファイルとして、main.py
を以下の内容で作成し、保存します。
def plus1(x): return x + 1
また、ユニットテストを記述するファイルとして、test_main.py
を以下の内容で保存します。
from main import * def test_plus1(): assert plus1(1) == 2
これで、与えられた数に1を足して返す関数plus1
と、それをテストする関数test_plus1
を作ることができました。
GitLab CIの設定
次に、GitLab CIを使うため、GitLab CIの設定ファイルを記述します。GitLab CIの設定ファイルを作るには、リポジトリのルートに.gitlab-ci.yml
というYAMLファイルを作ればいいです。.gitlab-ci.yml
を以下の内容で作成します。
image: python:3-alpine before_script: - pip install pytest pytest-cov test: script: - pytest --cov=.
このように記述すると、GitLab CIで、Docker Hubからpython
イメージを取得し、そのイメージ上でpip install pytest pytest-cov
、pytest --cov=.
を順に実行します。
以上の手順でmain.py
、test_main.py
、.gitlab-ci.yml
の3つのファイルを作成できたら、GitLab.comにpushします。
git add . git commit -m "first commit" git push
すると、GitLab.com上で自動的にテストが実行されます。https://gitlab.com/[あなたのユーザー名]/gitlab-ci-test にアクセスし、左側のメニューから「CI/CD」をクリックします。すると、自動的にテストが実行されている様子がわかります。
もしテストが失敗すると、メールで自動的に通知されます。
Test Coverageの測定
GitLabにTest Coverageを取得させることもできます。取得させるには、GitLab.com上のリポジトリのページにアクセスし、「Settings→CI/CD→General pipelines→Test coverage parsing」と進み、「\d+\%\s*$」と入力して「Save changes」をクリックします。その後、テストを再実行すると、Test CoverageがGitLabから取得できていることがわかります。
なお、Scala + sbt + ScalaTest + sbt-scoverageという構成でテストを自動化する場合は、「Test coverage parsing」にはCoverage was \[\d+\.\d+\%\]
と入力するといいようです。.gitlab-ci.yml
などの設定については、公式のGitLab-examples / scala-sbt-sample-app · GitLabが参考になります。
まとめ
この記事では、GitLab CIを使って簡単にCIを設定できることを見ました。
GitLab.comでのGitLab CIでは、GitLabで用意されているコンピュータ上でビルドやユニットテストを実行できるので、自分でCI用のマシンを準備する必要がなく、とても便利です。
CIが導入されないまま開発が進み、ビルドやテストが破壊され放置されているようなプロジェクトになってしまうと、その状態からCIを導入するのは大変です。CIを早めに導入して、健全な開発体制を維持しましょう。
参考文献
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterデータ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。
Recommends
こちらもおすすめ
-
機械学習を学ぶための準備 その5(行列のいろいろ)
2015.12.19
-
VAEを用いたUNIXセッションのなりすまし検出
2018.12.17
-
最小二乗法と最尤法
2017.10.26
-
PythonやR言語で相関係数を計算する方法
2018.2.20
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16