IBM Cloud Continuous Delivery で Spring Boot 2.0 のアプリをビルドする

IBM Cloud には CI 環境である Continuous Delivery というサービスがあります.

今回はこれで Spring Boot 2.0 のアプリケーションをビルドしてみたいと思います.

build.gradle

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        //mavenCentral()
        //IBM Cloud Continuous Delivery 対応
        maven {
            url "http://repo1.maven.org/maven2"
        }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
war {
    enabled = true
    archiveName 'app.war'
}

group = 'com.ibm.jp.gbs'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    //mavenCentral()
    //IBM Cloud Continuous Delivery 対応
    maven {
        url "http://repo1.maven.org/maven2"
    }
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa:latest.release')
    compile('org.springframework.boot:spring-boot-starter-actuator:latest.release')
    compile('org.springframework.boot:spring-boot-starter-web:latest.release')
    compile('org.springframework.boot:spring-boot-configuration-processor:latest.release')
}

Continuous Delivery でビルドするために修正する箇所があります.

Continuous Delivery では通常 https で maven repository にアクセスしてしまうため、以下のエラーが発生します.

Could not HEAD ‘https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-web/2.0.4.RELEASE/spring-boot-starter-web-2.0.4.RELEASE.jar’.
> peer not authenticated

これを http に変えるために以下のように修正します.

repositories {
    //mavenCentral()
    //IBM Cloud Continuous Delivery 対応
    maven {
        url "http://repo1.maven.org/maven2"
    }
}

 

Continuous Delivery

今回は Java 1.8, Grade 4.8.1 でビルドを行います.

Continuous Delivery の Java, Gradle のデフォルトバージョンは以下のようになります.

  • Java 1.7
  • Gradle 1.12

カスタムで使えるバージョンは以下のリンクに記載されています.

Java, Gradle を抜粋すると以下のようになります.

  • Java 1.7
  • Java 1.8
  • Gradle 1.12
  • Gradle 2
  • Gradle 2.9

Spring Boot 2系で Gradle ビルドしようとすると Gradle 4.0 以上を要求されるので以下のようなエラーになります.

A problem occurred evaluating root project ‘app’.
> Failed to apply plugin [id ‘org.springframework.boot’]
> Spring Boot plugin requires Gradle 4.0 or later. The current version is Gradle 2.9

しかしながらここで詰みとはならないので安心してください.
回避策は gradlew を使って、自前でダウンロードした Gradle を使う方法です.

以下、Continuous Delivery の Pipeline に記述するビルドスクリプトになります.

#!/bin/bash
export JAVA_HOME=~/java8
export PATH=$JAVA_HOME/bin:$PATH

./gradlew war

 
コンソール上では gradlew に記述されたバージョンの Gradle がダウンロードされていることが分かります.

Downloading https://services.gradle.org/distributions/gradle-4.8.1-all.zip

 

想像以上に柔軟な操作が可能で驚きました.
これならかなり自由な構成でビルドができそうです.

 

以上です.