目次
- 目次
- はじめに
- Jenkinsとは?
- Jenkinsのインストール
- 同じPC上のソフトの自動テスト環境の作り方
- Pythonでテスト環境を作る時の注意点
- Jenkins pipelineによる設定
- Jenkinsからメールを送る設定
- Jenkinsにログイン出来なくなった時
- Jenkinsでsudoを使いたい場合の対処法
- 細かいTips
- 参考資料
- MyEnigma Supporters
はじめに
以前、
C++とPythonのテストコードの書き方の概要を紹介しましたが、
ちゃんと定期的にテストを実行しないと、
結局、気づいた時には通らないテストだらけになり、
放置された状態になってしまいます。
そこでやはり利用したいのが、
自動テストシステム(CI)ですが、
GitHub上で公開していないコードに関しては、
Travis CIやCircle CIなどの外部サーバのシステムはすこし使いづらいです。
そこで、オンプレにインストールできる
Continuous Integration(CI)ソフトとして有名な
Jenkinsを自分の環境に入れて、
自動テストするように設定しました。
その時の設定方法をメモとして残しておきます。
Jenkinsとは?
Java製のオープンソースのCIシステムです。
gitなどのCVSと連携して、
コミット時やプッシュ時に任意のスクリプトを起動して、
自動的にテストやビルドを実施させることができます。
そして、失敗したらメールを飛ばしたり、
別のスクリプトを呼んで、Slackやskypeに通知できます。
Java製なので、マルチプラットフォームに対応しており、
Windows, Mac, Linux上で運用することができます。
Jenkinsのインストール
各プラットフォームにおけるインストールの仕方です。
Mac
Homebrewで一発でした
$ brew install jenkins
また、上記のコマンドでjenkinsをインストールした場合は、
下記のコマンドで設定ファイルをコピーしておいたほうが良いようです。
$ cp -p /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
ポート番号は下記のファイルの設定箇所を、
適宜変更すればOKです。
$ vim ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
(デフォルトでは8080のようです)
Macの立ち上げ時にJenkinsを自動起動したい場合は、
下記のコマンドを実行しておきます。
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
またMac上で、Jenkinsの再起動などをしたい場合は
下記のコマンドを利用します。
$ launchctl stop homebrew.mxcl.jenkins
$ launchctl start homebrew.mxcl.jenkins
Docker
Docker上でJenkinsを起動する場合は、下記のコマンドでOKです。
$sudo docker run -d -p 8080:8080 -p 50000:50000 --restart=always -v ~/jenkins:/var/jenkins_home jenkins/jenkins
~/jenkinsの下に、jenkinsのデータが保存されるようになります。
ホストOS関係なく、Docker上でJenkinsを動かし、
そのJenkinsでDockerを使ってテストするときには、
Volumeのマウントがうまく機能しない場合があります。
下記を元に設定すると、
docker上にJenkinsを立てて、
そのJenkinsの上でDockerでテストを実施できます。
同じPC上のソフトの自動テスト環境の作り方
自分のMacでコードを書き、
そのコードを自動テストするための設定方法です。
1. Jenkins上で新規ジョブを登録する
Jenkinsのページ上から、
新規ジョブを登録します。
設定した内容としては、下記の通りです。
古いビルドを破棄する
データがたまりすぎると、
Jekinsが上手く動かなくなるらしいので、
ビルドの結果などを適宜削除するように設定します。
gitリポジトリの設定
ローカルのgitリポジトリを指定する場合は、
下記のようにfile:///の下にローカルgitリポジトリのパスを指定します。
file:///Users/path/to/git/repository
これにより、テストの時にこのgitのデータをcloneして
テストしてくれます。
SCMのポーリングをオン
後述の方法で、gitコミット時にテストを実行するために、
ビルド・トリガのSCMをオンします。
スケジュールは何も記入しないでおきます。
テストスクリプトの設定
テスト実行するためのスクリプトを
gitリポジトリに置いておき、
そのスクリプトを起動するように、
下記のようにビルドのシェルを実行の部分に
コマンドを入力しておきます。
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などでインストールされたライブラリを使うことができます。
複数のPython Versionを使う
Jenkinsのテストでは複数のバージョンのPythonを使ってテストをしたい場合は、
まず初めに、システムに複数のバージョンのPythonをインストールした後、
ShiningPandaというプラグインを使うと便利です。
まず初めに、Jenkinsの管理->Global Tool Configurationで
下記のように追加したPythonのバージョン名とパスを設定します。
続いて、各ジョブのビルドのタブで
virtualenv builderを選んで、
その中で使用したいPythonのバージョンを選択して、
commandの中で必要なライブラリをpipでインストールしたり、
テストスクリプトを起動すればOKです。
Jenkins pipelineによる設定
Travis CIでは、travix.ymlというファイルにCIの設定を書き、
テストやデプロイを記述することができます。
JenkinsでもJenkins pipelineという機能で、
jenkinsfileというファイルにCIやCDの設定を書くことで、
JenkinsのGUI上での設定を最小限にすることが可能です。
Jenkinsfileに関しては、下記を参照ください。
JenkinsFileで、sshを使う
下記の記事通りに設定することで、
Jenkins fileから、sshで他のOSに接続することができます。
ちなみに、dockerでJenkinsを起動している場合、
ホストのIPは、ホスト上で下記のコマンドを実行することで実施できます。
$ "HOST_IP=
ip r | grep 'docker0' | awk '{print $9}'
"
Jenkinsからメールを送る設定
下記の記事の通りに、
Jenkins用にgmailのアカウントを作り、
メールを送信できるように設定しました。
また、送られてきたメールの送信者名が、
"まだアドレスが設定されていません。"となっている場合は、
下記の記事の通りに設定します。
Jenkinsにログイン出来なくなった時
下記の記事を元に、一度セキュリティの設定をオフにして、
Jenkinsを再起動する。
Jenkinsでsudoを使いたい場合の対処法
ライブラリのインストールなど、
ソフトウェアのスクリプトをsudoで実行したい場合、
下記の記事の通り、
sudo vim /usr/sbin/visudo
として、visudoファイルに、
Defaults:jenkins !requiretty # ユーザjenkinsはtty無しでsudo可能 jenkins ALL=(ALL) NOPASSWD:ALL # ユーザjenkinsはパスワード無しでsudo可能
を追加すると、sudoをjenkinsのスクリプトの中で利用できるようになります。
細かいTips
cmakeが使えない時のgtest
C++のテストではgtestを使っているのですが、
gtestのコンパイルをJenkinsにやらせようとした所、
cmakeが無かったり、色々面倒だったので、
自分でビルドしたgtestを .jenkins/workspaceの下辺りにおいて、
そこにパスを通すようにしています。
新しいコンピュータにJenkinsサーバを移動する場合
基本的には、
前述の方法でJenkinsをインストールし、
ホームディレクトリ直下の
.jenkinsというフォルダを新しいコンピュータにコピーすれば、
jenkinsサーバのテストの設定などを移管できます。
加えて、Dropboxなどで.jenkinsを管理している場合は、
Macの場合、ディレクトリのハードリンクの設定が
デフォルトではできないので、下記のソフトをHomebrewでインストールして、
Dropbox内のファイルを.jenkinsにハードリンクすると便利です。
JenkinsとGitbucketの連携
GitBucket上にある
Gitリポジトリのpushに応じて、Jenkinsのジョブを動かすには、
下記の通りやればOKです。
Jenkinsのログに色をつける
下記の記事の通りに、
AnsiColorプラグインを使えば、ログに色をつけることができます。
Jenkinsでビルド結果のバイナリや、実行ファイル、dockerイメージなどを作成する
下記の通り、ビルド成果物を設定することで、
ビルドの成果物をJenkinsで作成・登録し、ダウンロードできるようになります。
ビルドのあとにGit操作する
Git Publisherを使います。
コンソールアウトプットへのショートカット
ビルド中の青いバーをクリックすると、
コンソールアウトプットを開くことができます。
Jenkinsの表示言語を変更したい
ブラウザの言語設定を変更すると、Jenkinsの言語も変更されます。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。