Github Action?
Github에 공식적으로 내장된 기능으로
빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼
[ public repository 면 제한 없이 사용 가능 ]
** CI/CD란?
지속적 통합(Continuous Integration) 및 지속적 제공/배포(Continuous Delivery/Deployment)
수동배포만 해오던 나에게는 아주 기적같은 기능이다
구축 과정
1. 스펙
AWS EC2
GitHub Actions
Docker
2. 배포 전 설정사항
루트 밑에 Dockerfile
생성
FROM openjdk:{자신에게 맞는 JDK 버전}
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
3. 구축 코드
Actions
를 누르고 Gradle
템플릿 선택 후 /.github/workflows/main.yml
추가
name: CI/CD using GitHub Actions & Docker
on:
push:
branches: [ "master" ]
jobs:
CI-CD:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'
## git ignore에 등록된 application.properties 파일 생성해주기
- name: Create directory and file if not exist
run: |
mkdir -p ./src/main/resources
echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.properties
## 스프링 프로젝트 jar 파일 빌드
- name: Set executable permission
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew bootJar
## Docker Hub에 이미지 push 하기
- name: Docker build & push to prod
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/keep:0.0.1-SNAPSHOT .
docker push ${{ secrets.DOCKER_USERNAME }}/keep:0.0.1-SNAPSHOT
## Docker Hub에 Push한 이미지를 우분투 서버에 받아와서 run
- name: Deploy to prod
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST_PROD }}
username: ubuntu
key: ${{ secrets.PRIVATE_KEY }}
envs: GITHUB_SHA
script: |
docker stop keep
docker rm keep
docker rmi ${{ secrets.DOCKER_USERNAME }}/keep:0.0.1-SNAPSHOT
docker pull ${{ secrets.DOCKER_USERNAME }}/keep:0.0.1-SNAPSHOT
docker run -d -p 8080:8080 --name keep ${{ secrets.DOCKER_USERNAME }}/keep:0.0.1-SNAPSHOT
4. Action Secrets(환경 변수) 생성
Settings - Security - Actions
위치에서DOCKER_USERNAME
DOCKER_PASSWORD
에는 각각 docker username과 password,HOST_PROD
에는 EC2 서버 퍼블릭 주소를 넣어주었다.application.properties
또한 APPLICATION
을 만들어 환경변수로 사용할 것이다.
5. CI/CD
이제 master
에 push
만 하면 Github Action이 자동으로 CI/CD를 진행 해준다!
'Dev' 카테고리의 다른 글
QueryDSL이란? + 랜덤 레코드 가져오기 (feat. MySQL) (0) | 2024.02.01 |
---|