GitHub Actions
📌 GitHub Actions는 GitHub에 내장된 CI/CD 도구로, 소스 코드 저장소 내에서 코드 테스트, 빌드, 배포 등의 작업을 자동화합니다. GitHub Actions는 별도의 CI/CD 서버 구축 없이 GitHub와 쉽게 통합되며, 사용자가 YAML 형식의 워크플로 파일을 통해 간단하게 자동화 작업을 설정할 수 있습니다.
주요 특징
- GitHub 통합: GitHub와 완벽히 통합되어, 저장소 내 이벤트(push, pull request 등)를 기반으로 자동화 실행.
- 서버리스: CI/CD 서버를 별도로 운영할 필요 없이 GitHub에서 바로 실행.
- 무료 제공 범위:
- 스토리지: 500MB
- 실행 시간: 월 2,000분 (무료 사용자 기준)
- YAML 기반 설정:
- 워크플로는 반드시 .github/workflows 디렉토리에 저장.
- YAML 파일을 작성해 자동화 작업 정의.
GitHub Actions의 CI (Continuous Integration)
개념
- CI in GitHub Actions:
- 코드 병합 시 자동 테스트 및 빌드를 실행.
- 테스트 통과된 코드만 develop, main 브랜치로 병합되도록 설정.
- 코드 품질 유지 및 안정적인 배포 보장.
활용 예시
- develop 브랜치에 병합 시:
- gradle test 실행.
- 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로 정의.
활용 예시
- 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의 사용 이유
- 빠르고 간단한 설정: .github/workflows에 YAML 파일을 작성해 바로 사용 가능.
- GitHub와의 높은 호환성: Pull request, Push 등 GitHub 이벤트와 밀접하게 연동.
- 비용 절감: 무료 플랜으로 소규모 프로젝트에서 부담 없이 사용 가능.
- 강력한 커뮤니티와 확장성:
- 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 |
장점 | 빠른 피드백, 품질 유지 | 배포 시간 단축, 자동화된 릴리스 |
부가적으로 알아야 할 정보
- GitHub Secrets:
- API 키, 데이터베이스 비밀번호 등 민감한 정보를 안전하게 관리.
- secrets.변수명으로 워크플로에서 참조 가능.
- GitHub Marketplace:
- 다양한 오픈소스 액션 제공(테스트, 배포, 코드 분석 등).
- 사용자가 만든 커스텀 액션을 공유하거나 활용 가능.
- 모니터링 및 디버깅:
- 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 뜯어보기
- name
- github actions의 이름을 정하는 부분
- on
- 이 action이 언제 실행되는지에 대한 부분
- jobs
- 실제 실행할 내용에 대한 부분
- runs-on: 어떤 환경에서 실행하는지 기술
- steps: 실제 실행할 단계들을 기술
- name: 실행에 표시될 이름
- uses: 여러 가지 plugin 사용
- 다양한 action들을 사용 - https://github.com/marketplace?type=actions
- 실제 실행할 내용에 대한 부분
- name
- 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 |