2016年5月28日土曜日

Jenkins

(日本語は下を参照。)

I am now using Jenkins for the first time in a few years.

Jenkins is a CI (Continuous integration) tool well known among engineers.

When I started to use Jenkins again, I feel like thinking about what is required if I have to make a tool like Jenkins. Automated testing of various levels including unit and acceptance testing, acquisition of metrics of source code, generation of product such as executable files are what we want to do after commit to repository.

CI means automation of a series of works like them. For that purpose, the system have to call version control system, testing automation tool, metrics tools, build tools, and so on. However, depending on projects, programming languages as well as tools for various operations differ. So it is necessary to provide interface in which various tools are called and results are retrieved. Thus "separation of interface and implementation" is realized.

While setting corresponds to code base, results are generated for each build. What is needed is to obtain results of each operations in each build and display them so that users can understand easily, probably by visualization. We want to see history as well as result of each build for tests and metrics, for example.

In addition, it is necessary to manage plugins, machines and users.

As I see the actual system (of Jenkins), although I cannot understand details, my idea is not wrong as a whole. Jenkins is, in good sense, a simple system I can understand the underlying idea easily.

I want to think about the system our company develops in the same vain, but it seems to be more difficult than thinking about Jenkins.


最近何年かぶりにJenkinsを使うことになった。(Jenkinsはエンジニアの間ではよく知られたCIツールである。)

そのときなぜか自分でJenkinsのようなツールを作るとしたら何が必要か、考えてみたくなった。 リポジトリにコミットが入った後、通常行いたいこととしては、単体から受け入れまで各レベルでの自動テスト、ソースコードのメトリクス取得、成果物(実行ファイルなど)の作成などがある。

これら一連の作業を自動化するのがCIであり、そのためにはバージョン管理システム、自動テストツール、メトリクス測定ツール、ビルドツールなどを呼び出すことが必要である。とはいえ、プロジェクトによって開発言語も異なれば、各種の作業に使用するツールも異なる。だからインターフェースだけ用意しておいて様々なツールを呼び出し、結果を取得できるようにしておく。かくして「インターフェースと実装の分離」が実現される。

設定はコードベースに対応するのに対し、結果の方はビルドごとにデータが作成される。必要なのは各実行ごとに各作業の結果を取得し、わかりやすく表示してくれること。テストやメトリクスなどは今回の結果だけでなくこれまでの推移も見られるようにしたい。

あとはプラグインやマシン、ユーザなどの管理。

そんなことを考えてJenkinsを眺めてみたら、細かいところは知らない単語もいろいろ出てくるものの、大枠では外れてはいないようだ。 Jenkinsは(よい意味で)わかりやすいシステムである。

自社で開発しているシステムについて同じようなことを考えてみたいが、Jenkinsほど簡単ではなさそうだ。