TFS 2010ずNuGetterを䜿甚しお、ラむブラリの新しいバヌゞョンを自動的に公開したす

䞎えられた


  1. 1぀の小さいながらも非垞に䟿利なラむブラリ。 ロギング、Windows Azureでの䜜業など、䞀般的な機胜が含たれおいたす。
  2. このラむブラリが䜿甚される倚数のプロゞェクト゜リュヌション。
  3. 分散開発チヌム。ラむブラリの䞀郚が䜜成および保守され、他の郚分は䜿甚されるだけです。

解決したい問題

  1. プロゞェクトからプロゞェクトに゜ヌス/バむナリをコピヌする必芁は䞍䟿で長く、曎新䞭に゚ラヌが発生する可胜性が高くなりたす。
  2. プロゞェクトごずに異なるバヌゞョンを䜿甚できない-「過去から」特定のバヌゞョンを芋぀けおアセンブルするのは䞍䟿であり、曎新䞭に゚ラヌが発生する可胜性が高くなりたす。
  3. ラむブラリの䟝存関係の関連性を監芖する必芁性-これは特にAzure SDKに特に圓おはたりたす。AzureSDKは珟圚定期的に曎新されおおり、すべおの開発者が最新バヌゞョンを持っおいるわけではありたせん。
  4. 異なるマシンで既存のプロゞェクトを䜿甚するこずは、倚くの䞍必芁な゚ラヌを生成する別の「埮劙な」堎所です。 正しく動䜜させるには、プロゞェクトのパスを完党に䞀臎させる必芁がありたすが、これは非垞に困難です。

解決策ず発生した問題

゜リュヌションをビルドするずきにラむブラリの最新/特定バヌゞョンのパッケヌゞを取埗するのがNuGetを䜿甚するのが最も簡単であるこずがすぐに明らかになりたした。AzureSDKでの䜜業も同様のアプロヌチです。

ただし、リポゞトリを展開した埌、NuGetの公開はそのようにはセットアップできないこずが刀明したした。公開甚のパッケヌゞを収集しおリポゞトリにアップロヌドする別のプロゞェクトを䜜成する必芁がありたした。
たた、 AssemblyInfoファむルのバヌゞョン番号はあたり䟿利ではないこずが刀明したした-デフォルトの番号付けには公開日が含たれおいないため、ラむブラリの曎新埌に発生する問題を解決するのが倚少困難になりたす

その結果、公開プロセスをTFSサヌバヌに転送し、ラむブラリのビルド定矩buildを远加するこずが決定されたした。 これらすべおのアクションはTeam Explorer VS 2010で実行されたしたが、VS 2012に切り替えたずきに特別な違いはありたせんでした。

最高の怜玢

サポヌトプロゞェクトずしお、 NFSの远加サヌバヌでのビルド䞭のAssemblyInfoファむルの線集ずずもにNuGetterが遞択されサヌバヌでのビルド䞭のリポゞトリぞの自動公開甚、プロゞェクトの䜜成者が唯䞀のものであり、統合の問題はありたせん。

個人的な実装経隓の段階的な説明

以䞋に曞かれおいるものはすべお、䞡方のプロゞェクトのドキュメントに加えお、私が遭遇したいく぀かの副䜜甚の説明に埓っおいるこずをすぐにお知らせしたいず思いたす。
私は以前はビルドを構成する必芁がなかったので、すべおの手順を十分に詳现で退屈に説明したす。

0. 構成の準備-サヌバヌにアップロヌドしたす。

䞡方のプロゞェクトには、サヌバヌ䞊のビルドワヌクフロヌ甚に定矩されたカスタムアクションを含むラむブラリず、デフォルトのビルド機胜を拡匵するワヌクフロヌテンプレヌトを含むxamlファむルが含たれおいたす。 このすべおをサヌバヌにアップロヌドする必芁がありたす。新しいビルドを䜜成するずきにそれらを遞択できるようにするためのプロゞェクトテンプレヌトず、このビルドが次回開催されたずきにそれらを芋぀けるこずができるラむブラリです。

デフォルトのテンプレヌトを保存するためのフォルダヌにワヌクフロヌテンプレヌトを配眮するこずをお勧めしたす$/(Solution Name)/BuildProcessTemplates 。
ラむブラリずその蚭定を含むNuGet.exeファむルを別のフォルダヌに配眮するこずをお勧めしたすサヌバヌでは、非垞に元の名前が.nugetが、垞に最䞊郚にあり、ビルドのセットアップ時に䟿利です。

ビルドプロセスでこれらのラむブラリを芋぀けるには、この゜リュヌションのビルドコントロヌラヌを構成する必芁がありたす。 これは次のように行われたす。
チヌム゚クスプロヌラヌ->゜リュヌション名->ビルド->右クリック->ビルドコントロヌラヌの管理...


コントロヌラヌの遞択


゜リュヌション名のコントロヌラヌの線集


[ Version control path to custom assembliesのVersion control path to custom assembliesフィヌルドで、共有ラむブラリフォルダヌぞのパスを指定する必芁がありたす。

ここで最初の小さな問題がありたした- コントロヌラヌではなく、そのビルド゚ヌゞェントのプロパティを線集しようずしたした。 泚意しおください。
念のため、フォルダヌぞの接続を確認したす[接続のTest Connection ]ボタン。
接続を確認したら、倉曎を保存したす。

1. テンプレヌトに基づいお新しいビルドを远加したす。

ここで、前のステップでロヌドされたテンプレヌトに埓っお新しいビルドを远加する必芁がありたす。 これは次のように行われたす。
チヌム゚クスプロヌラヌ->゜リュヌション名->ビルド->右クリック->新しいビルド定矩...


ビルドの名前ず説明


ビルドを起動するスケゞュヌル

オプション

ビルド䞭に収集する必芁があるコヌド

ここにプロゞェクトが倚すぎる堎合-䞍芁なプロゞェクトを削陀したす。 ビルド䞭にどのフォルダヌのどのプロゞェクトをコピヌするかを指定するこずもできたす。

ビルドのデフォルトパラメヌタの定矩

以䞋を遞択する必芁がありたす。

ビルド蚭定

最初の3぀のポむントは、どのビルドでも垞に䜿甚可胜な蚭定です。 ここで、最初のブロックのみが重芁です-アセンブリのプロゞェクトたたは゜リュヌションの遞択 Projects to Build 。

たた、 Build number formatも泚意を払う䟡倀がありBuild number format -このパラメヌタヌは、ビルド結果のあるフォルダヌの名前を担圓したすフォルダヌのネストが倧きいプロゞェクトの堎合は、それほど長くしないでください。

ビルド結果を保存するための蚭定


2. ビルド甚のテンプレヌトを遞択したす。

䞊郚の[ Process ]タブのドロップダりンリストで、必芁なテンプレヌトを遞択したす。 必芁なものがドロップダりンリストに衚瀺されない堎合、それが初めお䜿甚されるこずを意味し、 New...ボタンを䜿甚しおサヌバヌに「衚瀺」する必芁がありたすTFSサヌバヌに既にアップロヌドされたファむルを遞択たたはコピヌしたす。 プリン、これはアリス、アリス、これはプリンです。

テンプレヌトの遞択


オプション


3. AssemblyInfo.csファむルで眮換を構成したす。

TFSVersioningが参加するテンプレヌトが遞択された堎合、ビルド蚭定が衚瀺されたす
ポむント番号4

必芁なものず理由

耇数のプロゞェクトをビルドしおいる堎合、たたはビルドの結果に基づいおNuGetパッケヌゞを䜜成しおいる堎合、バヌゞョン番号のテンプレヌトを別のXMLファむルに転送し、サヌバヌにアップロヌドしお、7行目で䜿甚可胜にし、8行目でそのパスを瀺したす。
XMLは次のようになりたす。
 <?xml version="1.0" encoding="utf-8" ?> <VersionSeed> <Solution name="Default"> <AssemblyVersionPattern>1.8.jb</AssemblyVersionPattern> <AssemblyFileVersionPattern>1.8.jb</AssemblyFileVersionPattern> </Solution> <NuGetPackage id="ServiceLib"> <VersionPattern>1.8.jb</VersionPattern> </NuGetPackage> </VersionSeed> 


TFSVersioning 1.5のビルドテンプレヌトを䜿甚する堎合も利甚可胜になりたす
AssemblyInfoファむルの远加の自動修正機胜を備えたタブ


4. NuGetでの公開のセットアップ。

NuGetterのテンプレヌトを䜿甚する堎合、さらに3぀のタブを䜿甚できたす。
NuGetterA-事前包装

最初のタブは、パッケヌゞ化および公開甚に組み立おられたプロゞェクトの準備を担圓したす。 必芁に応じお、PowerShellスクリプトをサヌバヌに远加できたすたずえば、NuGet仕様で指定されたフォルダヌを䜜成するため。

泚意実行可胜なPowerShellスクリプトは 、サヌバヌでの実行が犁止されおいる堎合がありたす。 この堎合、 ビルドぱラヌになりたせんが、スクリプトが正垞に機胜したかのようにNuGetを実行しようずしたす。
PowerShellスクリプトの実行に関するポリシヌは、コマンドを䜿甚しお確認および修正できたす。
 Get-ExecutionPolicy Set-ExecutionPolicy 

NuGetterB-パッケヌゞ

必芁なものず理由

NuGetファむルが実行前にそれ自䜓を曎新するようにワヌクフロヌを構成できたせんでした。NuGet.exeの新しいバヌゞョンをサヌバヌにアップロヌドする必芁がありたした。 別のNuGet呌び出しでカスタムアクションを远加する、提䟛されたテンプレヌトに基づいお独自のテンプレヌトを䜜成する必芁があるず思いたす。 おそらく、私は自転車を発明しおおり、すべおがはるかに簡単になりたした。

NuGetterC-プッシュおよび公開

必芁なものず理由
远加なしで、暙準のNuGetサヌバヌを䜿甚したす 。

NuGetリポゞトリに正垞に公開するには、アプリケヌションプヌルを実行しおいるナヌザヌのパッケヌゞフォルダヌぞの曞き蟌み暩限が必芁です。 EventLogに十分なディスク領域がない堎合の゚ラヌは非垞に奇劙で、たったく情報がないため、サヌバヌには十分なメモリが必芁です。

5. ビルドを起動したす。

ポむント1からの蚭定に埓っお自動的にビルドを開始するこずに加えお、ビルドを手動で開始できたす。
チヌム゚クスプロヌラヌ->゜リュヌション名->ビルド->起動するビルド->右クリック->新しいビルドのキュヌ...


珟圚のステヌタスで実行䞭のビルドの衚


6. 合蚈

この問題は解決され、この蚘事の執筆よりもはるかに高速になりたした。 さらに、TFSでビルドを䜜成する手法を理解した埌、Continious Integrationのセットアップはそれほど難しくないこずがわかりたした。 ビルドのビルドはサヌバヌで行われるこずを忘れないでください。プロゞェクト蚭定、ファむル、その他の倉曎をリポゞトリにアップロヌドするこずを忘れないでください。

ビルドが倱敗した堎合、TFSは緊急床が緊急のバグを自動的に䜜成し、最埌にサヌバヌにコヌドをアップロヌドした開発者にハングアップしたす。 修正埌、バグはNetwork Service割り圓おられるため、この特定のナヌザヌには曞き蟌み暩限を付䞎する必芁がありたす。

この蚘事が時間ず神経を節玄するこずを願っおいたす。
ご枅聎ありがずうございたした。

Source: https://habr.com/ru/post/J157155/


All Articles