Overview
start.sh 와 stop.sh 를 설정을 하시면 war 파일 자동배포도 가능할 겁니다.
여기서는 build 과정만 설명되어집니다.
글은 다음과 같은 순서로 진행됩니다.
- 폴더 구조
- appspec.yml 파일 작성
- workflow (git actions) 파일 작성
- start.sh , stop.sh 파일 작성
- Springboot build.gradle 작성
1. 폴더 전체 구조
2. appspec.yml 작성
바로 ROOT.war 파일만 들어가도록 설정했습니다.
version: 0.0
os: linux
files:
- source: ./build/libs/ROOT.war # ROOT.war 파일만 옮기기
destination: /home/ubuntu/test-backend # 위의 파일을 둘 장소
overwrite: yes
permissions:
- object: /home/ubuntu/test-backend/ # 파일 둔 장소 권한 해체
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
BeforeInstall:
- location: scripts/stop.sh
timeout: 60
runas: ubuntu
ApplicationStart:
- location: scripts/start.sh
timeout: 60
runas: ubuntu
3. workflow git actions 작성
env 설정으로 자신의 Springboot 버젼도 설정이 가능합니다.
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# 리전, 버킷 이름, CodeDeploy 앱 이름, CodeDeploy 배포 그룹 이름
env:
AWS_REGION: ap-northeast-2
S3_BUCKET_NAME: my-github-actions-s2-bucket
CODE_DEPLOY_APPLICATION_NAME: my-codedeploy-app
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: my-codedeploy-deployment-group
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
# JDK 설정
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
# Gradle 의존성을 캐시
- name: Cache Gradle dependencies
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}-
# gradlew permission
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# Gradle build
- name: Build with Gradle
run: |
./gradlew build
env:
SPRING_BOOT_VERSION: 2.7.17
# Gradle build : 위의 .gradlew build 가 안될 시 사용
# - name: Build with Gradle
# run: |
# gradle build
# env:
# SPRING_BOOT_VERSION: 2.7.17
# (4) AWS 인증 (IAM 사용자 Access Key, Secret Key 활용)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
# (5) 빌드 결과물을 S3 버킷에 업로드
- name: Upload to AWS S3
run: |
aws deploy push \
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
--ignore-hidden-files \
--s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \
--source .
# (6) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
- name: Deploy to AWS EC2 from S3
run: |
aws deploy create-deployment \
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
--s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip
4. start.sh 와 stop.sh 작성
사실 이 부분부터는 맘대로이긴 한데.. 따라서 그냥 echo만 붙이죵
여러가지 추가 코드를 붙여서 자동 배포등을 할 수 있습니다.
start.sh
#!/bin/bash
# 이 스크립트는 애플리케이션을 시작하는 데 사용됩니다.
# 필요한 시작 작업을 여기에 추가하세요.
# exec > >(tee /var/log/codedeploy_start.log|logger -t codedeploy_start -s 2>/dev/console) 2>&1
echo "애플리케이션을 시작합니다."
# 여기에 애플리케이션 시작 명령어 또는 작업을 추가하세요.
stop.sh
#!/bin/bash
# 이 스크립트는 애플리케이션을 중지하는 데 사용됩니다.
# 필요한 중지 작업을 여기에 추가하세요.
# exec > >(tee /var/log/codedeploy_stop.log|logger -t codedeploy_stop -s 2>/dev/console) 2>&1
echo "애플리케이션을 중지합니다."
# 여기에 애플리케이션 중지 명령어 또는 작업을 추가하세요.
5. Springboot build.gradle 작성
파일명 ROOT로 war 파일로 해볼게요
// ...
repositories {
mavenCentral()
}
// WAR 파일로 빌드 설정 추가
war {
archiveFileName = 'ROOT.war' // 원하는 WAR 파일 이름으로 변경
// 추가적인 설정이 필요한 경우 여기에 추가
}
// ...
6. 에러
1. 프로젝트명Tests > contextLoads() FAILED
> Task :test
PlayhostProjectApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98
Caused by: org.springframework.beans.factory.BeanCreationException at AutowiredAnnotationBeanPostProcessor.java:414
Caused by: java.lang.IllegalArgumentException at PropertyPlaceholderHelper.java:180
1 test completed, 1 failed
> Task :test FAILED
해결 : test 파일의 bean 등록이 안된다라는 것이니 @Test 를 빼는것도 하나의 방법인것 같다.
'Git' 카테고리의 다른 글
Git Book - Git을 배울 수 있는 사이트 (0) | 2024.02.01 |
---|---|
Git - Git Alias (0) | 2024.02.01 |
git actions - build.gradle 시 주의점 (1) | 2023.12.29 |
aws , git actions - react build 파일 옮겨보기 (CD) (1) | 2023.12.28 |
aws EC2 , S3 , codedeploy , git actions - 간단하게 txt파일만 옮겨보기 (1) | 2023.12.27 |