継続的インテグレーションにおいて、外部アプリケーションの依存関係に対処する最善の方法は何ですか?
-
02-07-2019 - |
質問
TeamCity Continuous Integration サーバーを使用する際に、最適な対処方法が不明ないくつかの問題が判明しました。つまり、アプリケーションが CI サーバー上で必要とする外部アプリケーションを参照する方法です。
この問題は当初、Crystal Reports への依存関係で判明したため、当面の問題を修正するために Crystal Reports をサーバーにインストールしました。ただし、より多くのアプリケーションを CI サーバーに移行するにつれて、より多くの依存関係が見つかるようになります。
ここでの最善の戦略は何でしょうか?必要なアプリケーションをサーバーにインストールし続けるためですか?
ありがとう
解決
可能であれば、外部依存関係をビルド システムの一部にします。たとえば、インストーラーをバージョン管理システムにチェックインし、それをチェックアウトしてサイレント モードで実行するステップを用意します (多くのインストーラーは、コマンドライン /s を使用してユーザー アクションを行わないモードをサポートしている場合があります)。
こうすることで、ブランチ用または新しいハードウェア用に別のビルド マシンをセットアップする必要がある場合でも、すべてを再現可能です。
他のヒント
ビルドを完了するために実際のアプリケーションが必要な場合は、ビルド サーバーへのアプリケーションのインストールを続行する必要があります。
アプリケーションから DLL またはアセンブリへの参照が必要なだけの場合、私の会社で行ったことは、特定のアプリケーションに必要な参照のインストール可能な「SDK」を作成し、よく知られている開発マシンおよびビルド マシンにインストールすることです。ソリューションが参照するライブラリ ディレクトリ。
ビルド マシンでは、ビルド前の手順によって正しいバージョンの依存関係がインストールされ、完了時にそれらがクリーンアップされます。
最近、ビルド プロセスでアクティブ化されるビルド マシンに仮想マシンを使用することに移行しました。これらの VM には、ビルド前として SDK がインストールされ、ビルド後にスナップショットの状態に復元されます。アンインストールがほぼ不可能な依存関係がいくつかあったため、これにより毎回クリーンな出発点が得られました。
Maven を使用してビルドする場合は、pom.xml ファイルで依存関係を定義できます。その後、必要に応じて自動的にダウンロードされます。
正しくフォローできたのか分かりませんが…
あなたのアプリケーションはビルド中にこの外部アプリに依存していると思いますか?その場合、CI を実行しているマシン上にあるはずです...