목차
AWS 준비
2024.03.08 - [프로그래밍/SpringBoot] - Github Actions + AWS CI/CD (1)
Github Actions + AWS CI/CD (1)
Github Actions를 사용해서 지속적 통합(CI)과 배포(CD)에 대한 내용 정리 특이점이 없다면 글보다는 이미지로... AWS IAM 사용자 생성 AWS 리소스에 대한 엑세스를 위한 보안 자격 증명을 관리하는 데 사
story-to-me.tistory.com
스프링부트 프로젝트 생성 후 CI 테스트
2024.03.08 - [프로그래밍/SpringBoot] - Github Actions + AWS CI/CD (2)
Github Actions + AWS CI/CD (2)
이전 글에서 AWS 준비를 완료하고 인텔리제이와 Github에서 진행하는 내용 정리 2024.03.08 - [프로그래밍/SpringBoot] - Github Actions + AWS CI/CD (1) Github Actions + AWS CI/CD (1) Github Actions를 사용해서 지속적 통합
story-to-me.tistory.com
배포를 시작한다
Github Secrets and variables
이전 AWS에서 발급받은 엑세스 키를 등록한다
다운로드한 csv 파일 중에 _credentials.csv 파일이 아닌 _accessKeys.csv 파일이다.
AWS_ACCESS_KEY_ID 에는 csv 파일의 Access key ID
AWS_SECRET_ACCESS_KEY 에는 csv 파일의 Secret access key 를 넣어준다.
CICD.yml 내용 추가
지속적인 배포를 위한 스크립트를 추가한다.
CICD.yml
name: Java+SpringBoot CI/CD with Gradle # 이 워크플로우의 이름
on:
push: # 코드가 push될 때
branches: ["master"] # master 브랜치에 대해서만 작동
pull_request: # Pull Request가 열렸을 때
branches: ["master"] # master 브랜치에 대해서만 작동
env: # 환경 변수 설정
AWS_REGION: ap-northeast-2 # AWS 리전
AWS_S3_BUCKET: portfolio-notice # AWS S3 버킷 이름
AWS_CODE_DEPLOY_APPLICATION: portfolio-notice # AWS CodeDeploy 어플리케이션 이름
AWS_CODE_DEPLOY_GROUP: portfolio-notice-group # AWS CodeDeploy 배포 그룹 이름
permissions: # 권한 설정
contents: read # 컨텐츠에 대한 읽기 권한 설정
jobs: # 작업 정의
build: # 빌드 작업
runs-on: ubuntu-latest # GitHub Actions가 실행될 환경 지정
steps: # 작업 단계
- uses: actions/checkout@v3 # 소스 코드를 체크아웃하는 단계
- name: Set up JDK 17 # JDK 17 설정
uses: actions/setup-java@v3 # Java 환경 설정 액션 사용
with:
java-version: '17' # 사용할 Java 버전
distribution: 'corretto' # Corretto 배포판 사용
- name: Add permission # 권한 추가 단계
run: chmod +x gradlew # gradlew 파일에 실행 권한 추가
- name: Build with Gradle # Gradle로 빌드하는 단계
run: ./gradlew clean --stacktrace --info build # Gradle을 사용하여 애플리케이션을 빌드하는 스크립트 실행
shell: bash # 실행할 셸 지정
- name: Make Directory # [추가] 디렉토리 생성 단계
run: mkdir -p deploy # deploy 디렉토리 생성
- name: Copy Jar # [추가] Jar 파일 복사 단계
run: cp ./build/libs/*.jar ./deploy # 빌드된 Jar 파일을 deploy 디렉토리로 복사
- name: Copy appspec.yml # [추가] appspec.yml 파일 복사 단계
run: cp appspec.yml ./deploy # appspec.yml 파일을 deploy 디렉토리로 복사
- name: Copy script # [추가] 스크립트 파일 복사 단계
run: cp ./scripts/*.sh ./deploy # 스크립트 파일을 deploy 디렉토리로 복사
- name: Make zip file # [추가] Zip 파일 생성 단계
run: zip -r ./portfolio-notice.zip ./deploy # deploy 디렉토리를 포함하여 Zip 파일 생성
shell: bash # 실행할 셸 지정
- name: Configure AWS credentials # AWS 자격 증명 구성 단계
uses: aws-actions/configure-aws-credentials@v1 # AWS 자격 증명 액션 사용
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} # AWS 액세스 키 ID
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # AWS 비밀 액세스 키
aws-region: ${{ env.AWS_REGION }} # AWS 리전
- name: AWS S3 Upload # [추가] AWS S3 업로드 단계
run: aws deploy push --application-name ${{ env.AWS_CODE_DEPLOY_APPLICATION }} --ignore-hidden-files --s3-location s3://$AWS_S3_BUCKET/portfolio-notice.zip --source . # AWS S3로 배포 파일 업로드
- name: AWS EC2 Deploy # [추가] AWS EC2 배포 단계
run: aws deploy create-deployment --application-name ${{ env.AWS_CODE_DEPLOY_APPLICATION }} --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name ${{ env.AWS_CODE_DEPLOY_GROUP }} --s3-location bucket=$AWS_S3_BUCKET,key=portfolio-notice.zip,bundleType=zip # AWS CodeDeploy를 사용하여 EC2에 배포
테스트 컨트롤러 추가
배포가 성공하면 테스트할 url 추가
@RequestMapping("/api")
@RestController
public class MemberRestController {
@GetMapping("/welcome")
public String welcome() {
return "Welcome~!";
}
}
여기까지 준비가 되면 저장소에 push
배포 상태 확인
AWS S3 업로드 확인
AWS CodeDeploy 배포 확인
포스트맨에서 접속
EC2 인스턴스의 퍼블릭 IPv4 주소를 사용한다
IP주소:8080/api/welcome
여기까지 CI/CD 파이프라인을 구축했다.
테스트만 완료한 상태이고 민감정보인 데이터베이스의 url, username, password 등 application.yml 파일 처리에 대한 내용이 남아있다.
'프로그래밍 > SpringBoot' 카테고리의 다른 글
[AWS EC2] MySQL 설치 (0) | 2024.06.18 |
---|---|
Github Actions + AWS CI/CD (2) (0) | 2024.03.08 |
Github Actions + AWS CI/CD (1) (1) | 2024.03.08 |