원래 개발 완료 후, 수동으로 서버에 배포하였다. 다음 흐름으로 진행하였다.
아래 명령어를 통해 현재 실행중인 java process를 종료합니다.
ps aux | grep java
로 현재 실행중인 pid를 얻어온 다음
kill -9 ${pid}
로 해당 프로세스를 종료합니다.
그리고 현재 빌드된 결과물을 제거하기 위해 gradlew clean
을 실행시켜 빌드 디렉토리를 제거합니다.
gradlew bootJar
를 통해 빌드된 jar 파일을 생성한 후,
nohup java -jar -Dspring.profiles.active=dev -Djasypt.encryptor.password=fKBrCp7zwFaiHM73HE2wbbE0k0VE41U4 ./build/libs/mynail-backend-0.0.2.jar kr.mynail.backend.MynailBackendApplication &
명령어로 백그라운드에서 spring 을 실행시키면 됩니다.
모니터링은 tail -f nohup.out
을 통해 nohup.out 이라는 파일에 생성되는 log를 보실 수 있습니다.
이렇게 수동으로 배포를 하다보면, 클라이언트가 바로바로 완성된 API를 호출할 수 없다.
그래서 자동 배포가 가능한 Github Action을 사용해 CI/CD를 구축하고자 한다.
Step 1. Java with Gradle 선택
Step 2. 코드 수정
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
# uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
# with:
# arguments: build
run : ./gradlew clean build --exclude-task test
처음 코드 그대로 하면 빌드가 실패한다. 이유는 test 때문이다.
--exclude-task test
코드를 뒤에 붙여줘서 빌드시 test를 제외하도록 하였다.
CI 성공 !
Step2. EC2
태그를 생성하고, IAM에서 역할을 추가한다.
EC2를 서비스로 추가하고
이거를 선택한다. S3가 접근할 수 있도록 하는 것이다.
그런 다음에, EC2로 들어가서 인스턴스와 연결을 한다.
이렇게 하면 된다.
Step 3. Deploy 설치
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html
따라하면 된다.
ssh에 접속이 계속 안되서 뭐가 이상한지 삽질했는데.. 여기가 원래 개발하던 곳이 아니라 ip 주소가 달라서 접속이 거부가 되었던거다..ㅋ
암튼 접속 한 다음, 다시 AWS로 가서 S3 버킷을 생성해 준다.
Step 4. Code Deploy 생성 후 연결
IAM에 들어가 code deploy 역할을 생성한 후,
Code Deploy에 들어가 배포를 위한 애플리케이션을 생성한다.
Step 5. IAM 연결
암튼 하다가
deploy.yml에 한 단계를 더 추가해줬다.
- name: Run chmod to make gradlew executable
run: chmod +x ./gradlew
성공!
세팅 완료~
참고
https://bcp0109.tistory.com/363
https://tilnote.io/books/63840068bd82f57d88ab204d/63cb8765beb8f99839a04c91