Jenkinsfileを介したpom.xmlの自動インクリメントバージョン

遅かれ早かれ、すべてのJava開発者は、Continuos Integrationの分野の小さなタスクを解決します。 この運命も私を迂回していません。 プロジェクトアセンブリの各反復でpom.xmlのバージョンが自動的にインクリメントされる問題に戸惑いました。



指定:複数のモジュール、pom.xmlウィザード、およびJenkinsサーバー(すべて本物の少年のような)を備えたmavenプロジェクト。



コミットごとに、プロジェクトがブランチで自動的に収集され、開発ブランチでプロジェクトが収集されるだけでなく、バ​​ージョン番号1.0.100-SNAPSHOTの3番目の番号で設定されるビルド番号も指定されるようにする必要があります。



ブランチでJavaプロジェクトを自動的に構築するために、今流行のマルチブランチパイプラインに基づいたJenkinsプロジェクトを使用します。



画像



このワークフローの本質は定期的(たとえば、1分間に1回)であり、マルチブランチパイプラインでタスクが起動されます。これにより、ブランチの変更が決定され、何かをコミットしたブランチのアセンブリが開始されます。 同時に、本物の少年のように、本物のJenkinsfileを使用してブランチを作成します。 ちょっとした教育プログラム:Jenkinsfileは、プロジェクトのシーケンスとアセンブリ命令を定義するGroovyコードです。 彼らは特別な用語「コードとしてのパイプライン」を思いつきました。 一見複雑なことは何もないように見えました-groovyスクリプトを使用して、バージョン番号を増やし、mavenビルドをコミットして実行します。 しかし、ここで主な問題が描かれています-pom.xmlを自動的に更新した後、後続の(無限の)アセンブリを防ぐ方法は? はい、Jenkinsプラグインには「git」(ブランチの変更を検出することを目的とする)と呼ばれる特別な機能もあります-「ポーリングはコミットを無視します」が、悪いことはMultibranchパイプラインで機能しないことです。 多くのユーザーがこれについて不満を述べ、 特別なJira-itemを開始しました。 したがって、先に進み、自転車を再発明します!



しかし、幸いなことに、「プラグインの除外」と呼ばれる別の機能がgitプラグインで機能します。 したがって、特別なブランチを作成し、各アセンブリのビルド番号のみをコミットし、このブランチの名前を例外に追加します(新しいコミットが新しいアセンブリをトリガーしないようにするため)。 実際、このブランチは、ビルド番号を示す単一の番号を保存するためにのみ必要です。 このブランチには祖先がなく、「孤児」と呼ばれます。 作成するには、次の手順を実行します。



git checkout --orphan develop2 git reset --hard
      
      





そして、そこにcurrent.tagというファイルを配置し、ビルド番号を書き込みます。 それでは、Jenkinsfileがすべてを行います。そのソースコードはgithubリポジトリにあります



私はもうコードであなたを退屈させません、要するに、Jenkinsfileアルゴリズムはこれです:



  1. プロジェクトを複製しました
  2. 孤独なブランチに切り替える
  3. 最後のビルド番号を読む
  4. ビルド番号の増加
  5. 変数のビルド番号を掘り起こし、孤独なブランチのファイルに書き込みました
  6. メインブランチに切り替える
  7. pom.xmlからバージョン番号を解析します
  8. pom.xmlのバージョンとビルド番号に基づいて生成されたバージョン番号
  9. 対応するmavenプラグインを使用して、pom.xmlウィザードのバージョンとそのすべてのモジュールを更新します
  10. mvnパッケージを使用してプロジェクトを組み立てました


その結果、次のような美しさが得られます。



画像







All Articles