GitHub Actions

📌 GitHub Actions는 GitHub에 내장된 CI/CD 도구로, 소스 코드 저장소 내에서 코드 테스트, 빌드, 배포 등의 작업을 자동화합니다. GitHub Actions는 별도의 CI/CD 서버 구축 없이 GitHub와 쉽게 통합되며, 사용자가 YAML 형식의 워크플로 파일을 통해 간단하게 자동화 작업을 설정할 수 있습니다.

 

주요 특징

  1. GitHub 통합: GitHub와 완벽히 통합되어, 저장소 내 이벤트(push, pull request 등)를 기반으로 자동화 실행.
  2. 서버리스: CI/CD 서버를 별도로 운영할 필요 없이 GitHub에서 바로 실행.
  3. 무료 제공 범위:
    • 스토리지: 500MB
    • 실행 시간: 월 2,000분 (무료 사용자 기준)
  4. YAML 기반 설정:
    • 워크플로는 반드시 .github/workflows 디렉토리에 저장.
    • YAML 파일을 작성해 자동화 작업 정의.

 

GitHub Actions의 CI (Continuous Integration)

개념

  • CI in GitHub Actions:
    • 코드 병합 시 자동 테스트 및 빌드를 실행.
    • 테스트 통과된 코드만 develop, main 브랜치로 병합되도록 설정.
    • 코드 품질 유지 및 안정적인 배포 보장.

활용 예시

  1. develop 브랜치에 병합 시:
    • gradle test 실행.
  2. feature/* 브랜치에 push 시:
    • 테스트 실행 후 알림(Slack, 이메일 등) 전송.

샘플 CI 워크플로

# 워크플로 이름을 설정 (GitHub Actions UI에서 표시됨)
name: CI

# 워크플로가 트리거되는 조건 정의
on:
  push: # push 이벤트 발생 시 실행
    branches: 
      - develop # develop 브랜치에 push되었을 때 실행
      - feature/** # feature 하위 브랜치에 push되었을 때 실행

# 작업(Job) 정의 시작
jobs:
  ci: # Job의 이름 정의
    runs-on: ubuntu-latest # 실행 환경으로 최신 버전의 Ubuntu를 사용

    # Job에서 실행할 작업 단계 정의
    steps:
      # 1. 리포지토리 코드를 체크아웃 (clone)
      - name: Checkout repository # 단계 이름
        uses: actions/checkout@v4 # GitHub Actions의 공식 체크아웃 액션 사용

      # 2. Java 환경 설정
      - name: Setup Java # 단계 이름
        uses: actions/setup-java@v3 # Java 설정을 위한 액션 사용
        with:
          java-version: '17' # Java의 버전을 17로 설정

      # 3. Gradle을 사용해 테스트 실행
      - name: Run Gradle tests # 단계 이름
        run: ./gradlew clean test # Gradle 명령어를 실행하여 테스트 수행

 

GitHub Actions의 CD (Continuous Deployment)

개념

  • CD in GitHub Actions:
    • main 브랜치에 병합된 코드를 자동으로 배포.
    • 배포 작업에 필요한 빌드, 테스트, 배포 프로세스를 YAML로 정의.

활용 예시

  1. main 브랜치에 병합 시:
    • 테스트 실행 후 JAR 파일 생성.
    • 생성된 JAR 파일을 AWS, GCP, Heroku 등으로 배포.

샘플 CD 워크플로

# 워크플로 이름을 설정
name: CD

# 워크플로 트리거 조건 설정
on:
  push: # push 이벤트 발생 시 실행
    branches: [ main ] # main 브랜치에 push되었을 때만 실행

# 작업(Job) 정의 시작
jobs:
  cd: # Job의 이름 정의
    runs-on: ubuntu-latest # 실행 환경으로 최신 버전의 Ubuntu를 사용

    # Job에서 실행할 작업 단계 정의
    steps:
      # 1. 리포지토리 코드 체크아웃
      - name: Checkout repository # 단계 이름
        uses: actions/checkout@v4 # GitHub Actions의 공식 체크아웃 액션 사용

      # 2. Java 환경 설정
      - name: Setup Java # 단계 이름
        uses: actions/setup-java@v3 # Java 설정을 위한 액션 사용
        with:
          java-version: '17' # Java의 버전을 17로 설정

      # 3. Gradle 테스트 실행
      - name: Run Gradle tests # 단계 이름
        run: ./gradlew clean test # Gradle 명령어를 실행하여 테스트 수행

      # 4. Heroku에 배포
      - name: Deploy to Heroku # 단계 이름
        uses: akhileshns/heroku-deploy@v3.12.12 # Heroku 배포를 위한 액션 사용
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}} # Heroku API 키를 GitHub Secrets에서 가져옴
          heroku_app_name: "sampleapp-github-actions" # Heroku 앱 이름 (고유해야 함)
          heroku_email: "user@example.com" # Heroku 계정 이메일

 

GitHub Actions의 장단점

  장점 단점
통합성 GitHub와 완벽히 통합되어 추가 도구 없이 자동화 가능. GitHub 플랫폼에 종속적.
사용 편의성 YAML 형식으로 간단히 워크플로 설정 가능. 복잡한 파이프라인 구성 시 설정 파일이 복잡해질 수 있음.
비용 효율성 무료 플랜으로 소규모 프로젝트에 적합. 대규모 프로젝트에서는 추가 비용 발생 가능.
확장성 다양한 오픈소스 액션 지원(GitHub Marketplace)으로 손쉬운 확장 가능. 커스텀 요구사항에 맞는 액션은 직접 작성해야 함.
자동화 수준 CI/CD 전 과정 자동화 가능. 실행 환경 제한(특정 OS/환경에서의 실행은 복잡).

 

GitHub Actions의 사용 이유

  1. 빠르고 간단한 설정: .github/workflows에 YAML 파일을 작성해 바로 사용 가능.
  2. GitHub와의 높은 호환성: Pull request, Push 등 GitHub 이벤트와 밀접하게 연동.
  3. 비용 절감: 무료 플랜으로 소규모 프로젝트에서 부담 없이 사용 가능.
  4. 강력한 커뮤니티와 확장성:
    • GitHub Marketplace에서 다양한 Actions 활용 가능.
    • DevOps 문화에 적합한 자동화 도구 제공.

 

정리

  GitHub Actions CI   GitHub Actions CD
목적 코드 변경 사항의 빌드 및 테스트 자동화 코드 변경 사항의 자동 배포
주요 작업 - Gradle, Maven 등 빌드 도구 테스트- 코드 품질 보장 - AWS, Heroku 등 클라우드 서비스로 배포
트리거 - Push- Pull Request - Main 브랜치로의 병합
사용 예시 - 브랜치별 테스트- 테스트 실패 시 알림 전송 - 빌드된 파일 배포- 프로덕션 환경 배포
필요 도구 Java, Gradle, Docker, Slack Heroku, AWS, Docker
장점 빠른 피드백, 품질 유지 배포 시간 단축, 자동화된 릴리스

 

부가적으로 알아야 할 정보

  1. GitHub Secrets:
    • API 키, 데이터베이스 비밀번호 등 민감한 정보를 안전하게 관리.
    • secrets.변수명으로 워크플로에서 참조 가능.
  2. GitHub Marketplace:
    • 다양한 오픈소스 액션 제공(테스트, 배포, 코드 분석 등).
    • 사용자가 만든 커스텀 액션을 공유하거나 활용 가능.
  3. 모니터링 및 디버깅:
    • GitHub Actions에서 제공하는 로그를 통해 워크플로 실행 과정을 모니터링 및 디버깅.

 

Github Actions 뜯어보기

  • Workflow
    • 최상위 개념
    • 여러 Job으로 구성되고, Event에 의해 트리거될 수 있는 자동화된 프로세스
    • Workflow 파일은 YAML으로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장됨
  • event
    • Github Repository에서 발생하는 push, pull request open, issue open, 특정 시간대 반복(cron) 등의 특정한 규칙
    • workflow 를 실행(trigger)함
  • runner
    • Github Action Runner app이 설치된 VM
    • Workflow가 실행될 instance로, 각각의 Job 들은 개별적인 runner에서 실행
  • job
    • 하나의 runner에서 실행될 여러 step의 모음을 의미
  • step
    • 실행 가능한 하나의 shell script 또는 action
  • Actions
    • Workflow의 가장 작은 단위로 재사용이 가능
    • Job을 만들기 위해 Step들을 연결
  • workflow 뜯어보기

  • with: plugin 에서 사용할 파라미터들
  • run: 실제로 실행할 스크립트

 

Github Actions 을 활용한 CI/CD 파이프라인 배포

  • 전체 흐름
    • 개발자는 feature/ 로 시작하는 브랜치를 만들어서 test코드를 포함한 수정 작업을 완료한 뒤 Pull Request 생성
    • (자동화) Pull Request를 만들면 해당 브랜치에 대해 gradle test를 수행
    • Pull Request 코드의 test가 실패한 경우, Pull Request 를 생성한 개발자는 test 코드를 수정하여 Pull Request를 변경
    • Pull Request 코드의 test가 성공한 경우, 다른 개발자들의 승인을 기다림
    • 다른 개발자들은 Pull Request의 코드를 승인하거나 댓글로 소통
    • (자동화) main 브랜치에 merge 되면 해당 브랜치를 cloudtype 서버에 배포

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 


 

 

 🐳 

  •  

 

 

 

 🐳 

  •  

 

 

 

 🐳 

  •  

 

 


 

소제목 

🧩 부모 타입 변수 = 자식 타입 객체; 는 자동으로 부모 타입으로 변환이 일어납니다.

 


 

소제목 

🎵 클래스가 설계도라면 추상 클래스는 미완성된 설계도입니다.

'Docker > Docker' 카테고리의 다른 글

[Docker] Docker 모니터링&로깅  (0) 2025.02.04
[Docker] Docker Compose  (0) 2025.02.03
[Docker] Dockerfile  (1) 2025.02.01
[Docker] Docker+CI/CD  (0) 2025.01.30
[Docker] Docker 기초  (0) 2025.01.29

+ Recent posts