Quantcast
Channel: heroku Advent Calendarの記事 - Qiita
Viewing all articles
Browse latest Browse all 26

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

$
0
0

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

モチベーション

せっかくだから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に配備されます。
終わりです。


Viewing all articles
Browse latest Browse all 26

Trending Articles