Java と Bitbucket Pipelines

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

robotsnoindex
robotsnoindex
robotsnoindex
robotsnoindex

このガイドでは、Maven または Gradle をビルド ツールとして使用し、Bitbucket Pipelines を使用して、Docker コンテナで Java ソフトウェア プロジェクトをビルドおよびテストする方法について説明します。

If you'd prefer to quickly import a demo repository with a working pipeline to experiment with, have a look at our demo java repo.
デモ リポジトリのインポート手順

このデモではこのリポジトリをインポートし、最初のパイプラインを実行するためにパイプラインを有効化します。

注: Maven がインストールされていることを確認してください。

  1. bitbucket.org にアクセスしてログインし、このリポジトリをインポートします。その後、次の操作を行います。

    gif のインポート

  2. 左側のナビゲーション バーで [Pipelines] をクリックし、下にスクロールして bitbucket-pipelines.yml ファイルを表示します。[有効化] をクリックします。

    gif の有効化

  3. ビルドが実行されるのを確認します。

    gif のビルド

注意: Bitbucket Pipelines には、アカウントごとに 50 分の無料利用時間が含まれています (本記事の執筆時点での情報)。自身のアバター > [Bitbucket 設定] > [プランの詳細] で、その月のチームまたはアカウントの時間の使用量を、分単位で確認できます。




手動でセットアップしたい場合、構成の大部分は Pipelines がビルドを定義するために使用する bitbucket-pipelines.yml ファイル内で行います。

Maven プロジェクトのビルドとテスト

Docker で Maven のバージョンを指定する

Bitbucket Pipelines は、構成ファイルの最初に指定したイメージを使用し、すべてのビルドを Docker コンテナで実行します。Docker Hub にあるいずれかの公式 Maven Docker イメージを使用することで、Bitbucket Pipelines で簡単に Maven を使用できます。

たとえば Maven 3.3.9 (この記事の執筆時点での最新バージョン) を bitbucket-pipelines.yml ファイルの先頭で指定して使用できます。

image: maven:3.3.9
pipelines:
  default:
    - step:
        script:
          - mvn -version

オンライン バリデーターを使用して bitbucket-pipelines.yml ファイルをチェックすることができます。

Java および JDK バージョン

既定では、Maven イメージには Java JDK の最新の公式バージョンが含まれますが、特定の Maven バージョンを使用することで別のバージョンを指定することもできます。以下は、JDK 1.7 を搭載した Maven 3.2.5 の Docker イメージの使用例です。

image: maven:3.2.5-jdk-7

利用可能な Maven/JDK バージョンと対応する image タグの一覧については、https://hub.docker.com/r/library/maven/ をご参照ください。

Maven を使用したビルドとテストの実行

Docker イメージを選択したら、Pipelines スクリプトに適切な Maven コマンドを含めるだけでテストを実行できます。簡単な例を次に示します。

image: maven:3.3.9
pipelines:
  default:
    - step:
        script:
          - mvn -B verify    # -B batch mode makes Maven less verbose

Maven のプライベート リポジトリ

Maven のプライベート リポジトリにアクセスするには、Maven の既定の settings.xml (Docker イメージの /usr/share/maven/conf/settings.xml にあります) をオーバーライドする必要があります。

この例を使用する前に、MAVEN_USERNAME および MAVEN_PASSWORD の 2 つのセキュアな環境変数を設定して、これらの値を Pipelines 構成に安全に渡すことができるようにします。

bitbucket-pipelines.yml
image: maven:3.3.9

pipelines:
  branches:
    master:
      - step:
          script:
            - bash configure-maven.sh
            - mvn -B verify
configure-maven.sh
#!/bin/bash

sed -i~ "/<servers>/ a\
<server>\
  <id>private-repo</id>\
  <username>${MAVEN_USERNAME}</username>\
  <password>${MAVEN_PASSWORD}</password>\
</server>" /usr/share/maven/conf/settings.xml

sed -i "/<profiles>/ a\
<profile>\
  <id>private-repo</id>\
  <activation>\
    <activeByDefault>true</activeByDefault>\
  </activation>\
  <repositories>\
    <repository>\
      <id>private-repo</id>\
      <url>https://example.com/path/to/maven/repo/</url>\
    </repository>\
  </repositories>\
  <pluginRepositories>\
    <pluginRepository>\
      <id>private-repo</id>\
      <url>https://example.com/path/to/maven/repo/</url>\
    </pluginRepository>\
  </pluginRepositories>\
</profile>" /usr/share/maven/conf/settings.xml


Maven の settings.xml のカスタマイズ

sed を使用して既定の settings.xml にさらに高度な変更を加えることは非常に難しいため、独自の settings.xml を Bitbucket リポジトリにコミットすることをおすすめします。その後、Maven の -s フラグを使用してそれを参照できます。

image: maven:3.3.9
pipelines:
  default:
    - step:
        script:
          - mvn -s settings.xml   # e.g. with settings.xml in the root of the project

Gradle プロジェクトのビルドとテスト

リポジトリに Gradle Wrapper を追加する

アトラシアン (および Gradle) では、Gradle プロジェクトをビルドする際に、Gradle Wrapper をリポジトリにコミットすることを推奨しています。

Gradle Wrapper は、次の 2 つを保証します。

  • プロジェクトをビルドするための、ビルド環境への Gradle の手動インストールは不要
  • プロジェクトは常に同じ Gradle バージョンでビルドされる

wrapper スクリプトは、リポジトリにコミットする前に実行可能にしておくことをおすすめします。

chmod +x gradlew

その後、wrapper を使用して Gradle プロジェクトをビルドできます。

bitbucket-pipelines.yml
image: openjdk:8
pipelines:
  default:
    - step:
        script:
          - bash ./gradlew build


オンライン バリデーターを使用して bitbucket-pipelines.yml ファイルをチェックすることができます

最終更新日 2020 年 6 月 24 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.