Edited at
herokuDay 3

BitBucketのパイプラインを使ってHerokuにJavaをPushした話

More than 1 year has passed since last update.

初投稿です。文章が読みづらいかもしれませんが宜しくお願い致します。


モチベーション

せっかくだからGitにpushしたら自動でHerokuにデプロイするようにしたい。

でもGitHubはマイクロソフトに買収された課金しないとpublicだから見られたくないもんも見られちゃう。

BitBucketはprivateだからその辺うまくいきそう。


前提


  • STS使ってSpringBootでプロジェクト作ります(当方eclipseにSTSプラグインを入れております)

  • bitbucketのアカウント作成を済ませておきます

  • Herokuのアカウント作成を済ませておきます

  • HerokuCLI導入済です

  • Gitが使えます(eclipseのGitプラグインでもOK)


さっそくやってみる


まずはHerokuの準備

HerokuCLIからでもWebアプリ管理画面上からでもよいので任意のプロジェクトを作成

HerokuのAPIキーを控えておく(Account Settings画面から確認できる)


続いてBitBucketのリポジトリ作成

リポジトリクリエイト→GitCloneでURLを控えておく


Javaのプロジェクト作成

右クリック→新規→新規Sprinスタータープロジェクトで作成

以後作ったプロジェクト名はSampleProjectとして、各ファイル内の変数名もSampleProjectとしていますが、

そこは自分のプロジェクト名に読み替えてください。


SampleProject

├─src/main/java

├─src/main/resources
│ ├─application.properties
├─mvnw
├─mvnw.cmd
└─pom.xml

上記のようなパッケージ構成になっていればOK

ここからBitBucketとHeroku特有ファイル作成&修正


system.properties(新設)

java.runtime.version=1.8



Procfile(新設)

web: java -jar target/SampleProject-0.0.1jar --server.port=${PORT}



pom.xml(修正)


<artifactId>SampleProject</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>


pom.xmlのPackagingをjarに修正

pom.xmlのartifactId&version名がProcfileと同様になっていることを確認


application.properties(修正)

下記記載を追加

server.port=${PORT:5000}



bitbucket-pipelines.yml(新設)

# This is a sample build configuration for Java (Maven).

# Check our guides at https://confluence.atlassian.com/x/zd-5Mw for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
image: maven:3.3.9

pipelines:
default:
- step:
caches:
- maven
script: # Modify the commands below to build your repository.
#- mvn -B verify # -B batch mode makes Maven less verbose
- git push https://heroku:"HerokuのAPIキー"@git.heroku.com/"Herokuのプロジェクト名".git HEAD



それぞれのファイルの説明


system.properties

Heroku側でmavenプロジェクトをビルド後実行するために必要な設定ファイル


Procfile

Heroku側でプロジェクトを実行するために必要なファイル。実行コマンドを記載

因みに、mavenプロジェクトではmvn buildを実行するとプロジェクト直下のtargetフォルダ内に、ビルド結果ファイル(今回はjar)を格納する。これを実行する指定をしている


pom.xml

mvn buildのゴールをjarに変更(デフォルトはwarだった気が)


application.properties

heroku側のサーバーポートは5000らしいのでこのように記載(公式に書いてある通り)


bitbucket-pipelines.yml

bitbucketに備わっているパイプライン機能を利用。

bitbucketのmasterブランチにプッシュされると、自動でyamlに記載の処理を実行する

ここでは、今回はjavaをmaven管理しているので、

 ①冒頭でmavenプロジェクトを宣言

 ②herokuのプロジェクトブランチにpush

している。

なおherokuにpushされると、プロジェクトの言語、設定ファイル等を自動判別し勝手にビルドしてくれる。

最終的なフォルダ構成

(この構成じゃないとbitbucketさんやherokuさんが動いてくれないので要確認)


SampleProject

├─src/main/java

├─src/main/resources
│ ├─application.properties
├─bitbucket-pipelines.yml
├─mvnw
├─mvnw.cmd
├─pom.xml
├─Procfile
├─pom.xml
└─system.properties


最後にbitbucketにpush

bitbucketにプッシュすると、

①bitbukcetパイプラインが起動

②bitbukcetからheroku側のgitリポジトリにpush

③herokuがmavenプロジェクトと自動判別しmaven buildを実行

④targetフォルダ直下のjarをjavaコマンドで起動

の流れでherokuに配備されます。

pushしたらbitbucketのパイプライン画面のログや、Herokuのlogを確認し、各種コマンドがうまくいっていることを確かめましょう。うまくいったら完了です。

一度パイプラインを作れば、これからはBitBucektにpushするたび自動でherokuに配備されます。

終わりです。