カットの下に、CircleCI、Travis CI、およびJenkinsの3つの継続的インテグレーションシステムを比較する事実調査記事の翻訳があります。
CIの定義と目的
継続的インテグレーション(CI、継続的インテグレーション)は、コードの変更を頻繁に共通のリポジトリに統合し、自動アセンブリを使用してチェックするソフトウェア開発プラクティスです。
継続的インテグレーションは、ソフトウェア開発プロセスで発生する問題を特定するプロセスを加速および促進することを目的としています。 変更の定期的な統合により、検査の1回限りの範囲が減少します。 その結果、デバッグに費やす時間が短縮され、新しい機能を追加するために再配布できます。 また、コードスタイルのチェック、循環的複雑度(複雑度が低いほど、テストしやすくなります)、およびその他の種類の制御を追加することもできます。 これにより、コードのレビューが簡素化され、時間を節約し、コードの品質が向上します。
仕組み
- 開発者は、コンピューターでローカルにコードをチェックします。
- 次に、変更が共有リポジトリに送信されます。
- リポジトリは、リクエスト(webhook)をCIシステムに送信します。
- CIサーバーがタスクを開始します(テスト、カバレッジ、構文チェックなど)。
- CIサーバーは成果物を保存し、テスト用のリリースをリリースします。
- ビルドエラーまたはテストエラーが発生した場合、CIサーバーはチームに通知します。
- チームは問題を修正します。
CircleCI vsトラビスCI vsジェンキンス
継続的インテグレーションのプロセスを一般的な用語で理解し、現在人気のあるいくつかのCIプラットフォームの比較に進むことができます。各プラットフォームにはそれぞれ利点と欠点があります。 CircleCIから始めましょう。
CircleCI
機能:
- CircleCIは、個別のサーバーを構成する必要がなく、管理する必要がないクラウドベースのシステムです。 ただし、プライベートクラウドに展開できるローカルバージョンもあります。
- 商用利用であっても、無料版があります。
- REST APIを使用して、プロジェクト、アセンブリ、および成果物にアクセスできます。 アセンブリの結果は、成果物または成果物のグループです。 アーティファクトは、コンパイルされたアプリケーションまたは実行可能ファイル(Android向けAPKなど)またはメタデータ(テストの成功に関する情報など)になります。
- CircleCIはサードパーティの依存関係をキャッシュします。これにより、必要な環境を常にインストールする必要がなくなります。
- SSH経由でコンテナに接続することが可能です。 これは、問題が発生した場合に必要になることがあります。
- CircleCIは、最小限のセットアップを必要とする完全なターンキーソリューションです。
CircleCIは以下と互換性があります。
- Python、Node.js、Ruby、Java、Goなど。
- Ubuntu(12.04、14.04)、Mac OS X(有料アカウント);
- Github、Bitbucket;
- AWS、Azure、Heroku、Docker、専用サーバー。
- ジラ、ヒップチャット、スラック。
CircleCIの利点:
- 簡単かつ迅速に作業を開始できます。
- 商用利用のための無料版。
- YAML形式の小さくて読みやすい設定ファイル。
- 専用のCircleCIサーバーは必要ありません。
CircleCIの欠点:
- 無料版のCircleCIは、Ubuntu 12.04および14.04のみをサポートしています。 MacOSを使用するには支払いが必要です。
- CircleCIはあらゆるプログラミング言語で動作するという事実にもかかわらず、Go(Golang)、Haskell、Java、PHP、Python、Ruby / Rails、Scalaのみがサポートされています。
- システムを自分用に調整したい場合、場合によっては問題が発生する可能性があり、その目標を達成するにはサードパーティ製のソフトウェアが必要です。
また、クラウドシステムには明らかな利点があるという事実にもかかわらず、必要な機能をいつでも削除でき、それについて何もできないという事実に備える必要があります。
トラビスci
Travis CIとCircleCIは非常に似ています
両方のシステム:
- YAML形式の構成ファイルを使用します。
- クラウドに展開。
- テストを実行するDockerをサポートします。
CircleCIではなくTravisCIには何がありますか?
- LinuxとMac OS Xで同時にテストを実行します。
- すぐに使用できる他の言語のサポート:
Android、C、C#、C ++、Clojure、Crystal、D、Dart、Erlang、Elixir、F#、Go、Groovy、Haskell、Haxe、Java、JavaScript(Node.jsを使用)、Julia、Objective-C、Perl、Perl6、 PHP、Python、R、Ruby、Rust、Scala、Smalltalk、Visual Basic。 - ビルドマトリックスをサポートします。
ビルドマトリックス
language: python python: - "2.7" - "3.4" - "3.5" env: - DJANGO='django>=1.8,<1.9' - DJANGO='django>=1.9,<1.10' - DJANGO='django>=1.10,<1.11' - DJANGO='https://github.com/django/django/archive/master.tar.gz' matrix: allow_failures: - env: DJANGO='https://github.com/django/django/archive/master.tar.gz'
ビルドマトリックスは、異なるバージョンの言語とパッケージを使用してテストを実行できるツールです。 豊富なカスタマイズ機能があります。 たとえば、一部の環境でビルドが失敗した場合、システムは警告を発行しますが、アセンブリ全体が失敗したとは見なされません(これは、パッケージの開発バージョンを使用する場合に便利です)。
トックス
他のCIプラットフォームが必要な場合は、Toxを使用してビルドマトリックスを作成できます。
[tox] envlist = py{27,34,35}-django{18,19,110,master} [testenv] deps = py{27,34,35}: -rrequirements/test.txt django18: Django>=1.8,<1.9 django19: Django>=1.9,<1.10 django110: Django>=1.10,<1.11 djangomaster: https://github.com/django/django/archive/master.tar.gz commands = ./runtests.py [testenv:py27-djangomaster] ignore_outcome = True
Toxは、virtualenvでパッケージを管理およびテストするためのユニバーサルコンソールツールです。 pip install toxまたはeasy_install toxを使用してインストールできます。
Travis CIの利点:
- 「箱から出してすぐに」マトリックスを構築します。
- クイックスタート;
- YAML形式の小さくて読みやすい設定ファイル。
- オープンソースプロジェクトの無料版。
- 専用サーバーは必要ありません。
Travis CIの欠点:
- CircleCIと比較して、価格は高く、商用利用のための無料版はありません。
- 限られたカスタマイズオプション(一部の場合、サードパーティソフトウェアが必要になる場合があります)。
ジェンキンス
機能:
- Jenkinsは、Windows、Mac OS X、および他のUnixライクなオペレーティングシステムで実行できるスタンドアロンのJavaアプリケーションです。
- Update Centerには何百ものプラグインがあり、Jenkinsは継続的統合と継続的配信に関連するほぼすべてのツールと統合できます。
- Jenkinsの可能性は、プラグイン接続システムのおかげでほぼ無限に拡大できます。
- さまざまなモードが使用可能です:フリースタイルプロジェクト、パイプライン、外部ジョブ、マルチ構成プロジェクト、フォルダー、GitHub組織、マルチブランチパイプライン。
- Jenkins Pipelineは、Jenkinsでの継続的なサプライチェーンの作成と統合をサポートするプラグインのセットです。 Pipelineは、Pipeline DSLを使用してさまざまな複雑度の「コードとして」タイプのサプライチェーンをモデリングするための拡張可能なツールセットを提供します。
- さまざまな条件でアセンブリを実行できます。
- Jenkinsは、Libvirt、Kubernetes、Dockerなどと連携できます。
- REST APIを使用して、受信データ量の制御、config.xmlの受信/更新、ジョブの削除、すべてのアセンブリの受信、ジョブ記述の受信/更新、アセンブリの実行、タスクの有効化/無効化を行うことができます。
Jenkinsの利点:
- 価格(無料);
- カスタマイズオプション。
- プラグインシステム;
- システムを完全に制御します。
ジェンキンスの欠点:
- 専用サーバー(または複数のサーバー)が必要です。これには、サーバー自体やDevOpsなどの追加コストが伴います。
- セットアップには時間がかかります。
おわりに
どのCIシステムを選択しますか? それはあなたのニーズとこのツールの使用目的に依存します。
CircleCIは、主なタスクが可能な限り迅速に継続的な統合を実行することである小規模プロジェクトに適しています。
Travis CIは、主にさまざまな環境でテストする必要があるオープンソースプロジェクトに推奨されます。
深刻なシステムセットアップが必要な大規模プロジェクトの場合は、ジェンキンスにアドバイスします(ジェンキンスの場合は、プラグインを使用して実行されます)。 Jenkinsではほとんど何でも変更できますが、時間がかかります。 CIチェーンをより高速に実行したい場合、Jenkinsは機能しない可能性があります。
参照: