[Github Actions] 간단하게 CI/CD 구현해보기 - 1

Suntory·2022년 7월 9일
8

CI/CD

목록 보기
1/2

개요

코드스쿼드의 마지막 프로젝트의 배포 스펙은 다음과 같았습니다.

이 중 Github Actions를 이용한 배포는 번거롭긴 하지만 설정하면 자동 배포까지 가능한 매우 편리한 기능이라서 기억을 저장하는 용도로 글을 적어봅니다.

Github Actions란?

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 프로젝트를 도커를 통해 배포하는 스크립트로 만들어 보겠습니다.

CI-CD 구현 (1) - Build

먼저 현재 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하는 과정까지 해보겠습니다!

profile
천천히, 하지만 꾸준히 그리고 열심히

1개의 댓글

comment-user-thumbnail
2022년 7월 11일

레전드! 정리해주셔서 감사합니다!!

답글 달기