Github Actions로 간단하게 CI 구축하고 Docker로 배포하기

728x90

깃허브 액션으로 CI 자동화하기 + 도커로 배포 알아보기

일반적인 CI/CD의 절차로 아래 방식대로 진행할 예정이다.

 

CI 절차 : Develope -> Test -> Build -> Build Docker Image -> Push 

CD 절차 : Pull -> Run

파란색 영역 : Docker 관련 영역

 

CI/CD 전략

아래 예시에는 깃허브 액션젠킨스가 있지만 이번에는 깃허브 액션을 이용하여 CI/CD 전략을 구성하려고 한다.

1. Develope: Local 에서 수행

2. Test : Local 또는 Gihub Actions / Jenkins 에서 수행

3. Build : Local 또는 Gihub Actions / Jenkins 에서 수행

4. Build Docker Image : Local 또는 Gihub Actions / Jenkins 에서 수행

5. Push Docker Image to Registry : Local 또는 Gihub Actions / Jenkins 에서 수행

6. Pull Docker Image from Registry : Local 또는 Gihub Actions / Jenkins 에서 수행

7. Run Docker Image : Server 에서 수행

 

Github Actions란?

 

Github Actions 동작 원리

Github Actions는 프로젝트 내에서 자동화된 작업을 실행할 수 있게 해주는 CI/CD 도구이다. 이 도구는 커밋, 풀 리퀘스트, 이슈 생성 등 다양한 이벤트를 기준으로 동작하여 개발자가 설정한 자동화

fabric0de.tistory.com

Github Actions는 Github에서 제공하는 CI/CD 도구이다. 코드 변경이 있을 때마다 특정 작업(workflow)을 자동으로 실행할 수 있다. 이 작업들은 YAML 파일로 정의되며 코드가 푸시될 때마다 설정된 규칙에 따라 빌드, 테스트, 배포 등의 작업을 처리한다.

 

Github Actions의 주요 특징

  • 자동화된 빌드 및 테스트: 코드가 푸시될 때마다 자동으로 테스트와 빌드를 수행한다.
  • 멀티 플랫폼 지원: 리눅스, 윈도우, macOS 등 다양한 환경에서 실행 가능하다.
  • 유연한 설정: 조건에 따라 다양한 작업을 설정하고 실행할 수 있다.

 

CI 준비하기 (배포 코드 작성 및 깃허브 업로드)

아래 깃허브 링크를 참고하면 이번 포스팅에 작성된 코드를 볼 수 있다.

 

GitHub - fabric0de/github_action_tur

Contribute to fabric0de/github_action_tur development by creating an account on GitHub.

github.com

 

CI의 첫번째 절차로는 우선 Develope이 되어야 하기 때문에 개발한 코드나 새로운 프로젝트를 새로 생성하여 프로젝트를 준비한다.

준비가 되었다면 프로젝트에 .github/workflows/hello_github_action.yml 을 생성한다. ("hello_github_action.yml " 파일명 외에는 변경되면 안된다.) 

추가로 workflows 안에는 n개의 workflow가 들어갈 수 있다.

 

hello_github_action.yml 예시 코드

name: Java CI with Gradle

# master 브랜치에 push, PR 이벤트 발생시 동작.
on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      # (1) 프로그램 빌드 (Java 빌드) 1) Java 및 Docker 빌드를 위한 환경 설정
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: "17"
          distribution: "temurin"

      # (1) 프로그램 빌드 (Java 빌드) 2) Java 빌드를 위한 ./gradlew 파일 권한 변경
      - name: Run chmod to make gradlew executable
        run: chmod +x ./gradlew

      # (1) 프로그램 빌드 (Java 빌드) 3) Java 빌드
      - name: Spring Boot Build
        run: ./gradlew clean build

      # (2) Docker 이미지 빌드 1) DockerFile 을 기반으로 Docker Image 빌드
      - name: docker image build
        run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-demo .

      # (2) Docker 이미지 빌드 2) Docker Hub 에 Login
      - name: docker login
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PW }}

      # (2) Docker 이미지 빌드 3) Docker Hub 에 빌드된 이미지 push
      - name: docker Hub push
        run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-demo

그 이후 Dockerfile을 같이 깃허브에 올려야 GithubAction 동작 스크립트에서 Docker를 통한 이미지 빌드가 가능해진다. 

Dockerfile 예시 코드

FROM amazoncorretto:17-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

 

여기까지 완료되었다면 Dockerfilehello_github_action.yml 파일을 깃허브에 같이 푸쉬해준다.

 

여기까지 완료 했음에도 오류가 깃허브 액션에 오류가 발생할텐데 그 이유는

${{ secrets.DOCKERHUB_USERNAME}} 과

${{ secrets.DOCKERHUB_PW}} 에 값이 채워지지 않아서 그렇다. 

 

Docker 회원가입 및 인증 키 발급 받기

위에 값들을 채워주기 위해서 먼저 도커 허브에 접속하여 회원가입을 해야한다.

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

회원가입이 완료되었다면 우측 상단에 프로필을 누른다. 그 다음 Account settings를 클릭한다.

Security 항목에 "Personal access tokens"를 클릭한다. 페이지가 전환되면 "Generate new token"버튼을 클릭한다.

아래 처럼 설정해주고 Generate를 누르면 키 생성이 완료될 것이다. 2번에 모자이크 된 부분이 토큰으로 Copy를 진행하면 된다.

그 이후에는 깃허브에 이 키를 등록해주어야 한다.

 

깃허브 액션에 secrets key 등록하기

깃허브 액션에 secrets key를 등록하기 위해서는 생성한 프로젝트의 Settings로 이동하고  Security -> Secrets and variables -> Actions 에 들어간다.

 

그 이후 "New repository secret" 을 눌러 Name을 왼쪽과 같이 지정하고 PW에는 아까 COPY한 값을 USERNAME에는 DOCKER HUB 닉네임을 넣어주면 된다.

그 이후 Actions 탭에 들어가 다시 실행시기면 정상적으로 작동하는 것을 확인할 수 있다.

혹시 아직도 오류가 난다면 차근차근 다시 해보는 것을 추천한다.

 

여기까지 완료되었다면 Github Action을 통하여 Docker 빌드 및 CI 자동화 작업이 완료된다.

 

참고문헌

 

Get started

Get started with Docker

docs.docker.com

 

GitHub Actions 설명서 - GitHub Docs

GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완

docs.github.com

 

728x90

'DevOps' 카테고리의 다른 글

클라우드 컴퓨팅의 개념과 활용 예  (3) 2024.11.24
Github Actions 동작 원리  (0) 2024.10.18
CI/CD 란 무엇인가?  (2) 2024.10.15
Docker의 개념  (3) 2024.10.15