LoginSignup
14
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-06-30

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

モチベーション

せっかくだから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のプロジェクト作成

右クリック→新規→新規Springスタータープロジェクトで作成
以後作ったプロジェクト名は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に配備されます。
終わりです。

14
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
3