読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Jenkinsで個人コードの自動テスト環境を作る方法

Programming

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

  • 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/06/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る

目次

はじめに

以前、

C++とPythonのテストコードの書き方の概要を紹介しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

ちゃんと定期的にテストを実行しないと、

結局、気づいた時には通らないテストだらけになり、

放置された状態になってしまいます。

 

そこでやはり利用したいのが、

自動テストシステムですが、

すべてのコードを公開するわけではないので、

Travis CIやCircle CIなどの外部サーバのシステムはすこし使いづらいです。

 

そこで、オンプレにインストールできる

Continuous Integration(CI)ソフトとして有名な

Jenkinsを自分のMacに入れて、

自動テストするように設定しました。

 

その時の設定方法をメモとして残しておきます。

Jenkinsとは?

Java製のオープンソースのCIシステムです。

jenkins.io

github.com

 

gitなどのCVSと連携して、

コミット時やプッシュ時に任意のスクリプトを起動して、

自動的にテストやビルドを実施させることができます。

そして、失敗したらメールを飛ばしたり、

別のスクリプトを呼んで、Slackやskypeに通知できます。

 

Java製なので、マルチプラットフォームに対応しており、

Windows, Mac, Linux上で運用することができます。

 

Jenkinsのインストール

各プラットフォームにおけるインストールの仕方です。

Mac

Homebrewで一発でした

$ brew install jenkins

 

IPアドレスは下記のファイルの設定箇所を、

適宜変更すればOKです。

$ vim ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

 

Macの立ち上げ時にJenkinsを自動起動したい場合は、

下記のコマンドを実行しておきます。

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

 

またMac上で、Jenkinsの再起動などをしたい場合は

下記のコマンドを利用します。

$ launchctl stop homebrew.mxcl.jenkins

$ launchctl start homebrew.mxcl.jenkins

 

同じPC上のソフトの自動テスト環境の作り方

自分のMacでコードを書き、

そのコードを自動テストするための設定方法です。

1. Jenkins上で新規ジョブを登録する

Jenkinsのページ上から、

新規ジョブを登録します。

 

設定した内容としては、下記の通りです。

古いビルドを破棄する

データがたまりすぎると、

Jekinsが上手く動かなくなるらしいので、

ビルドの結果などを適宜削除するように設定します。

gitリポジトリの設定

ローカルのgitリポジトリを指定する場合は、

下記のようにfile:///の下にローカルgitリポジトリのパスを指定します。

file:///Users/path/to/git/repository

これにより、テストの時にこのgitのデータをcloneして

テストしてくれます。

SCMのポーリングをオン

後述の方法で、gitコミット時にテストを実行するために、

ビルド・トリガのSCMをオンします。

スケジュールは何も記入しないでおきます。

テストスクリプトの設定

テスト実行するためのスクリプトを

gitリポジトリに置いておき、

そのスクリプトを起動するように、

下記のようにビルドのシェルを実行の部分に

コマンドを入力しておきます。

f:id:meison_amsl:20161227111530p:plain

E-Mail通知の設定

テストが失敗したら、メールが飛んでくるように、

メールアドレスを設定しておきます。

 

2. gitのhookで下記のjenkinsのURLを叩くようにする

.git/hooks/commit-msgというファイルを作り、

下記のようにgitコミット時に

テストを実行するようにcurlのコマンドを記述します。

(file://の後は、先程のgitの設定と同じパスを指定しておきます。

curl http://localhost:8001/git/notifyCommit?url=file:///Users/path_to_dir/

上記の設定で、

コミット時に自動でJenkinsに通知が行き、テストを実施してくれます。

 

Pythonでテスト環境を作る時の注意点

ライブラリへのパスが通らない時

JenkinsでPythonのテストスクリプトの実行を

実行しようとした時に、

ライブラリのインポートが出来ない時があります。

これはJenkinsのPYTHON_PATHに、

通常のユーザのPythonのパスが含まれていないためです。

そんな時は、Jenkinsのシェルスクリプトの部分で、

$ export PYTHONPATH=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/:$PYTHONPATH

のようにパスを追加してあげると、

pipなどでインストールされたライブラリを使うことができます。

 

C++のテスト環境を作る時の注意点

cmakeが使えない時のgtest

C++のテストではgtestを使っているのですが、

myenigma.hatenablog.com

gtestのコンパイルをJenkinsにやらせようとした所、

cmakeが無かったり、色々面倒だったので、

自分でビルドしたgtestを .jenkins/workspaceの下辺りにおいて、

そこにパスを通すようにしています。

 

Jenkinsからメールを送る設定

下記の記事の通りに、

Jenkins用にgmailのアカウントを作り、

メールを送信できるように設定しました。

 

また、送られてきたメールの送信者名が、

“まだアドレスが設定されていません。"となっている場合は、

下記の記事の通りに設定します。

Jenkinsにログイン出来なくなった時

下記の記事を元に、一度セキュリティの設定をオフにして、

Jenkinsを再起動する。

qiita.com

  

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

  • 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/06/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る