6

ビルドを自動化するために TeamCity をセットアップしました。現在のソリューションには、開発ブランチとメイン ブランチの両方があります。私が達成しようとしているのは、開発ブランチをビルドして、ProGet インストールの開発 NuGet フィードに公開し、メイン ブランチを ProGet サーバーのメイン NuGet フィードに公開することです。

octopus deploy を使用してパッケージをデプロイしています。TeamCity 内に octopus deploy プラグインがインストールされています。チェック ボックスをオンにして OctoPack を実行すると、パッケージがビルドされ、ビルドが完了するとアーティファクトとして表示されます。TeamCity で NuGet Pack ビルド ステップを使用しようとすると、プロジェクトの 1 つで次のエラーが発生します。

[08:33:49] :         [pack] Attempting to build package from 'xxx.csproj'.
[08:33:50]W:         [pack] Unable to find 'xxx.exe'. Make sure the project has been built.

プロジェクトがビルドされ、OctoPack で動作するのに、NuGet Pack で動作しないのはなぜですか? ビルド中の 5 つのプロジェクトがあり、最初の 4 つが正常に実行されます。1 つはコンソール アプリ、1 つは mvc Web サイト、2 つはクラス ライブラリです。動作しないのは、Windows サービスです。

ここでの最終目標は、これらのパッケージを ProGet のプライベート フィードに公開することです。私は OctoPack を使用してもかまいませんが、頭の中でその依存関係を TeamCity から削除したいと考えていましたが、それを受け入れることができます。ただし、NuGet Publish ランナー タイプを使用しようとすると、作成された NuGet アーティファクトを公開するように選択するにはどうすればよいですか?

私は狂ったようにグーグルで検索してきましたが、入力すべき内容を説明する役立つリンクが見つかりません。役立つコメントや回答をいただければ幸いです。

TeamCity のバージョン 8.15 を使用しています。

4

1 に答える 1

11

以下があなたの質問の少なくとも一部に役立つことを願っています; 主に、パッケージ化されたアーティファクトを公開する方法に関するビットです。

NuSpec アプローチ

NuGet Packビルド ステップを使用する場合Output Directory、パッケージの出力場所を決定する を指定できます。これは、チェックアウト ディレクトリへの相対パスとして指定できます。おそらく%system.PackageDeployOutput%、次のステップで使用するように、ビルド パラメーターとして定義するのが最適です...:

次に、NuGet Publishビルド ステップを指定し、パッケージ ソース/API キーなどを入力して、アップロードするパッケージを指定します。

%system.PackageDeployOutput%\*.nupkg

これにより、前のステップで出力されたパッケージが取得されます。私はこれを非常に効果的に使用しており、パラメーター化のアプローチにより、すべてのビルドで規則が促進されます。

オクトパックのサポート

OctoPackでMsBuildビルド ステップを使用している場合は、次のシステム パラメーターを宣言することにより、同様のアプローチを使用できます。

system.OctoPackPublishPackageToFileShare = %teamcity.build.checkoutDir%\%system.PackageDeployOutput% (上記と同じパラメータに注意してください)

これらをルート プロジェクト パラメーターとして宣言できるため、両方の長所を活用できます。現在、パッケージ化に対する私の好ましいアプローチは、展開可能なエンドポイントに nuspec ファイルを使用することです。より複雑な展開になると、OctoPack が少しオーバーヘッドになることがわかりました (基本的な MsBuild プロジェクトでは問題ありません)。

于 2014-11-20T04:17:19.950 に答える