初投稿です。文章が読みづらいかもしれませんが宜しくお願い致します。
#モチベーション
せっかくだから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としていますが、
そこは自分のプロジェクト名に読み替えてください。
├─src/main/java
├─src/main/resources
│ └─application.properties
├─mvnw
├─mvnw.cmd
└─pom.xml
上記のようなパッケージ構成になっていればOK
ここからBitBucketとHeroku特有ファイル作成&修正
java.runtime.version=1.8
web: java -jar target/SampleProject-0.0.1jar --server.port=${PORT}
…
<artifactId>SampleProject</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
…
pom.xmlのPackagingをjarに修正
pom.xmlのartifactId&version名がProcfileと同様になっていることを確認
下記記載を追加
server.port=${PORT:5000}
# 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さんが動いてくれないので要確認)
├─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に配備されます。
終わりです。