반응형
(이전 글)
Github Actions
https://gukjan9.tistory.com/71
Github Secrets 구성
Github Actions 를 사용하여 EC2 에 프로젝트를 배포하기에 앞서
EC2 에 접속하기 위해 필요한 접속 ip 와 pem key 등이 있는데 이를 직접적으로 코드에 노출을 하면 보안상 위험이 있으므로
Repository 에 Settings > Secrets and variables 에서 secrets 를 생성해준다.
• SERVER_IP : EC2 퍼블릭 IP
• SSH_USER : EC2 접속자명
• SSH_PRIVATE_KEY : .pem 파일 내용
.pem 파일은 VSCode 같은 프로그램으로 열어서
-----BEGIN RSA PRIVATE KEY-----
.
.
.
-----END RSA PRIVATE KEY-----
전체 내용을 복사 / 붙여넣기 해준다.
Workflow 작성
프로젝트 폴더 내에 .github/workflows/gradle.yml 파일을 프로젝트에 맞게 작성해준다.
# Workflow 이름
name: Java CI with Gradle
# Trigger 설정
# master 브랜치에 push 또는 pull_request 가 감지되었을 때 실행
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# Workflow 가 Repository 에 대한 권한 설정
permissions:
contents: read
# 실행될 작업 정의
jobs:
# 빌드
# 작업 환경
build:
runs-on: ubuntu-latest
# Github Checkout action 사용
steps:
- uses: actions/checkout@v3
# 프로젝트 JDK 설정
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# gradle wrapper 파일에 실행 권한을 부여
# gradle wrapper : 개발자가 특정 버전의 Gradle을 미리 설치하지 않고도 Gradle 빌드를 실행할 수 있게 해주는 편리한 도구
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# Github gradle build action 으로 프로젝트 빌드
- name: Build with Gradle
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
with:
arguments: build
# 빌드 후 생긴 JAR 파일을 Github Artifact 로 업로드
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: testServer
path: build/libs/"project_name"-0.0.1-SNAPSHOT.jar
# 배포
deploy:
needs: build
runs-on: ubuntu-latest
# 업로드한 Artifact 다운로드
steps:
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: testServer
path: build/libs/
# EC2 에 배포
- name: Deploy to EC2
run: |
echo "${{ secrets.SSH_PRIVATE_KEY }}" > mykey.pem
chmod 600 mykey.pem
scp -i mykey.pem -o StrictHostKeyChecking=no build/libs/"project_name"-0.0.1-SNAPSHOT.jar ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }}:/home/${{ secrets.SSH_USER }}/testServer.jar
ssh -i mykey.pem -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }} "pgrep java | xargs kill -9; nohup java -jar /home/${{ secrets.SSH_USER }}/testServer.jar > app.log 2>&1 &"
이렇게 설정을 해주고 나면
master 브랜치에 변경 사항이 있을 때 마다 프로젝트를 자동으로 빌드 -> 배포해주며
Github Actions 탭에서 자세한 현황을 확인할 수 있다.
Troubleshooting
• contextLoads() failed
https://gukjan9.tistory.com/73
참고
https://velog.io/@songyuheon/GitHub-Action-EC2-%EB%B0%B0%ED%8F%AC
https://blog.manishk.dev/create-a-ci-cd-pipeline-using-github-actions/
반응형
'개발 ━━━━━ > Dev' 카테고리의 다른 글
[Docker] Docker Volume 을 이용한 MySQL 데이터 백업 (0) | 2024.01.11 |
---|---|
[Docker] MySQL 컨테이너를 이미지화 하여 Docker Hub 에 push 하기 (0) | 2023.12.04 |
Github Actions (0) | 2023.09.25 |
WebSocket 웹소켓 (1) | 2023.09.21 |
[SQL] SQL 문법 - ➁ (0) | 2023.08.05 |