CI/CD - Github Actions

호호빵·2023년 3월 22일
0

sunflowerProject

목록 보기
3/10

🖍 CI/CD

CI(Continuous Integration) - 지속적 통합

  • 여러 개발자가 하나의 프로젝트를 개발할 때 불일치를 최소화해주는 개념
  • 애플리케이션 변경 사항 반영 시 자동 빌드 및 테스트가 되어 잘못된 코드가 공유되는 걸 방지(신뢰성 높임)

CD(Continuous Deployment, Delivery) - 지속적 서비스 제공, 배포

  • 지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드되는 것을 뜻함
  • 프로젝트의 변경 사항을 가상 환경에 자동으로 배포하는 것을 의미
  • 변경 사항을 배포할 때에 사용하는 파이프라인을 공유하여 번거로움을 줄임(누구나 동일한 플로우로 배포 가능)


🖍 Github Actions

  • Github에서 제공하는 CI/CD 툴
  • 일종의 훅 서비스로 특정 레포지터리(또는 브랜치)에 푸시 또는 풀 리퀘스트와 같은 특별한 이벤트가 발생하면 미리 작성된 워크플로우를 도커 컨테이너에서 실행 가능
  • 별다른 툴을 설치하지 않아도 Github Repository에서 바로 사용할 수 있다는 것이 장점
1. github - secrets에 application.yml을 등록해둠 - > base64로 인코딩해서 등록
2. gradel.yml 작성
	- JDK 설치
    - 해당 폴더 만들고 secrets에서 APPLICATION 읽어와서
    - build
# gradle.yml

name: Java CI with Gradle

on:
  push:
    branches: [ "main" ]    // main 브랜치에서 push 이벤트가 일어날 때 

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'temurin'

      - uses: actions/checkout@v2
      - run: mkdir ./src/main/resources
      - run: touch ./src/main/resources/application.yml
      - run: echo "${{ secrets.APPLICATION }}" | base64 --decode > ./src/main/resources/application.yml
      - uses: actions/upload-artifact@v2
        with:
          name: application.yml
          path: ./src/main/resources/application.yml

      - name: Build with Gradle
        run: ./gradlew clean build

🖍 CI/CD 도구별 차이점

JenkinsGitHub ActionsAWS CodesNCP Sources
개요오픈소스깃허브에서 제공하는 완전관리형 서비스AWS에서 제공하는 완전관리형 서비스네이버에서 제공하는 완전관리형 서비스
서버구성서버 설치 필요클라우드가 있으므로, 별도 설치 필요없음클라우드가 있으므로, 별도 설치 필요없음클라우드가 있으므로, 별도 설치 필요없음
비동기동기적으로 배포하기 때문에 많은 시간이 소요
(비동기 파이프라인 구성이 없다)비동기 CI / CD비동기 CI / CD비동기 CI / CD
구성모든작업에 대해서 계정 및 트리거를 기반으로 동작하며 모두 Pipeline 형태로 구성되어있다.Github 내부 이벤트와 연동하여 yml 코드를 통해 편집, 재사용, 공유 및 분기 처리가 가능하다.Code Commit > Build > Deploy > Pipeline 순서대로 개별 또는 통합 구성을 지원합니다.Source Commit > Build > Deploy > Pipeline 순서로 개별 또는 통합 구성을 지원합니다.
Github 연동REST API 트리거를 기준으로 구성되어 있어서 github의 모든 이벤트 연동을 하지는 못한다.모든 github 이벤트에 대한 작업을 제공하고 다양한 언어와 프레임 워크를 지원합니다.REST API 트리거를 기준으로 구성되어 있어서 github의 모든 이벤트 연동을 하지는 못한다.REST API 트리거를 기준으로 구성되어 있어서 github의 모든 이벤트 연동을 하지는 못한다.
호환성환경 호환성을 위해 도커 이미지에서 실행해야 함 (물리서버 비추천)모든 환경과 호환모든 환경과 호환모든 환경과 호환
캐싱캐싱 플러그인 지원캐싱 메커니즘 작성 필요캐싱 기능 지원캐싱 기능 지원
공유공유기능 없음github 마켓 플레이스를 통해 공유 가능AWS 마켓플레이스를 통해 공유 가능공유기능 없음
보안서버 보안 스펙과 동일🔒🔒일부 보안기능 지원 🔒대부분 영역에서 보안기능 지원 🔒🔒🔒🔒다양한 영역에서 보안기능 지원 🔒🔒🔒
레퍼런스전세계많은 사람들이 이용하여 문서가 다양신규 서비스로 문서 및 적용 사례가 상대적으로 적음AWS 영문 가이드 및 국내/해외 적용 사례 다수Naver 국문 가이드 및 국내 적용 사례 다수
알맞는 규모중대형 프로젝트소형 프로젝트중대형 프로젝트중대형 프로젝트
적용사페이스북, 삼성SDS, 넥플릭스, 쿠팡, 카페24, 11번가 등...업스테이지 AI, Be pro 등...직방, 토스 페이먼츠, 당근마켓 등…네이버, 라인, 스노우, 제페토, 위버스ㄱ 등…





CI/CD란? - RedHat
Github Actions란? - MyAeroCode github
Github Actions - Workflow (secrets)
base64로 인코딩

profile
하루에 한 개념씩

0개의 댓글