LoginSignup
10
7

More than 5 years have passed since last update.

SpringBootアプリケーションをCodePipelineを用いてEC2インスタンスに自動デプロイ

Last updated at Posted at 2018-01-04

SpringBootで構築したアプリケーションをAWS CodePipelineを用いてEC2インスタンスに自動デプロイするための手順をまとめます。

構成

Codepipeline.png

  • Gitリポジトリ
    • GitHub(なんでも良い)
  • CI
    • Jenkins
  • Test & Build
    • Maven(Gradleでもそんなに変わらない)
  • APサーバ
    • SpringBoot 1.4.x on EC2

大まかな流れ

基本的に以下で紹介していただいた内容をもとに実施した。
SpringBootで構築したアプリケーションがgitにpushされたらCodeDeployで自動デプロイされる仕組み

開発者
1. 任意の(ここでは例としてmaster) branchにpush

Jenkins
1. 5分毎にポーリングし、develop branchが更新されていればpull
2. Test & Build(Maven)
3. Test & Buildが成功したらS3にリビジョンをアップロード

CodePipeline
1. S3からアップロードされたファイルを取得
2. CodeDeployを起動

CodeDeploy
1. jarファイルに実行権限を付与
2. CodeDeployから各インスタンスにSpringBootアプリがdeployされ、新しいバージョンのアプリが起動する。

サンプルコード

CodeDeployを利用した自動デプロイを行ったサンプルコード(GitHub)

追加で実施した作業

以下は、更新した箇所のみ記載。

AWS EC2インスタンスのJavaバージョンを1.8にする。

AWS EC2インスタンスのJavaバージョンがOpenJDK1.7だった。
Oracle JDK1.8をインストールすることを前提としているため、JDKのアップデートを行う。
参照:Amazon Linuxにjdk1.7 or 1.8インストール

SpringBootアプリケーションのサービス化

以下のページを参考にSpringBootアプリケーションのサービス化を行う。
Spring Bootでwarファイル作成&jarのサービス化

  • デプロイするjarファイル名:demo.jar
  • 起動するサービス名:demo

CodeDeploy

  • アプリケーション名:springboot-demo
  • アプリケーショングループ名:springboot-demo-group

appspec.ymlは今回の構成は以下のようにした。

appspec.yml
version: 0.0
os: linux
files:
  - source: demo.jar
    destination: /var/myapp/
    overwrite: yes
hooks:
  ApplicationStop:
    - location: scripts/appstop.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/appstart.sh
      timeout: 300
      runas: root

また、サービス停止・起動用スクリプトは以下のようにした。

サービス停止用スクリプト

scripts/appstop.sh
#!/bin/sh
service demo stop

サービス起動用スクリプト

scripts/appstart.sh
#!/bin/sh
chmod u+x /var/myapp/demo.jar # jarファイルに実行権限を付与
service demo start

AWS CodePipeline

CodePipelineの設定を行う。
1.パイプライン名の登録

  • パイプライン名:demo-pipeline

Codepipeline-setting1.png

2.ソース取得場所設定
Codepipeline-setting2.png

3.ビルド設定
Jenkinsでビルド済みなので、ビルド設定はなし。
Codepipeline-setting3.png

4.デプロイ設定
上記、CodeDeployで設定したアプリケーション名およびアプリケーショングループ名を選択
Codepipeline-setting4.png

5.サービスロール設定
「ロールの作成」からロール名を登録する。
Codepipeline-setting5-1.png
Codepipeline-setting5-2.png

作成したサービスロールを設定する。
Codepipeline-setting5.png

6.「パイプラインの作成」ボタンを押下して完了。

[Jenkins]S3にリビジョンをアップロードする

1.サンプルコードを利用する場合、S3にアップロードするファイル群をzip形式にまとめる。
JenkinsのJob設定画面でシェルの実行を選択し、以下を追加する。

cd target
cp demo-0.0.1-SNAPSHOT.jar ../deploy/demo.jar
cd ../deploy/
jar -cMf demo.zip *

2.JenkinsのS3アップロードプラグインを利用して、zip化したファイルをS3にアップロードにする。
以下、設定画面の例。
[Destination bucket]には、CodePipelineで設定したS3バケットを指定する。
S3-setting.PNG

3.[保存]ボタンを押下して完了。

10
7
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
10
7