正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

MavenビルドをJenkinsからに移行する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

JenkinsでMavenビルドを使用している場合は、Java Springプロジェクトテンプレートを使用してGitLabに移行できます。このテンプレートでは、基盤となる依存関係の管理にMavenを使用します。

Jenkinsの設定例

次の3つのJenkinsの例では、それぞれ異なる方法でMavenプロジェクトをテスト、ビルド、およびシェルエージェントにインストールします:

  • シェル実行によるフリースタイル
  • Mavenタスクプラグインを使用したフリースタイル
  • Jenkinsfileを使用した宣言型パイプライン

3つの例はすべて、3つの異なるステージングで、同じ3つのコマンドを順番に実行します:

  • mvn test: コードベースで見つかったテストを実行します
  • mvn package -DskipTests: POMで定義された実行可能なタイプにコードをコンパイルし、最初のステージングでテストが完了しているため、テストの実行をスキップします。
  • mvn install -DskipTests: コンパイルされた実行可能ファイルをエージェントのローカルMaven .m2リポジトリにインストールし、テストの実行を再度スキップします。

これらの例では、単一の永続的なJenkinsエージェントを使用します。これには、Mavenがエージェントにプリインストールされている必要があります。この実行方法は、シェルexecutorを使用するに似ています。

シェル実行によるフリースタイル

Jenkinsの組み込みシェル実行オプションを使用して、エージェント上のシェルからmvnコマンドを直接呼び出す場合、設定は次のようになります:

Mavenコマンドがシェルコマンドとして定義されたビルドステップを示すJenkins UI。

Mavenタスクプラグインを使用したフリースタイル

Mavenビルドライフサイクルで特定のゴールを宣言して実行するためにJenkinsでMavenプラグインを使用する場合、設定は次のようになります:

Mavenプラグインを使用してMavenコマンドが定義されたビルドステップを示すJenkins UI。

このプラグインでは、MavenをJenkinsエージェントにインストールする必要があり、Mavenコマンドを呼び出すためのスクリプトラッパーを使用します。

宣言型パイプラインの使用

宣言型パイプラインを使用する場合、設定は次のようになります:

pipeline {
    agent any
    tools {
        maven 'maven-3.6.3'
        jdk 'jdk11'
    }
    stages {
        stage('Build') {
            steps {
                sh "mvn package -DskipTests"
            }
        }
        stage('Test') {
            steps {
                sh "mvn test"
            }
        }
        stage('Install') {
            steps {
                sh "mvn install -DskipTests"
            }
        }
    }
}

この例では、プラグインの代わりにシェル実行コマンドを使用します。

デフォルトでは、宣言型パイプライン設定は、Jenkinsパイプライン設定、またはJenksinfileのGitリポジトリに直接保存されます。

Jenkinsの設定をに変換する

前の例はすべてわずかに異なりますが、同じパイプライン設定でに移行できます。

前提要件:

  • シェルexecutorを備えた
  • シェルランナーにインストールされているMaven 3.6.3およびJava 11 JDK

この例は、Jenkinsでのビルド、テスト、インストールの動作と構文を模倣しています。

パイプラインでは、コマンドはステージにグループ化された「ジョブ」で実行されます。.gitlab-ci.yml設定ファイルで移行された設定は、2つのグローバルキーワード(stagesvariables)と、それに続く3つのジョブで構成されます:

stages:
  - build
  - test
  - install

variables:
  MAVEN_OPTS: >-
    -Dhttps.protocols=TLSv1.2
    -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
  MAVEN_CLI_OPTS: >-
    -DskipTests

build-JAR:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS package

test-code:
  stage: test
  script:
    - mvn test

install-JAR:
  stage: install
  script:
    - mvn $MAVEN_CLI_OPTS install

この例では:

  • stagesは、順番に実行される3つのステージを定義します。前のJenkinsの例と同様に、テストジョブが最初に実行され、次にビルドジョブ、最後にインストールジョブが実行されます。
  • variablesは、すべてのジョブで使用できるCI/CD変数を定義します:
    • MAVEN_OPTSは、Mavenの実行時に必要なMaven環境変数です:
      • -Dhttps.protocols=TLSv1.2は、パイプライン内のすべてのHTTPリクエストに対して、TLSプロトコルをバージョン1.2に設定します。
      • -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repositoryは、ローカルMavenリポジトリの場所をランナー上のGitLabプロジェクトディレクトリに設定して、ジョブがリポジトリにアクセスして変更できるようにします。
    • MAVEN_CLI_OPTSは、mvnコマンドに追加される特定の引数です:
      • -DskipTestsは、Mavenビルドライフサイクルのtestステージをスキップします。
  • test-codebuild-JAR、およびinstall-JARは、パイプラインで実行するジョブのユーザー定義名です:
    • stageは、ジョブが実行されるステージを定義します。1つのパイプラインには1つ以上のステージが含まれ、1つのステージには1つ以上のジョブが含まれます。この例には3つのステージがあり、それぞれに1つのジョブがあります。
    • scriptは、そのジョブで実行するコマンドを定義します。steps内のJenkinsfileに似ています。ジョブはイメージコンテナ内で実行される複数のコマンドを順番に実行できますが、この例では、ジョブはそれぞれ1つのコマンドのみを実行します。

Dockerコンテナでジョブを実行する

Jenkinsのサンプルと同様に、このビルド処理を処理するために永続的なマシンを使用する代わりに、この例では一時的なDockerコンテナを使用して実行を処理します。コンテナを使用すると、仮想マシンとそれにインストールされているMavenバージョンをメンテナンスする必要がなくなります。また、パイプラインの機能を展開および拡張する柔軟性も向上します。

前提要件:

  • プロジェクトで使用できるDocker executorを備えた。GitLab.comを使用している場合は、パブリックインスタンスRunnerを使用できます。

この移行されたパイプライン設定は、3つのグローバルキーワード(stagesdefaultvariables)と、それに続く3つのジョブで構成されます。この設定では、前の例と比較して、改善されたパイプラインのために追加の機能を利用しています:

stages:
  - build
  - test
  - install

default:
  image: maven:3.6.3-openjdk-11
  cache:
    key: $CI_COMMIT_REF_SLUG
    paths:
      - .m2/

variables:
  MAVEN_OPTS: >-
    -Dhttps.protocols=TLSv1.2
    -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
  MAVEN_CLI_OPTS: >-
    -DskipTests

build-JAR:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS package

test-code:
  stage: test
  script:
    - mvn test

install-JAR:
  stage: install
  script:
    - mvn $MAVEN_CLI_OPTS install

この例では:

  • stagesは、順番に実行される3つのステージを定義します。前のJenkinsの例と同様に、テストジョブが最初に実行され、次にビルドジョブ、最後にインストールジョブが実行されます。
  • defaultは、デフォルトですべてのジョブで再利用する標準設定を定義します:
    • imageは、使用するDockerイメージコンテナと、その中でコマンドを実行することを定義します。この例では、必要なものがすべてインストールされている公式Maven Dockerイメージです。
    • cacheは、依存関係をキャッシュして再利用するために使用されます:
      • keyは、特定のキャッシュアーカイブの一意の識別子です。この例では、事前定義されたCI/CD変数として自動生成された、Gitコミットrefsの短縮バージョンです。同じコミットrefsに対して実行されるジョブは、同じキャッシュを再利用します。
      • pathsは、キャッシュに含めるディレクトリまたはファイルです。この例では、ジョブの実行間で依存関係を再インストールしないように、.m2/ディレクトリをキャッシュします。
  • variablesは、すべてのジョブで使用できるCI/CD変数を定義します:
    • MAVEN_OPTSは、Mavenの実行時に必要なMaven環境変数です:
      • -Dhttps.protocols=TLSv1.2は、パイプライン内のすべてのHTTPリクエストに対して、TLSプロトコルをバージョン1.2に設定します。
      • -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repositoryは、ローカルMavenリポジトリの場所をランナー上のGitLabプロジェクトディレクトリに設定して、ジョブがリポジトリにアクセスして変更できるようにします。
    • MAVEN_CLI_OPTSは、mvnコマンドに追加される特定の引数です:
      • -DskipTestsは、Mavenビルドライフサイクルのtestステージをスキップします。
  • test-codebuild-JAR、およびinstall-JARは、パイプラインで実行するジョブのユーザー定義名です:
    • stageは、ジョブが実行されるステージを定義します。1つのパイプラインには1つ以上のステージが含まれ、1つのステージには1つ以上のジョブが含まれます。この例には3つのステージがあり、それぞれに1つのジョブがあります。
    • scriptは、そのジョブで実行するコマンドを定義します。steps内のJenkinsfileに似ています。ジョブはイメージコンテナ内で実行される複数のコマンドを順番に実行できますが、この例では、ジョブはそれぞれ1つのコマンドのみを実行します。