Codestates/Section 4

[10/12] CI/CD 파이프라인, 깃헙 액션 블로깅

Tite 2022. 10. 12. 00:31

 

CI/CD란?

- CI : 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미함.

  • CI를 성공적으로 구현할 경우, 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결 가능.

- CD : 지속적인 서비스 제공 및/또는 지속적인 배포를 의미함. (제공과 배포는 상호 교화적으로 사용됨)

  • 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻함.
  • 어쩔 때는 얼마나 많은 자동화가 이루어지고 있는 지를 설명하기 위해 별도로 사용되기도 함

 

 

 

 

CI/CD 단계

일반적인 앱의 개발 및 유지보수 단계

PLAN -> CODE -> BUILD -> TEST -> RELRASE -> DEPLOY -> OPERATE -> PLAN ...

 

+

 

지속적인 통합 (CI)

: 개발자를 위한 자동화 프로세스. 코드 - 빌드 - 테스트 단계에서 꾀할 수 있음

  • Code : 개발자가 코드를 원격 코드 저장소(깃헙 리포지토리라던가) 에 push 하는 단계
  • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
  • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정

 

- 장점

  • 보안 이슈, 에러 등을 쉽게 파악해 빠르게 개선 가능.
  • 테스트가 완료된 코드를 빠르게 전달 가능.
  • 지속적인 배포 가능.

 

지속적인 배포 (CD)

: 지속적인 서비스 제공 및 지속적인 배포를 의미. 릴리즈 - 디플로이 - 오퍼레이트 단계에서 꾀할 수 있음.

  • Release : 배포 가능한 소프트웨어 패키지를 작성
  • Deploy : 프로버저닝 ()을 실행하고 서비스를 사용자에게 노출함. 실질적 배포 부분.
  • Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지함.

 

- 장점

  • 운영팀이 빠르고 쉽게 애플리케이션을 프로덕션으로 배포할 수 있음.

 

지속적인 배포 사례

깃헙 페이지.

지정한 디렉터리에 정해진 방식에 따라 잘 커밋만 하면 깃헙 페이지가 알아서 해당 index.html 파일을 해당 디렉터리에 있는 파일들을 잘 번들링해서 깃헙 페이지 서버에 업로드함. (자동으로 인터넷에 배포)

 

 

 

 


 

배포 자동화

- 필요한 이유

  • 수동적이고 반복적인 배포 과정을 자동화해서 시간 절약 가능
  • 휴먼 에러를 방지할 수 있음
    • 휴먼 에러란? 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수를 뜻함.

 

 

 

CI/CD 파이프라인

: 배포 과정을 자동화시키는 방법을 뜻함.

 

배포 과정

1. 개발자가 코드를 원격 저장소에 push

2. (code) 코드 저장소

3. (build, test, release) 테스트/ 빌드 서버

4. 모든 과정을 통과한 빌드를 배포 서버로 전달 -> (deploy) 프로비저닝 배포 서버

6. 애플리케이션 서버 (결과물을 유저가 확인)

 

=> 코드가 빌드 되고, 최종적으로 배포되는 단계까지를 일련의 자동화 단계로 만드는 것을 "파이프라인을 구축한다"고 표현함.

 

 

 

CI/CD 파이프라인을 구성하는 기본 단계와 수행 작업

파이프라인 : 소스 코드의 관리부터, 실제 서비스로의 배포 과정을 연결하는 구조를 뜻함.

  전체 배포 과정을 여러 단계로 분리함. 각 단계는 파이프라인 안에서 순차적으로 실행되며, 각 단계마다 주어진 작업(Actions)을 수행함.

  • Source 단계 : 원격 저장소에 관리되고 있는 소스 코드에 변경사항이 생길 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행.
  • Build 단계 : 앞에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공함. 단계를 거쳐 생성된 결과물을 다음 단계로 전달함.
  • Deploy 단계 : 전단계에서 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행.

 

 

파이프라인 구성 요소 및 장점

  • 빌드 (소프트웨어 컴파일)
  • 테스트 (호환성 및 오류 검사)
  • 릴리스 (버전 제어 저장소의 애플리케이션 업데이트)
  • 배포 (개발에서 프로덕션 환경으로의 변환)
  • 규정 준수 및 유효성 검사

 

 

 


 

 

Github Actions이란?

: 깃헙이 공식적으로 제공하는 빌드, 테스트, 배포 단계 파이프라인을 자동화할 수 있는 CI/CD 플랫폼

  • 레포지토리에서 Pull Request, Push 같은 트리거로 깃헙 작업 워크플로를 구성함.
    • 워크플로란? 하나 이상의 작업이 실행되는 자동화 프로세스. 각 작업은 자체 가상 머신 또는 컨테이너 내부에서 실행됨
  • 워크플로는 .yml(혹은 .yaml) 파일에 의해 구성됨.
  • 테스트, 배포 등 기능에 따라 여러개의 워크플로를 만들 수 있음.
  • 생성된 워크플로는 .github/workflows 디렉토리 이하에 위치함.
  • 비공개 레포지토리는 깃헙액션의 작동 용량과 시간이 제한되어 있음. 공개 레포지토리는 무료로 사용 가능.

 

YAML, AML

: (Yet Another Markup Language)의 약자, 사람이 읽을 수 있는 데이터 직렬화 언어를 의미함.

- 배우기 쉬운 프로그래밍 언어.

- 다른 프로그래밍 언어와 함께 사용할 수 있음

=> 유연성과 접근성이 좋아 자동화 프로세스를 생성하는 데에도 사용됨.

name: Bare Minimum Requirements
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Bare Minimum Requirements
        uses: actions/setup-node@v1
        with:
          node-version: '16'
      - run: npm install
      - run: npm test
  • key-value 형태로 작성된 파일. 계층 구조를 가짐.(JSON과 같음) 
  • 큰따옴표없이 문자열 작성 가능. => 한 눈에 들어옴
  • {} 형태로 감싸줄 필요 없음. => 스코프를 잘못 쓸 일이 사라짐
  • 주석 사용 가능 (JSON은 못씀)
  • JSON의 상위호환격. => 기존 json 문서를 yaml 파일로 사용하거나 원하는 부분만 손보기 가능. (반대도 가능)

 

문법

# : 주석

--- : 문서 시작 (선택 사항)

... : 문서 끝 (선택 사항)

#기본 표현
# : 다음엔 무조건 공백 문자가 와야함
key: value

int, string, boolean, 리스트, 매핑을 지원함.

int, string 타입은 스칼라라고 부르고, 배열 혹은 리스트는 시퀀스라 부름.

#객체 표현
key: 
	key: value
    key: value
   
#가독성을 위해 이렇게 작성하기도 함
key: {
	key: value
    key: value
}
#줄바꿈 표현 |
#줄바꿈 무시표현 >

key: |
	hello world
    i'm kimcoding.
    
key: >
	hello world
    i'm kimcoding.
#value에 :가 들어간 경우 반드시 따옴표 필요
#이렇게 쓰면 error남
key: value:

#이렇게 써야함
key: "value:"

 

 


 

마이 아고라 스테이츠 레퍼런스 코드를 깃헙 액션을 통해 s3로 배포하는 법에 대해 공부했다.

yml 파일 적는 법은 생각보다 어렵지 않았다. 

그런데 aws 아이디와 키 오류를 만나서 이것저것 찾아봤는데 정말 뭐가 뭔지 모르겠더라...

기다려서 새로온 메일에 적힌 걸로 바꿔서 넣어봤더니 잘 됐다... (?)

결국 aws 엑세스 키랑 시크릿 키값이 잘 못되어서 안 되는 문제였다.

 

 

s3 배포 링크

https://fe-70-heera1.s3.ap-northeast-2.amazonaws.com/index.html