Artifact Repository周りの作業の自動化

前回のブログでArtifact Repositoryの概要を記載しました。今回は、CI(継続的ビルト)ツールと連携して、Artifact Repository周りの作業を自動化したフローの例を紹介します。CIツールはJenkins、Artifact RepositoryはNexus(開発元はSonatype)、ビルドツールはMaven、SCMツールはGit、APサーバはTomcatを例として使います。また、JavaのWebアプリを想定し、Artifact Repositoryにはwarを格納することにします。

全体のフローを以下に示します。

Artifact RepositoryのNexusは、Maven Repositoryなので、バージョン番号はpom.xmlに指定します。ビルド・リリース担当者は、バージョン番号をpom.xmlに記載した後、SCMツールにチェックインします(1)。そして、Jenkinsのジョブ(ビルド用)を実行します(2)。Jenkinsのジョブの設定でシェルを記述しておき、Gitのチェックアウトのコマンド(3)とMavenのビルドのコマンド(4)を実行します(JenkinsのプラグインでGitやMavenを操作することもできますが、シェルを記述したほうが柔軟性が高いと思います)。Mavenのビルドでは、コンパイルだけでなく、warの作成とMaven Repository(ここではNexus)への格納も行うことができます(5、6)。

次に、リリースを行います。リリースする環境は、テスト環境や本番環境などさまざまな環境があると思いますが、ここでは特に特定していません。ビルド・リリース担当者は、リリースするwarのバージョン番号を指定して、Jenkinsのジョブ(リリース用)を実行します(7)。Jenkinsのジョブの設定で記述したシェルにより、Nexusからwarを取得します(8)。HTTPで簡単に取得できるので、wgetなどのコマンドでwarをダウンロードします。その後、Tomcatにwarをデプロイします(9)。Tomcatが提供するTCD(Tomcat Client Deployer)というツールによりコマンドでデプロイが可能です。なお、7でジョブを実行する際はバージョン番号を任意に指定できるため、切り戻しも簡単にできます。

Artifact Repository周りの作業が手作業になると、バージョン番号の指定間違い(取得したwarとデプロイするwarのバージョンが違ってしまうなど)がでてくる恐れがあるので、極力作業を自動化するのがよいでしょう。