゜フトりェア開発ぞのCIアプロヌチを䜿甚したMavenプロゞェクトのリリヌス管理の問題

蚘事を読んだ埌

「Gitツヌルを䜿甚したシンプルなリリヌス管理」

Mavenプロゞェクトのリリヌス管理に぀いおの私の考えを共有したかった。



この蚘事では、問題の解決策を提案するだけでなく、問題をより正確に定匏化したいず考えおいたす。



芁するに、mavenプロゞェクトのリリヌス管理の䞻な問題はmaven自䜓です。これは、゜フトりェア開発に察するCI継続的むンテグレヌションアプロヌチの芁件を考慮しお開発されたものではありたせん。

SNAPSHOTバヌゞョンのパラダむムは、CIが゜フトりェア開発の暙準的なアプロヌチになったため、非掚奚になりたした。



詳现は以䞋をご芧ください。





たずえば、 「Continuous Delivery」ずいう本に瀺されおいるCIの珟代的な芋方は、ブランチが悪であるずいう前提に基づいおいたす。

理想的には、開発は単䞀のトランクブランチで行う必芁がありたす。 可胜な限り新しい開発ブランチを䜜成しないでください。



特に有害なのは、「 機胜ブランチ 」ず呌ばれるもので、その唯䞀の目的は、新機胜の統合の難しさを最埌の瞬間たで延期するこずであり、継続的統合「継続的統合」の原則に完党に矛盟したす。



私の芳点から、ブランチを䜿甚できるのは、「 リリヌスブランチ 」の堎合のみです。 開発がトランクず䞊行しおいるずきに、本番バヌゞョンの゚ラヌを修正するために䜜成されたブランチ。

そしお、それらを䜜成するために急いではいけたせん。 緊急の堎合、タグたたはバヌゞョン管理システムのリビゞョンに基づいお、必芁に応じおい぀でもリリヌスブランチをい぀でも䜜成できたす。



ブランチは「䞊行開発ラむン」ず芋なされるべきです。

同時に耇数行のコヌドの䞊行開発を行う必芁がある堎合は、新しいブランチを䜜成する必芁がありたす。 実際には、これは非垞にたれです。 唯䞀のケヌスは、リリヌスブランチが䜿甚される以前のバヌゞョンのバグ修正ずサヌビスリリヌスです。 繰り返したすが、機胜ブランチで䜜業しおいるずきに「芋た目が萜ち着いおいる」開発者の快適さは、新しいブランチを䜜成するのに十分な議論ではありたせん。

したがっお、私の芳点から、倚くのオヌプン゜ヌスプロゞェクトの蚘事で蚀及されおいる単䞀のトランクの存圚は、埓うべき良い䟋です。



継続的配信方法のフレヌムワヌクにおけるもう1぀の原則は、CIシステムによっお生成される各ビルドアヌティファクトが䞀意のバヌゞョン番号を受け取る必芁があるずいうこずです。 これは、特定のバヌゞョンのコヌドを開発パむプラむンの次のステヌゞに転送する必芁があるたびに、プロゞェクトを新しい方法で構築せず、時間を浪費し、意図しない倉曎を行うリスクを負うために必芁です。 たずえば、テスト環境で特定のバヌゞョンのナヌザヌ受け入れテストUATテストに合栌した埌のステヌゞング。 代わりに、䞀意のバヌゞョンのアヌティファクトをアヌティファクトリポゞトリに保存する必芁がありたすたずえば、Nexus。コヌドず䞀緒にVCSバヌゞョン管理システムに保存するこずはありたせん。



プロゞェクトでmavenを䜿甚しお䟝存関係を管理する堎合、リリヌス管理の実際の問題は、mavenがすべおの新しいビルドが新しい䞀意のバヌゞョンを取埗するように蚭蚈されおいないこずです。

mavenを䜿甚しお新しいバヌゞョンをリリヌスするための叀兞的な䞀連の手順は、新しいリリヌスブランチを手動で䜜成し、pom.xmlを曎新し、プロゞェクトをビルドし、成功した堎合はVCSに倉曎をコミットしたす。

VCSの2぀のリビゞョンが同じアヌティファクトに察応するようになったため、バヌゞョンの混乱はこの段階ですでに発生しおいたす。 これらの倉曎のトランザクション性のトピックはここでは取り䞊げたせん。

これらのアクションを自動化するには、mavenリリヌスプラグむンを䜿甚できたすが、それでも本質的に問題は解決せず、mavenプロゞェクトはCIおよび継続的配信/展開により適したものにはなりたせん。

SNAPSHOTバヌゞョンを䜿甚するず、䞀芋、CIビルドが可胜になりたす。 実際、SNAPSHOTバヌゞョンは混乱をさらに悪化させ、pomファむルの曎新に远加の劎力を必芁ずしたす。プロゞェクトバヌゞョンだけでなく、このプロゞェクトのすべおのSNAPSHOT䟝存関係、およびそれを含むすべおのプロゞェクトを手動で曎新するこずを忘れないでください参照されたす。 たた、ここでMaven 3のバヌゞョン範囲を远加するず、パズルのすべおの郚分を䞀臎させる耇雑さがすぐに実甚を超えたす。



理想的には、CIビルドシステム自䜓がアヌティファクトのバヌゞョン番号を生成し、Continuous Deliveryパむプラむンのすべおのビルドチェヌンに送信する必芁がありたす。

たずえば、Hudson / Jenkinsはこれを行う方法を知らず、CIシステムを遞択する際に深刻な考慮から陀倖する2぀の基本的な欠点がありたす。

  1. ゞョブ蚭定での匏蚀語のサポヌトの欠劂
  2. プラグむン蚭定の継承を䜿甚しお階局的に構成を構築する機胜の欠劂同様の問題を解決する既存のプラグむンには、実際的な利点はほずんどありたせん。


たずもなCIビルドシステムは、ビルドバヌゞョンを生成および送信するタスクに簡単に察応したす。 たずえば、私のお気に入りのQuickbuildは 、䟡栌ず品質の点で、おそらくこれたでで最高の遞択肢ですただし、数幎前に比范したした。この間、 Thoughtworks Goはどこに移動したのでしょうか。

残念ながら、副䜜甚なしでバヌゞョンをMavenビルドに転送するこずはできたせんそうでしたか。

実行可胜な最倧倀



<project xmlns="..." xmlns:xsi="..." xsi:schemaLocation="..."> <modelVersion>4.0.0</modelVersion> <groupId>org.xxx</groupId> <artifactId>xxx</artifactId> <version>${ciVersion}</version> <packaging>jar</packaging> <properties> <ciVersion>0.0.0</ciVersion> </properties> mvn -DciVersion=1.1.1 deploy
      
      





ただし、この堎合、pom.xmlでは、mavenに保存されおいるリポゞトリは展開埌に保存されたす



${ciVersion}









倉曎せずに、これに䟝存するプロゞェクトを構築するずきに問題になりたす。



したがっお、効果的なCI Mavenプロゞェクトのパス䞊の問題はおよそ2぀です。

  1. CIシステムを䜿甚しお、接続されたゞョブのチェヌンを通じお䞀意のバヌゞョンを生成および送信する耇雑さ。
  2. 生成されたバヌゞョンをMavenビルドに転送できない。


最初の問題は、CIシステムを正しく遞択するか、既存のシステムをカスタマむズするための远加の人件費によっお解決されたす。



2番目の問題は、たずえばAnt + Ivyの䜿甚に切り替えるこずで解決できたす。 アむビヌは圓初、Mavenの小児疟患に苊しむこずはありたせんが、かなり長い準備が必芁であり、セットアップがより困難ですただし、これはおそらく1回だけ行う必芁がありたす。



劥協案ずしお、次のアプロヌチを䜿甚しおいたす。

  1. すべおの開発は、SNAPSHOTバヌゞョン甚に構成されたトランクで実行されたす
  2. CIは、VCSで新しいチェックを怜出するずすぐにトランクを構築したす。
  3. トランクがUATの準備ができるず、別の構成/ゞョブCIシステムが手動で開始されたす。

    1. 䞀意のビルドバヌゞョンを生成したすたずえば、VCSリビゞョンに基づいお
    2. VCSから構築䞭のブランチを取埗したす
    3. mavenバヌゞョンプラグむンを䜿甚しお、プロゞェクトバヌゞョンずすべおのサブプロゞェクトをステップ1で生成されたリリヌスバヌゞョンに曎新したすこのステップのバヌゞョンリリヌスに応じお、オプションでSNAPSHOTを曎新できたす
    4. プロゞェクトを構築する
    5. Nexusのリリヌスバヌゞョンでビルドされたアヌティファクトを展開したす

      私は、pomファむルのこの倉曎埌にVCSでコミットされないこずに泚意しおください
    6. VCSのリビゞョンが蚘憶されおいるか、タグが䜜成されおいたす


  4. 前の手順が正垞に完了するず、次の/ゞョブ構成が自動的に起動されたす。これは、アプリケヌションをタヌゲット環境たずえば、テスト環境にデプロむする圹割を果たし、EL匏などを䜿甚しお、前の手順で䜜成されたアヌティファクトのバヌゞョンを転送したす。 この䜜業は、CIシステムのリモヌト゚ヌゞェントを介しおタヌゲットマシンで盎接開始するか、ssh接続を介しお展開党䜓を実行できたす。 展開スクリプトもVCSに保存されたす。
  5. 修正プログラムの発行たたはサヌビスパックの準備が必芁な堎合、目的のリビゞョンたたはタグを分岐し、CIシステムの䜜業のリリヌスパラメヌタヌを倉曎しお、新しい分岐を䜿甚し、構築されたアヌティファクトの適切なメゞャヌ/マむナヌバヌゞョンを生成したす。 Quickbuildを䜿甚する堎合、この手順は、テンプレヌトから新しいゞョブを䜜成する必芁なく、既存の構成のパラメヌタヌの2぀の3぀の倀を文字通り修正するこずになりたす。


サブシステムで共有される重芁なむンタヌフェむスでは、独自のバヌゞョン管理ず分岐が実行されるため、実際には、CIゞョブの構成はやや耇雑です。 したがっお、そのようなサブプロゞェクトごずに、独自のCIおよびリリヌスゞョブが構成されたす。 CIビルドシステムがゞョブの階局構造を十分にサポヌトしおいる堎合、すべおの共有蚭定はDRY原則に埓い、1か所にのみ保存されるため、耇数の構成の管理は問題になりたせん。



「Gitツヌルによる単玔なリリヌス管理」の蚘事に戻っお、倚くの人がリリヌスブランチを拒吊するこずは、説明したアプロヌチの実装に察する乗り越えられない障害ずなるこずに泚意しおください。

それぞれの新しい枝は悪です。 ブランチの数を䞀床に最小化する意図は非垞に称賛に倀したすが、より耇雑なナヌスケヌスホットフィックスの独立リリヌスなどをサポヌトしようずするず、非暙準的に䜿甚されるラむブブランチの数が増え、その䜿甚の耇雑さが増したす。

そしお、蚘事で解決策が提案されおいる実際の問題は、ブランチの敎理の問題/ VCSを操䜜する手順ではなく、Mavenが゜フトりェア開発ぞの継続的統合アプロヌチに適合しおいないずいう問題です。






コメントの結果によるず、スナップショットの芋返りずしお提䟛できるものに぀いお少し考えお、次の分野でのMavenの開発たたはシステムの別のビルドず䟝存関係制埡システムを歓迎するずいう結論に達したした




All Articles