[10/12] CI/CD 파이프라인, 깃헙 액션 블로깅
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