깃허브 액션 적용 배경
해당 글 에서는, 현재 개발 트렌드가 관리 주체가 DB에서 코드(객체)로 변하고 있다는 것을 통해서 코드 개발 및 유지보수의 용이성을 높일 수 있다고 설명합니다. 현재 회사에서 사용하는 JPA도,쿼리를 객체 지향적으로 작성할 수 있도록 도와 주는 도구다 보니, 이를 더 잘 활용하기 위해서는 CI&CD 구축이 필요하다고 생각하였습니다.
CI & CD
CI (Continuous Integration - 지속적 통합)
코드 버전 관리를 하는 VCS 시스템(Git, SVN ...)에 푸시가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정
CD (Continuous Deployment - 지속적 배포)
빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정
일반적으로 CI만 구축되어 있지는 않고, CD도 함께 구축된 경우가 대부분
Github Actions란?
Github에서 제공하는 워크플로우(workflow)를 자동화하도록 도와주는 도구이다.
테스트, 빌드, 배포 등 다양한 작업들을 자동화하여 처리한다.
🤑 요금과 제한
- public 저장소의 경우 무료로 사용 가능하며,
- private 저장소는 월마다 제공되는 무료 사용량 초과 시에 요금이 부과된다.
- 무료 계정 기준 500MB의 스토리지와 월마다 2,000분의 실행시간이 제공됨
- 현재 프로젝트 기준으로, 한번 빌드시, 4~5분 가량 소요
→ 한달에 400 ~ 500번 빌드 가능
- 현재 서버 환경 상, CI는 가능하나, CD는 불가능한 상태
→ gitHub Action서버에서 빌드 후, 서버에 배포 시, 매번 빌드 마다 gitHubAction서버의 IP주소가 변하기 때문에, 서버의 방화벽 인바운드 규칙을 가변적으로 설정 할 수 없어서, CD(배포 자동화)는 불가능하다고 판단 하였습니다.
1. 스크립트 작성
{프로젝트폴더}/github/workflows/github-actions.yml
# github repository actions 페이지에 나타날 이름
name: gitHub Action CI
# event trigger
# develop 브랜치에 push 혹은 pull_request 되었을 때 실행
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
permissions:
contents: read
jobs:
CI-CD:
runs-on: ubuntu-latest
steps:
# JDK setting - github actions에서 사용할 JDK 설정 (프로젝트나 AWS의 java 버전과 달라도 무방)
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# gradle caching -캐싱을 통한 빌드 시간 향상
- name: Gradle Caching
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew bootJar
# docker build & push - 도커 로그인 후 빌드 및 푸쉬
- name: Docker build & push to develop
run: |
docker logout
docker login {{ secrets.DOCKER_REGISTRY_URL }} -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t {{ secrets.DOCKER_REGISTRY_URL }} .
docker push {{ secrets.DOCKER_REGISTRY_URL }}
# ## deploy to develop # 현재 서버 환경상, CD작업은 불가.
# - name: Deploy to develop
# uses: appleboy/ssh-action@v1.0.3
# with:
# host: ${{ secrets.SERVER_HOST }}
# username: ${{ secrets.SERVER_USERNAME }}
# password: ${{ secrets.SERVER_PASSWORD }}
# port: 22
# debug: true
# script: |
# cd {도커-compcompose 경로}
# docker-compose pull
# docker-compose up -d
2. 액션 시크릿 변수 등록
깃허브 리포지토리 - 설정 화면 에서 다음과 같이 변수를 등록합니다.
→ 해당 변수는 한번 등록 후 다시 조회가 불가능 합니다. (수정 및 삭제만 가능)
- 도커 유저 네임(
DOCKER_USERNAME
) : 도커 빌드시 사용한 도커 계정 - 도커 비밀번호(
DOCKER_PASSWORD
) : 도커 빌드시 사용한 도커 비밀번호 - (CD 적용시)
SERVER_HOST
,SERVER_USERNAME
,SERVER_PASSWORD
도 등록
해당 변수는 스크립트에서 환경변수와 같이 사용됩니다.
3. 동작확인
위의 스크립트에서 설정 한 대로 develop 브랜치에 변경점이 감지 되면 자동으로 도커 빌드를 실행합니다.
- 진행 상황은 해당 리포지토리의 액션 탭에서 확인 할 수 있습니다.
- 해당 깃허브 액션의 빌드 작업이 끝나면, 서버에 접속해서 docker pull 및 up 작업만 하면 배포가 완료 됩니다.
반응형