코드스쿼드의 마지막 프로젝트의 배포 스펙은 다음과 같았습니다.
이 중 Github Actions를 이용한 배포
는 번거롭긴 하지만 설정하면 자동 배포까지 가능한 매우 편리한 기능이라서 기억을 저장하는 용도로 글을 적어봅니다.
간단히 말하면, yaml파일을 통해 workflow를 정의하여 특정 조건마다 실행해주는 기능입니다. 주로 CI/CD를 위해 사용되기 때문에 배포용 branch에 push되거나, merge되는 경우에 작동하도록 만들 수 있습니다.
그리고 workflow에 job을 정의하여 특정 action을 하도록 정의할 수 있습니다. 이 job들은 독립적인 컨테이너 상에서 실행되게 됩니다.
필요에 따라 이 컨테이너들의 실행환경을 정해줄 수 있습니다. (Linux, ubuntu 등)
그럼 간단하게 이용하는 예시를 살펴보겠습니다. 경로는 프로젝트 루트 폴더의 .github/workflows/*.yml
에 작성하면 됩니다.
기본적인 workflow의 예시는 레포지토리에서 Actions
에 가면 아래와 같은 예시가 제공됩니다.
구체적인 action을 처음부터 세팅하지 않고, 틀만 참고하려면 set up a workflow yourself
를 통해 생성합니다.
기본적으로 주석을 통해 각 line의 설명이 나와있습니다. 이걸 정돈해서 Java 기반의 Springboot 프로젝트를 도커를 통해 배포하는 스크립트로 만들어 보겠습니다.
먼저 현재 push된 배포용 소스코드를 빌드하여 jar 파일로 만드는 과정부터 해보겠습니다.
name: CI
on:
push:
branches: [ "deploy" ]
pull_request:
branches: [ "develop-BE" ]
먼저 workflow의 실행 조건에 대해서 정의합니다. 해당 프로젝트에서는, deploy
branch에 push되거나, develop-BE
브랜치에 PR이 발생하면 실행되도록 하였습니다. 주로 즉시 배포가 필요한 경우에 deploy
에 push를 하였으며, develop-BE
브랜치는 upstream
에 PR을 보내기 위해 각 feature branch를 PR할 때마다 배포가 되도록 하였습니다.
이제 job을 만들어볼 차례입니다. 빌드를 하기 위해서는 (1) JDK 설치, (2) gradlew 실행 권한 부여, (3) gradle로 빌드의 과정을 거칩니다.
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: "./be"
steps:
- uses: actions/checkout@v3
- name: Setup Java JDK
uses: actions/setup-java@v3.4.0
with:
distribution: 'adopt-hotspot'
java-version: '11'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
먼저 build의 runs-on에서 ubuntu 이미지를 통해 실행하도록 하였습니다. 그리고 be, fe의 소스가 디렉토리로 구분되어 있기 때문에 default directory를 ./be
로 설정해준 코드가 추가됐습니다.
이제 본격적으로 steps를 보면, 맨 처음에 actions/checkout@v3
가 실행됩니다. 이는 해당 레포지토리의 소스 코드를 가져오는 과정이라고 보시면 됩니다.
그 이후 (1) JDK를 설치하게 됩니다. 이렇게 자주 사용되는 것들은 workflow를 만드는 화면에서 검색하여 찾을 수 있습니다. 저는 actions/setup-java@v3.4.0
를 통해, java 11을 설치하였습니다.
다음으로는 (2) 빌드를 위해 gradlew에 실행권한을 부여합니다. 쉘에서 명령어를 실행할 때는 run:
속성을 통해서 명령어를 적어주면 단일 명령어를 실행할 수 있고 run: |
이후 아래에 명령어들을 여러 개 작성하면 여러 명령어를 실행시킬 수 있습니다.
마지막으로 (3)Gradle을 통한 빌드를 실행합니다. build를 통해 빌드하게 되면 테스트 코드 또한 모두 실행되기 때문에 테스트 코드를 적극 활용할 수 있게 됩니다.
이러면 이제 우리 프로젝트가 jar 파일로 만들어지게 됩니다.
다음에는 jar 파일을 통해 docker image로 만들고, dockerhub에 push하는 과정까지 해보겠습니다!
레전드! 정리해주셔서 감사합니다!!