Skip to content

Merge pull request #12 from AcneLog/hotfix #20

Merge pull request #12 from AcneLog/hotfix

Merge pull request #12 from AcneLog/hotfix #20

Workflow file for this run

name: CD with Gradle
on:
push:
branches:
- main
permissions: write-all
env:
AWS_REGION: ${{ secrets.AWS_REGION }}
ECR_REPOSITORY: ${{ secrets.AWS_ECR_REPOSITORY }}
GITHUB_SHA: ${{ github.sha }}
jobs:
build:
# ubuntu 버전 지정
runs-on: ubuntu-22.04
steps:
# Checkout 진행
- uses: actions/checkout@v3
# JDK 11 설치
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'corretto'
# Gradle 캐싱
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Gradle 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# api yml 반영
- name: Make application.yml
run: |
cd ./api-module/src/main/resources
touch ./application.yml
echo "${{ secrets.APPLICATION_SECRET }}" > ./application.yml
shell: bash
# common yml 반영
- name: Make application-common.yml
run: |
cd ./common-module/src/main/resources
touch ./application-common.yml
echo "${{ secrets.APPLICATION_COMMON }}" > ./application-common.yml
shell: bash
# domain yml 반영
- name: Make application-domain.yml
run: |
cd ./domain-module/src/main/resources
touch ./application-domain.yml
echo "${{ secrets.APPLICATION_DOMAIN }}" > ./application-domain.yml
shell: bash
# infra yml 반영
- name: Make application-infra.yml
run: |
cd ./infra-module/src/main/resources
touch ./application-infra.yml
echo "${{ secrets.APPLICATION_INFRA }}" > ./application-infra.yml
shell: bash
# Gradle clean bootJar
- name: Build with Gradle
run: ./gradlew clean api-module:bootJar
# Configure AWS Credentials by using IAM inform
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5.0.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
# Login to ECR
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
# Docker Image Push to ECR and Run container with Image pull from ECR
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ env.ECR_REPOSITORY }}
IMAGE_TAG: ${{ env.GITHUB_SHA }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
# Docker Container Deploy to EC2
- name: Docker Compose
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_EC2_SERVER_IP }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
aws ecr get-login-password --region ${{ env.AWS_REGION }} | docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}
docker pull ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.GITHUB_SHA }}
docker tag ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.GITHUB_SHA }} ${{ secrets.DOCKER_IMAGE_NAME }}
docker stop acnelog-server || true
docker rm acnelog-server || true
docker run -d --name acnelog-server -p 8080:8080 ${{ secrets.DOCKER_IMAGE_NAME }}