githubActionsを使ってテストが成功するとAWS上のElasticBeanstalkに自動的にデプロイしてくれるタスクを作ります。
SpringBootで生成したjarをデプロイしていきます。
目次
AWS上での設定
デプロイ用のIAMユーザを作る
IAMからCICD用のユーザを追加していきます。
この時、アクセスの種類は「プログラムによるアクセス」を選択します。
ElasticBeansTalkへのデプロイのために必要な権限をアタッチする
アクセス権限の設定では、「既存のポリシーを直接アタッチ」を選択し、以下の2つの項目をアタッチします。
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
確認画面
タグは特に指定してないです。
githubでの設定に必要な情報を取得する
ユーザの作成が完了すると、以下のような画面に移ります。
csvファイルをダウンロードして保存しておきます。
※このタイミングでしかcsvファイルやシークレットアクセスキーは確認できません。紛失した場合はアクセスキーを再発行します。
デプロイ対象となるElasticBeansTalkの情報を取得する
github Actionsの設定に使います。
- 環境名
- アプリケーション名
github上での設定
Secretsにアクセスキーとシークレットキーを登録する
githubのproject -> Settings -> Secrets
今回は
CICD_DEVELOP_AWS_ACCESS_KEY_ID・・・アクセスキー
CICD_DEVELOP_AWS_SECRET_ACCESS_KEY・・・シークレットキー
で登録しました。
Actionsでworkflowを作成する
name: Java CI
# Controls when the action will run.
on:
# mainブランチにpush,margeされたタイミングで発火する
push:
branches: [ main ]
# 手動で実行する
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.11
uses: actions/setup-java@v1
with:
java-version: 1.11
# テスト実行
- name: Build with Gradle
run: ./gradlew clean test -i
# ビルド
- name: Build
run: ./gradlew build
# デプロイversionを一意にするためにtimestampを利用する
- name: Get timestamp
uses: gerred/actions/current-time@master
id: current-time
# timestampのフォーマットを整形する
- name: Run string replace
uses: frabert/replace-string-action@master
id: format-time
with:
pattern: '[:\.]+'
string: "${{ steps.current-time.outputs.time }}"
replace-with: "-"
flags: "g"
# ElasticBeansTalkへのデプロイ
- name: Deploy to ElasticBeansTalk
uses: einaregilsson/beanstalk-deploy@v16
with:
# Secretsで登録したキーを設定
aws_access_key: ${{ secrets.CICD_DEVELOP_AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.CICD_DEVELOP_AWS_SECRET_ACCESS_KEY }}
# ElasticBeanstalkのアプリケーション名
application_name: your_application_name
# ElasticBeanstalkの環境名
environment_name: your_environment_name
# timestamp付きのversionでデプロイする
version_label: "batch-ver-${{ steps.format-time.outputs.replaced }}"
# ElasticBeanstalkのリージョン
region: us-east-2
# デプロイ資材
deployment_package: ./build/libs/backend-base-0.0.1-SNAPSHOT.jar
デプロイ結果
ElasticBeanstalk上でtimestampのversionでデプロイされたことが確認できます。
関連
github ActionsとAWS S3で自動デプロイ環境を作る
コメントを書く