無知

갈 길이 먼 공부 일기

기술 공부/일반 트렌드

DevOps (1) | CI와 Github Action

moozii 2022. 2. 8. 18:58

지속적 통합(CI)이란?

CI로 더 많이 알려진 지속적 통합은 동일한 소프트웨어 프로젝트에서 작업하는 모든 사람이 코드 베이스에 대한 변경 사항을 정기적으로 공유한 다음, 각 변경 후에 코드가 원래 의도한 대로 작동하는지 확인하는 방식입니다. 지속적 통합은 공동 작업, 자동화 및 짧은 피드백 주기를 촉진하는 데 목적을 둔, 소프트웨어 구축 및 릴리스에 대한 DevOps 접근 방식의 핵심을 이룹니다. 지속적 통합은 변경 사항을 소스/버전 관리 시스템에 정기적으로 커밋하는 작업부터 시작하므로 모두가 같은 기반에서 빌드하게 됩니다. 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장합니다. 지속적 통합은 그 자체로 유익하지만 CI/CD 파이프라인을 구현하기 위한 첫 번째 단계이기도 합니다.

지속적 통합의 핵심 요소는 다음과 같습니다.
소스 코드 파일, 라이브러리, 구성 파일 및 스크립트를 포함하여 전체 코드 베이스를 포함하는 소스 또는 버전 관리 시스템
자동화된 빌드 스크립트
자동화된 테스트
빌드 및 테스트를 실행할 인프라

https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/continuous-integration/ 

 

빌드 자동화

자동화된 빌드는 지속적 통합(CI)에서 중추적인 역할을 하고 CI/CD 파이프라인의 핵심 요소입니다. 이러한 빌드는 최신 변경 사항으로 인해 코드에서 이슈가 발생하는 경우 이를 가능한 한 신속히 알리도록 설계된 일련의 자동화된 단계 중 첫 번째 단계입니다. 이 컨텍스트에서 빌드에 대해 이야기할 때는 단순히 소스 코드를 컴파일하고 연결하여 실행 파일을 생성하는 것 이상을 의미합니다. 빌드 프로세스에는 프로그램을 실행하는 데 필요한 모든 코드의 확인은 물론이고 일련의 점검이 포함됩니다. 번역된 언어로 작업하는 경우에도 빌드 단계가 필요합니다. 빌드 아티팩트라고도 하는 빌드 단계의 파일 출력은 테스트에 이어 스테이징의 추가 단계를 위해 CI/CD 파이프라인을 통해 진행됩니다. 빌드가 파이프라인의 모든 단계를 통과하면 라이브 릴리스 준비가 된 것입니다.

https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/automated-builds/

 

내가 정리하는 CI, Continuous Integration

ci =continuous integration (build)
cd = continuous deployment (deploy)

 

https://www.spaceone.org/docs/developers/cicd/


CI는, software package build, 빌드 자동화를 핵심으로 본다.

정확히는, CI는 빌드 자동화 + CD 사전 작업이다.

무엇을 빌드하느냐를 이해하는 것이 따라서 중요하다.
일반적으로 빌드하는 건 소프트웨어, 그 소프트웨어의 인스톨 패키지라 할 수 있다.

  • 소프트웨어 패키지가 있고,
  • 단순히 패키지를 설치하는 것이 아니라, 하나의 이미지로 설치하는 데에 쓰이는 것이 도커이고,
  • 이를 배포하는 역할을 Helm이 수행하는 구조이다.

빌드 되는 내용의 예시로는,

1. 노드 기반의 프론트엔드 소프트웨어와, 

2. 파이썬 기반의 백엔드 소프트웨어, 

3. 파이썬 기반의 플러그인 등이 있다.

 

해당 패키지 빌드를 위해서는 깃헙 액션이 트리거되어야 하는데, 

트리거는 각 레포의 .github/workflow/CI_branch_tagging.yml와 같은 파일에 의해 트리거된다.

 

깃헙 액션은, 

1. 버전에 대한 업데이트

2. 코딩 스타일 체크 (린트)

3. 실제 패키지 빌드

와 같은 역할을 자동적으로 수행해서 빌드 자동화 업무를 돕는 역할을 한다.

 

패키지 빌드의 경우, 그에 따라

노드 기반 코드는 노드의 패키지인 npm의 형태로 빌드되고, 그것이 CI의 아웃풋이다.

파이썬 기반 코드는 파이썬 패키지인 pypi 패키지로 빌드되고, 그것이 CI의 아웃풋이다.

 

패키지 빌드를 위해서 사용되는 파일명의 예시를 들어보자면,

npm 패키지를 만들기 위해서 package.json 파일이 사용되며, 

pypi 패키지의 경우에는 src/setup.py, 

Docker 이미지의 경우에는 도커파일을 기반으로 빌드된다.

Helm은 deploy/helm이 사용된다. 

 

패키지가 빌드 되고, 

도커는 패키지로 배포하기 위한 이미지를 만드는데, 

도커 이미지는 도커 헙 레포로 올라간다.

 

 

 

추가로 알아보는 깃헙 액션

Github Action 사용법 정리

소프트웨어 workflow를 자동화할 수 있도록 도와주는 도구
Workflow의 대표적인 예
1) Test Code
ex) 특정 함수의 return 값이 어떻게 나오는지 확인하는 테스트 코드
ex) df의 타입이 pd.DataFrame이 맞는가?
ex) value1에 특정 값이 들어가는가?
ex) 쿼리를 날리고 데이터가 맞는지 정합성 체크하는 것도 일종의 테스트
2) 배포
서버에 새로운 기능, 버전 등을 배포
3) 기타
자동화하고 싶은 스크립트 주기적으로 데이터를 수집해 처리
4) 다양한 파이썬 버전에서 실행되는지 확인

CI/CD에서 활용할 수 있고, cron으로 스케쥴을 설정할 수 있음
암호화된 변수를 사용하고 싶으면 Secrets에 저장 가능
의존 관계를 표시할 땐 job에서 needs 키워드 사용
Data를 공유하고 싶은 경우 upload-artifact와 download-artifact 사용

https://zzsza.github.io/development/2020/06/06/github-action/

 

 

Github Action 사용법 정리

Github Action 사용법 및 cron 사용 방법에 대해 정리한 글입니다 Github Action으로 YES24 IT 신간을 파이썬으로 크롤링 후 Issue에 업로드하는 예제가 있습니다 Github Action with Python Github action with cron, Github a

zzsza.github.io

 

DevOps with GitHub Actions | GitHub Learning Lab

Learn how to do DevOps on GitHub with the power of GitHub Actions! This path will guide you through leveraging GitHub Actions to go from code to cloud.

lab.github.com

 

메가존 클라우드 데브옵스 인턴 후기

안녕하세요. 이번에 메가존 클라우드에서 데브옵스 인턴으로 근무를 하게되었던 박진수입니다. 너무 좋은 팀원들과 많은 경험을 하며 단시간에 성장할 수 있었고, 일하는 동안 매 순간 순간이

umi0410.github.io