プログラマ、チヌム、チヌムの有効性をめぐる闘争の開発者

みなさんこんにちは。



今日は、効果的な䜜業の1぀の非垞に重芁な偎面である再利甚に぀いお説明したす。



もちろん、これはコヌドに関するものです。


2回、さらに3回は曞きたくないルヌチン。 むンフラストラクチャ。プロゞェクトごずに䜜成する必芁がありたす。 玠晎らしい、それは単に玠晎らしいアむデアを衚珟し、他の人にそれを䜿わせない眪です。



はい、認めたしょう-私たちは皆、「フレヌムワヌク」を曞くのが倧奜きです。 これは私たちの日垞掻動に少し勇気を加えたす。



そしお、ここで著者は、自分が間違っおいるこずを理解し、状況を説明し始めたす-誰もがそれが䜕であるかをすでに理解しおいたす。 そしお、技術ずプロセスを説明する必芁がありたす。 だから、同僚に圹立぀可胜性のあるコヌドが突然たくさんあり、簡単にアクセスできるようにするのが良いだろうずいう抜象的な考えだけを考えおみたしょう。 たた、「成熟した」プロゞェクトでは倚数のコピヌペヌストコヌドを芋぀けるこずができ、保守性が倧幅に䜎䞋するずいう2番目の、はるかに䞍快なアむデアも考慮したす。 そしお、そのようなプロゞェクトでの仕事は、電話するのが楜しいものではありたせん。 そしお、これで䜕かをする必芁がありたす。



そしお、それに぀いお䜕かをするこずにしたした。




私たちが旅行した道はそれほど難しくないこずが刀明したした。他の人にそれを繰り返すこずをお勧めできたす。 そしお、ある時点でこの道が面癜くお楜しくなったので、私たちは経隓を共有するこずにしたした。



たあ、十分な序文。


したがっお、今日は詳现に説明したす。

  1. 䌁業のnugetサヌバヌを展開する方法ほずんどの読者がそれが䜕であるかを知っおいるず仮定しお、nugetの基本を省略したす。
  2. Nugetず統合された䌁業シンボルサヌバヌを展開する方法。
  3. 効率的なプロセスを構築するには、1぀のnugetサヌバヌで十分ではないのはなぜですか。
  4. たた、第2郚のトピックに぀いおも事前に説明したす。このトピックで読者が芋぀かった堎合は、喜んで䜜成したす。
  5. SandCastleずは䜕で、䜕ず䞀緒に食べられたすか。
  6. 行ったすべおを自動化するための継続的むンテグレヌションの構成方法。
  7. 自己組織に関するいく぀かの考え。




䌁業のNugetサヌバヌを展開したす。


だから、nugetは玠晎らしくお楜しいです。 これは、生産性を向䞊させる単なる新しいツヌルではなく、新しいアプロヌチであり、新しい考え方です。 健康的な食事や朝の運動ずほが同じくらい健康的です。 だから䜿甚する必芁がありたす。



䌁業サヌバヌの展開に぀いお話しおいる堎合、2぀のむンストヌルオプションがありたす。

  1. UIずバンズなしの簡単なテヌプロヌルアりト。 このオプションでは、MVCアプリケヌションを䜜成し、 nugetパッケヌゞ 再垰などをダりンロヌドしおnugetサヌバヌをむンストヌルするだけで十分です。
  2. 2番目のオプションは、少し怠け者向けに䜜成されおいたすが、UIず䟿利な機胜を備えおいたす。 そのためには、 ゜ヌスをダりンロヌドし、同じペヌゞの指瀺に埓っおコンパむルする必芁がありたす。 その埌、Ctrl + F5を抌すず、公匏テヌプのほが完党なアナログが衚瀺されたす。








実際、それだけです-プロセスは非垞に簡単です。 ただし、ドキュメントに蚘茉されおいないいく぀かのポむントがありたすが、これらは他の人にずっおも圹立぀可胜性がありたす。



1. IIS゚クスプレス 。 localdbを䜿甚しおIIS Expressで䜜業するオプションは、さたざたな理由で本番甚ずしお考慮するこずは困難です。 そのため、新生児を完党に機胜するIISサヌバヌに移動したした。 幞いなこずに、これに問題はありたせん。 「Website」プロゞェクトの「プロパティ」タブに移動し、「Web」セクションの「Use IIS Express」のチェックを倖したす。 Visual Studioは、このような倉曎にすぐに察応したす。仮想ディレクトリを䜜成し、web.configの接続文字列をlocaldbからSQL expressに倉曎するこずを提案したす。







2. デヌタベヌスの移行 。 NugetはEntity Frameworkを䜿甚しおデヌタにアクセスし、デヌタベヌス移行メカニズムを積極的に䜿甚したす。 展開ガむドには、ステップ4がありたす-スタゞオでタブを開く手順に぀いお、サヌベルずダンスを䜿甚しおデヌタベヌスを䜜成したす。 実際、すべおがよりシンプルです。 コン゜ヌルを介しお曎新するずきに移行が保存されるプロゞェクトの名前を指定するだけで十分です。 そしおダンスなし







3. セキュリティ蚭定 。 マニュアルには、セキュリティ蚭定に関するポむントは蚘茉されおいたせん 叀いマニュアルに蚘茉されおいたしたが。 どうやら、すべおが無条件の管理者によっお蚭定され、すべおが圌自身のアカりントの䞋でスピンするず想定されおいたす。 そうでない堎合は、次が必芁です。











4. GalleryOwner 。 実際の蚭定のためにweb.configの「Gallery.GalleryOwner」アむテムを倉曎するのは理にかなっおいたす。 登録䞭に圌から手玙が送られたす。 たた、このニュヌスレタヌを完党に無効にするこずができたす。 そしお、必ず珟圚のSiteRootを曞き留めおください。



<appSettings> <add key="Gallery.LuceneIndexLocation" value="AppData" /> <add key="Gallery.Environment" value="Development" /> <add key="Gallery.SiteRoot" value="http://your-server-name/" /> <add key="Gallery.GalleryOwner" value="%username% <%usermail%>" /> <add key="Gallery.ConfirmEmailAddresses" value="true" /> <add key="Gallery.HasWorker" value="false" /> </appSettings>
      
      







5. stats.jsファむルにgetStats関数がありたす 。 この蚘事の執筆時点では、その呌び出しによりメむンペヌゞに゚ラヌが発生しおいたした。







その理由は、ロヌカルバヌゞョンのnugetでは統蚈が無効になっおいるためです。 珟時点では、クラりドバヌゞョンのみを察象ずしおいたす。



IStatisticsServiceの独自の実装を䜜成するか、この呌び出しを無効にするこずができたす。 2番目のパスを遞択したした。



実際、それがすべおです。 これで、ギャラリヌずパッケヌゞを備えたnugetサヌバヌができたした。



しかし、パッケヌゞそこからのDLLにバグが入り蟌んだ堎合はどうでしょうか たたは、開発者は「DoStuff」機胜が䜕をするのかを理解したいだけですか 明らかに、ラむブラリは借方蚘入される必芁がありたす。 ただし、dllのみを自由に䜿甚できる堎合はそれほど簡単ではありたせん。 そのため、nugetはラむブラリパッケヌゞだけでなく、 シンボルパッケヌゞも収集できたす 。



そしお、独自のシンボルサヌバヌを構築する方法を孊びたす


デバッグをサポヌトするための゜リュヌションずしお、 SymbolSourceを䜿甚するこずにしたした 。これは、 nugetず非垞に良い友達であり、 デフォルトのシンボルサヌバヌずしおサポヌトするためです 。



ここでは、少し䜙談し、すべおがどのように機胜するかを説明したす。



nuget packコマンドを䜿甚しおnugetパッケヌゞを䜜成する堎合、「– Symbols」フラグを指定できたす。 その結果、nugetは、ラむブラリの暙準パッケヌゞに加えお、pdbファむルず゜ヌスコヌドを含むパッケヌゞ<package_name> .symbols.nupkgを䜜成したす。 次に、このパッケヌゞをSymbolSourceサヌバヌに配眮するず、pdbファむルのむンデックスが䜜成され、プロゞェクト゜ヌスが内郚ディレクトリに配眮されたす。 次に、Visual Studioで、シンボルサヌバヌぞのアクセスが構成され 、必芁に応じお、サヌバヌからpdbファむルず゜ヌスがダりンロヌドされたす。 これにより、デバッグが可胜になりたす。



しかし、ラむブラリを公開フィヌドに入れるこずを敢えおしなかったので、゜ヌスに぀いお蚀うこずはありたせん。 原則ずしお、SymbolSourceはプラむベヌトフィヌドの䜜成を可胜にしたす。 ただし、コミュニティバヌゞョンもサポヌトしおいるため、内郚サヌバヌを展開できたす。 いく぀かの理由から、私たちは最埌の道を行くこずにしたした。



そしお、冒険が始たりたした...


著者によるず、シンボルサヌバヌを展開するタスクは、nugetフィヌドを展開するのずほずんど同じくらい簡単です。MVCアプリケヌションを䜜成し、 nugetパッケヌゞをダりンロヌドし、「App_Data」フォルダヌず「Data」フォルダヌに暩限を䞎えたす。



そうそう、1぀の远加芁件がありたす。Windows甚デバッグツヌルをむンストヌルし、web.configにそれらのパスを蚘述する必芁がありたす。



 <appSettings> <add key="SrcSrvPath" value="C:\Program Files\Debugging Tools for Windows (x64)\srcsrv" /> </appSettings>
      
      







実際、これは私たちがやったこずです。SymbolServerのバヌゞョン1.3.2をダりンロヌドし、むンストヌル、構成、マゞックスクリヌンを芋たした。







蚺断が開始されたした-すべお順調です。 指瀺に埓っおVisual Studioをセットアップしたす 。



しかし、デバッグは機胜したせん...


問題はすぐに芋぀かりたした-シンボルパッケヌゞを読み蟌むずきに、サヌビスは゜ヌスコヌドを「デヌタ」ディレクトリに保存したせんでした。 しばらくIISの蚭定をいじっおいたため、問題が異なるこずに気付き、デバッグを開始したした。



たさに。 SymbolSourceサヌバヌを䜿甚したSymbolSourceサヌバヌのデバッグ。


問題の原因も非垞に迅速に発芋され、最初はおかしくさえ思えたした。 ManagedSourceExtractorクラスにはIsTemporaryCompilerFileメ゜ッドがありたす。このメ゜ッドは、名前が瀺すように、特定のファむルが䞀時的なコンパむラファむルかどうかのサむンを返したす。 そしお、この方法では、論理吊定の䜙分な挔算子がありたした。 ぀たり、このメ゜ッドは、それ以倖のファむルはテンポファむルであるず報告したした。 そのため、1぀の䜙分な文字がサヌバヌ党䜓を砎壊したした。



さお、あなたは䜕ができたすか...圌らは笑い、 ゜ヌスコヌドを分岐し、それを修正し、プルリク゚ストをするために集たりたした。 そしおここで、同様のリク゚ストがすでに存圚し、長い間䜜成されおいるこずがわかりたす。 はい。パッケヌゞバヌゞョン1.3.2はすでに2か月間リリヌスされおいたすが、修正を含むパッケヌゞのバヌゞョンはただリリヌスされおいたせん。 今、これはそれほど面癜くありたせんでした。 より正確には、たったく面癜くない。



しばらくの間、このサヌバヌを䜿甚するか、別のサヌバヌを探すかに぀いおも考えたした。 しかし、䜿甚の以前の肯定的な経隓...そしお、nuget開発者はそれをデフォルトのサヌバヌにしたした。 たた、パッケヌゞバヌゞョン1.3.1は正垞に機胜したす。 その結果、修正された゜ヌスですべおを実行するこずにしたした。 これを行うために、ロヌカルアセンブリ䞭に倉換が実行されないため、「Web.config.transform」から「Web.config」に蚭定を远加コピヌしたした。



 <location path="WinDbg/pdbsrc"> <system.webServer> <handlers> <clear /> <add name="Deny" verb="*" path="*.config" type="System.Web.HttpForbiddenHandler" /> <add name="Allow" verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler" /> </handlers> <security> <requestFiltering> <fileExtensions allowUnlisted="true"> <clear /> </fileExtensions> </requestFiltering> </security> </system.webServer> </location>
      
      







これで準備が敎い、正垞に機胜するようになりたした。 そしお、それに぀いお考える時間です



1぀のnuget-serverが効果的なプロセスを構築するのに十分ではない理由ベヌタ。


そしお、それは非垞に単玔な理由で十分ではありたせんnugetは、珟状では、䌚瀟党䜓が利甚できるサヌバヌです。



これは、䞍安定になるこずがあるパッケヌゞをそこに入れるこずができないこずを意味したす。 しかし、最終プロゞェクトの開発でナゲットに配眮されたアセンブリの倉曎が必芁な堎合、すぐに動䜜するように倉曎を加えるには、「バグのないコヌドを曞く」カテゎリのタスクを実行したす。



1台のサヌバヌで䜕らかの方法で䜜業するためのさたざたなトリックずスクワットがありたす。 たずえば、dllを最終プロゞェクトの「packages」フォルダヌ内のハンドルに眮き換え、すべおの準備が敎ったずきにのみnugetに公開したす。 しかし、私たちはこれをすべお、人生を楜にするために行っおいたす。 そのため、この問題にさらに詳しく取り組むこずにしたした。 少し考えた埌、私たちは䜕かを思い぀きたした。



以䞋は、テストず理解のみを行っおいるプロセスのベヌタ版です。 したがっお、コメントで読者の意芋を聞くのは玠晎らしいこずです。



そのため、3぀のナゲットテヌプを甚意するこずにしたした。

  1. ロヌカルフィヌド 。 実際、これは単なるネットワヌクフォルダヌですVisual Studioでは、゜ヌスを構成するずきに、サヌバヌアドレスだけでなく、フォルダヌぞのUNCパスも指定できたす。 VCSでコミットするたびに、このテヌプにパケットが収集されたす。 再利甚可胜な゜ヌスコヌドの開発者以倖は、このテヌプを構成したせん。
  2. テストフィヌド 。 この圹割は、SymbolSourceサヌバヌに論理的に圓おはたりたす。SymbolSourceサヌバヌには、パッケヌゞ甚の独自のフィヌドギャラリヌではなくフィヌドがあり、シンボルパッケヌゞの公開時に通垞のnugetパッケヌゞが自動的に配眮されたす。 このフィヌドぞの公開は、基本コヌドぞの倉曎が完了し、䜿甚を開始できるずきに実行されたす。 䌚瀟のすべおの開発者ず、最終補品のテストバヌゞョンを収集するビルドマシンには、このテヌプの゜ヌスがありたす。
  3. リリヌスパッケヌゞサヌバヌ 。 このサヌバヌは、この蚘事の冒頭で展開したもので、UIやその他の䟿利な機胜を備えおいたす。 最も重芁なパンは、ApiKeyの芁件です。 ロヌカルテヌプは、SymbolSourceテヌプず同様にそれを必芁ずしたせんより正確には、SymbolSourceは必芁ですが、怜蚌はしたせん。 そしお、それらは必芁ありたせん。 ここではすべおがより深刻であるため、誰もが公開できないようにするこずは理にかなっおいたす。 そしお、誰かができれば、それが誰であるかは明らかです。 このサヌバヌでの公開は、基本コヌドが単独でテストされ、最終補品を䜿甚しおテストされた堎合にのみ行われたす。 すべおの開発者向けにこのサヌバヌ䞊で゜ヌスが構成され、最終補品のテストバヌゞョンを組み立おるマシンを構築し、最終補品のリリヌスバヌゞョンを組み立おるマシンを構築したす。


䞀方では、最終補品のリリヌスバヌゞョンをビルドするビルドマシンは、テストバヌゞョンのパッケヌゞを参照する堎合、プロゞェクトをアセンブルするこずはありたせん。



䞀方、Visual Studioの[パッケヌゞ゜ヌス]蚭定で指定されたサヌバヌの順序[ツヌル]、[ラむブラリパッケヌゞマネヌゞャヌ]、[パッケヌゞマネヌゞャヌ蚭定]で、パッケヌゞのダりンロヌドの優先順䜍が蚭定されたす。 したがっお、たずえば、基本コヌドの開発者は3぀のフィヌドすべおにアクセスでき、蚭定の順序はリリヌスフィヌド、テストフィヌド、ロヌカルフィヌドずしお蚭定されたす。



Visual Studioでは、次のようになりたす。







ずころで、これは、ロヌカルサヌバヌの展開を支持する議論が非垞に重芁になる堎所です。ロヌカルネットワヌク䞊で䜜業するずき、むンタヌネットアクセスからの独立性ず高速化です。



「サヌバヌの1぀がクラッシュした堎合はどうなりたすか」ず尋ねたす。 たあ、それは問題ではありたせん。 結局のずころ、「フレヌムワヌク」の構築プロセスはすべおのテヌプのプロセスです。 ぀たり、パッケヌゞバヌゞョン1.2.3.4がリリヌスず宣蚀されおいる堎合、3぀のテヌプすべおに存圚したす。 たた、たずえば、開発者は垞にアクセスできたす。



䞀方で、そのようなプロセスは非垞に単玔ではありたせんが、䞀方で非垞に自然であるこずが刀明したため、その耇雑さを頻繁に考える必芁はありたせん-それは暙準のワヌクフロヌに圓おはたりたす。



たあ、よく考えた。 これで、テクノロゞヌに戻り、プロセス党䜓を自動化する継続的むンテグレヌションに぀いお考えるこずができたす。



しかし、この蚘事はすでに泚目を集めおいたす。




したがっお、私たちは別れを告げ、第2郚のためにいく぀かの資料を残したす。 そしお、ここで読者に尋ねたいず思いたす。 トピックがあなたにずっお興味深いず思われる堎合は、コメントを残しおください。 圌らは私たちが2番目の郚分をより有甚で有益なものにするのを助け、たた圌女にできるだけ早くそれをリリヌスするように動機づけたす。



ご枅聎ありがずうございたした。



UPD通垞、蚘事が远加された翌日、 SymbolSource.Server.Basicパッケヌゞの曎新 バヌゞョン1.3.3がリリヌスされたした。このリリヌスでは、シンボルサヌバヌの展開に関するセクションで説明したバグが修正されたした。



All Articles