web-dev-qa-db-ja.com

ソロプロジェクトで継続的インテグレーションツールが提供する利点は何ですか?

ソロプロジェクトを行っている場合、CIツールを使用してリポジトリからビルドしますか?私はチーム環境でHudsonとCruise Controlを使用しましたが、誰かが何かをチェックインしたらすぐにビルドすることが不可欠です。

バージョン管理の価値は今でも明白だと思いますが、ローカルマシンでビルドしただけで他の誰もコミットしていないので、コミットするたびにビルドする必要がありますか?

18
iftheshoefritz

さて、私はプロジェクトで継続的インテグレーションツールを使用することを計画しており、私はユニークな開発者です。必要があるのは

  1. 1つの目標は、それをクロスプラットフォームにすることです。統合リポジトリを使用して、変更を統合リポジトリ(または中央のリポジトリ、または何かにプッシュした後、複数のプラットフォームでアプリを暗黙的に(基本的に)チェックできます。信頼できるものとして使用されます)。
  2. このプロジェクトは長期にわたって構築されているため、後でチームと協力する必要があります。 2012年まで誰かを採用するつもりはないので、継続的インテグレーションのことは、1が優先されるまでしばらく待つことができます。

クロスプラットフォームとチームワークの準備以外に、私は必要性を見ていない。主なことは、ある種のソース管理ソフトウェアと、バックアップを保持するためのいくつかのリポジトリーを持つことです。これは、必要に応じて、その周りにビルドツールをセットアップするのに役立ちます。

ビルドのタイミングについては、Mercurialを使用して、チームワークリポジトリではない統合リポジトリを設定しています。したがって、統合システムを構築しようとする時が来るまで、チームワークリポジトリの変更をプッシュします。次に、チームワークリポジトリから統合リポジトリにプッシュすると、ビルドがトリガーされます。次に、チームワークリポジトリを統合リポジトリに毎日1回プルするスクリプトも追加します。

ここでは、ほぼすべての日にプロジェクトに取り組んでいると想定していますが、常にそうであるとは限りません。ビルドが必要な頻度に応じたビルドタイミングを設定する必要があります。以前働いていたゲーム会社では、CruiseControleを使用し、毎時間フルビルドをビルドしました。必要に応じて、いつでもビルドを強制することもできます。

ホームプロジェクトの場合、1日に1回はすでに「頻繁に」行われている可能性があります。主な要件は、ユーザーがビルドを強制的に簡単に起動できるようにすることです。

12
Klaim

短い熟考の後、私はそれがmoreチームよりも一人の開発者にとって重要であるかもしれないことを提案します。

最も基本的なレベルでは、CIサーバーは、コミットされたソースからアプリケーションをゼロから構築できることを実証します-適切な一連のテストと組み合わせて、ゼロから構築および実行できることを実証する必要があります。

私がやろうとしていることの1つは、ビルドにデプロイ可能なパッケージが含まれていることを確認することなので、何かをデプロイする(クリーンで既知の状態/バージョンから)ことができることもわかっています。

実際には、File | New Projectを実行するときは、おそらくリポジトリの作成またはリポジトリへの追加、CIビルドスクリプトとデプロイメントセットアップのセットアップを含める必要があります(たとえxcopyデプロイメントの山をZipするだけの場合でも)。


補遺(2016)-この頃は私のCIシステムも私の展開プロセスの不可欠な部分となるので、その価値が高まり、それなしで成果物プロジェクトを実行することは絶対にありません。自動化されたプッシュボタンの展開は、プロセスから多くのストレスを取り除き、何らかの方法で、ビルドサーバーを形成または形成することがそれに不可欠です。

20
Murph

私が1人だけコミットするときは、ビルドしてテストするだけですbefore実際にコミットします。私は通常、makefileターゲットを次のように使用します。

make sense

これにより、すべてのテスト(valgrind対応)の構成、ビルド、実行、lintの実行などが行われます。私がプッシュするのは私だけなので、Hudsonのような機能は実際には必要ありません。

さらに、メインリポジトリにフィードする複数のブランチがある環境で、コミットまたはプッシュする前に全員が常にプルに従う場合、CIサーバーはやや過剰なキルになる可能性があります。最後のビルドを壊したものの作者が金曜日にピザを買うというよく書かれたルールは通常、物事を非常にスムーズに実行し続けます:)

プロジェクトが独自のリーダーを持つサブシステムに明確に分割されている状況になった場合、本当に Hudsonなどの使用を検討する必要があります。誰かがローカルでテストし、別のサブシステムとの競争に負け、有毒なものを押してしまう可能性があります。

また、動きの速いプロジェクトのフォーク(たとえば、Linuxカーネルに対する独自の一連のパッチ)を維持している場合は、そのプロジェクトで「単独」であっても、Hudsonなどの使用を検討する必要があります。これは、メインラインから直接ブランチまたはリベースする場合に特に当てはまります。

7
Tim Post

これは素晴らしいボーナスだとは言いませんが、私たちのソロアーティストにとって、高品質なソフトウェアエンジニアリングには不可欠です。私たちのほとんどは、彼らが後で修正するのが十分に簡単であると考えるならば、彼らの品質基準が急いでいるなら少し滑らせます。その状態でソフトウェアをコミットすると、基本的に、ソースコントロールに価値のないコードベースが格納されます。

適切に準拠している場合(つまり、テストをスキップせず、コミットするたびにビルドされることを確認する)、CIは、とにかくそれをコミットするだけの場合よりも、より高い品質基準を遵守するように強制します。

1
Onno

すべてが順調に進んでいるかどうかを確認するために待機時間を減らしたい場合は重要です。保存するとすぐにIDEでデータをコンパイルできますが、ユニットテストは自動的には実行されません。そのため、CIサーバーでユニットテストとテストケースカバレッジレポートを実行します。プッシュするとすぐに私のコードの他の品質分析。

私がしなければならない唯一のトリガーは、現在の変更をバージョン管理にプッシュすることであり、コーディングに戻ることができます。そして、コーディングについて考えている間、CIシステムは長々とした品質のレポートを作成するのに忙しく、脳が落ち込んでいるときにたまに見ます。

プッシュインしたコードのビルドを実行する同じラップトップ上に別のVMWareマシンがあります。これを行うには、ターンキーLinux VMWareイメージを取得し、apt-getを使用してjenkinsをインストールし、いくつかの小さな構成変更を行います。

0