인프런 영문 브랜드 로고
인프런 영문 브랜드 로고
개발 · 프로그래밍

/

데브옵스 · 인프라

[DevOps 정석 3] GitHub Actions으로 제대로 구축하는 CI

GitHub Actions를 기반으로 CI를 어떻게 구성하는지, 그리고 CI 안에는 어떠한 내용들이 담겨야 하는지에 대한 학습을 진행하며, Google DevOps Report 2022에서 화두가 되었던 SLSA Framework을 통한 검증에 대한 부분을 학습할 수 있습니다.

(5.0) 수강평 2개

수강생 78명

Thumbnail

초급자를 위해 준비한
[데브옵스 · 인프라] 강의입니다.

이런 걸
배워요!

  • CI

  • GitHub Actions

  • SLSA Framework

  • InfraCost

  • Software Bill of Material

  • SonarQube

  • TruffleHog

  • ConfTest

  • AWS IAM

CI 구성을 위한 Github Action!

혹시 빌드 자동화만이 
CI의 전부라고 생각하셨나요?

“CI가 대체 어떤 건지 궁금해요. 기술적 관점에서 개념을 잡아나가려면 어떻게 하는 게 좋을까요?”

“기업에서 Jenkins 같은 CI 솔루션을 설치해서 쓰고 있는데, CI 내에 어떤 컨텐츠를 넣어야 할까요?”

“CI/CD 전략에 대한 컨설팅은 받았는데, 구현 방법이 고민입니다.”

“우리 조직의 CI 구성에 대한 평가와 관리가 필요해요.”

조직에서 CI를 도입한다고 할 때, 실제로 내용을 보면 빌드 후 패키지 배포가 전부인 경우가 많습니다. 하지만 CI에서 구현해야 할 부분은 Software Supply Chain(소프트웨어 공급망)을 구성하는 것으로, 단순히 CI 솔루션을 설치하는 게 전부가 아닙니다. 

CI가 처음인 조직을 위한 최소한의 핵심 지식

Github Actions을 이용해 CI(Continuous Integration)을 구성하는 방법과, CI 내에서 Software Supply Chain을 구성할 때 필요한 도구들을 어떻게 적용하는지를 알아봅니다.

이 강의에서는 CI를 이용한 Software Supply Chain을 구성을 할 때 최소한 구현되어 있어야 하는 Model CI Flow에 대해 다룹니다. CI 시스템을 구성하고 평가하기 위한 기준과 방법들이 궁금하셨던 분들께 이 강의가 도움이 되시기를 바랍니다.


CI가 필요한 목적과 이유를 
확실하게 알려드립니다.

Case 1 CI 구성에 대한 가이드라인이 있을까요?

SLSA Framework를 통해 Software Supply Chain에 대한 가이드라인을 제시합니다.

Case 2 CI 시스템에는 Host와 Agent라는 개념이 있는데, 이를 구성하는 방법은 어떤 것이 있나요?

CI Host는 Github Actions를 사용하고, Agent는 Github에서 제공하는 SaaS 기반 Agent 또는 Ephemeral 환경 기반 자체 Agent를 구성하는 방법에 대해 설명을 드립니다.

Case 3 우리 회사의 기술적인 정책 가이드라인을 CI에 넣고 싶은데 방법이 있을까요?

CI 상에서 보안 점검 사항들을 적용하는 법에 대해 SonarQube와 Aqua Trivy를 통하여 설명하여 드립니다. 또한, ConfTest를 통하여 Policy as Code란 무엇인지에 대해 보여 드립니다.

Case 4 우리 조직은 Terraform을 통해 IaC를 사용하고 있는데, 이에 대한 비용 관리를 CI에서 먼저 할 수 있을까요?

InfraCost를 활용해 GitHub Pull Request에 Terraform 변경에 대한 비용 증감을 표시하는 방법에 대해 설명을 드립니다.

CI는 툴뿐만 아니라 본질을 잡아야 합니다.

CI는 비단 CI 소프트웨어를 설치하고 빌드 자동화만 하는 것이 아닙니다. 빌드와 Artifact 생성을 다루는 일반적인 CI 강의와 달리, 본 강의는 CI의 본 목적인 Software Supply Chain Management와 Gated Commit이라는 컨셉을 기준으로 합니다. 

뿐만 아니라 최근 오픈 소스 라이브러리로 인한 보안 침해 사고(Log4j, SolarWind)로 인해 부각되고 있는 Software Bill of Material을 기반으로 Dependency management, SLSA Framework 등의 최신 트렌드까지 반영하여 진행합니다. 


학습 내용을 
확인해보세요 📚

기준을 세우는 CI 학습

CI가 CI 소프트웨어를 설치하고 빌드 자동화만 하는 것이 아니라는 것을 이해할 수 있습니다. 아울러 SLSA Framework에 대해 이해하며, 이것이 어떠한 솔루션들과 결합하여 Framework Level 최고 단계인 4단계까지 올릴 수 있는지에 대해 배우게 됩니다.

구현을 위한 핵심 기술까지 

Gated Commit를 실현하는 방법을 GitHub을 통하여 학습하며, Microservice 구조 상에서 연관된 서비스에 대한 CI Chain을 만드는 방법에 대해서 알아봅니다. GitHub Custom Actions을 만들 수 있고, 이를 활용하여 재사용 가능한 Software Supply Chain을 만드는 방법에 대해 이해할 수 있습니다. Persistent agent와 Ephemeral agent의 특징과 차이를 함께 이해합니다.

상세 커리큘럼 📖

Github Actions 처음 시작하기

  • Github Commit Signing
  • Spring/Gradle 기반의 CI Process + Slack Notification
  • Node.js 기반의 서비스 CI Process + 연관 서비스 CI Process 호출

IaC 배포 안정성 검증하기

  • ConfTest를 이용한 Policy as code 구현
  • TruffleHog를 이용한 Credential Exposure Check 구현
  • InfraCost를 활용한 Pull Request 내 Terraform IaC 예상 추가 비용 Comment하기

CI에서 보안 취약점 점검하기

  • SonarQube community edition을 이용한 SAST 구성
  • Aqua Trivy와 Dependency Track을 이용한 취약점 점검 및 SBOM 관리

Private repository를 이용한 Container image 관리

GitHub Custom Action을 사용하여 Build Process 모듈화 하기

  • Container 기반의 Custom Action 구성
  • JavaScript 기반의 Custom Action 구성
  • Composite Action 구성

GitHub Self-hosted runner 구현하기

SLSA Framework을 통한 Summary


DevOps의 정석 
이정석입니다.

한국 · 호주 · 영국에서 Full-stack Developer, DevOps Engineer/Consultant로 15년 정도 일하고 있는 Digital Nomad IT Engineer입니다. IT 조직 운영 최적화를 위해 끊임없이 새로운 주제에 대해 공부하고 있으며, 은퇴할 때까지 Engineer로 생활하고 싶다는 꿈을 가지고 있습니다. 현재는 호주 Melbourne에 있는 한 은행의 Developer Experience 팀에서 DevOps로 활동하고 있습니다.

상세 이력

  • 전) The Latin Traveller에서 인턴으로 첫 직장 생활 시작! [London, UK]
  • 전) 한진그룹 토파스여행정보 - Java/Oracle 개발 [Seoul, KR]
  • 전) NuSkin Korea - Java/Oracle 개발 [Seoul, KR]
  • 비즈니스 흐름에 대한 호기심으로 Full-time MBA 과정 졸업 [Seoul/Nice, KR/FR]
  • 전) KOSCOM - C 개발 [Seoul, KR]
  • 전) KDB대우증권 - Java, C#, Python, MongoDB, Oracle, Sybase, ActiveMQ 등을 이용한 개발 [Seoul, KR]
  • 전) National Australia Bank (NAB) - Full-stack Development [Melbourne, AU]
  • 전) 호주 4대 은행 중 한 곳 - Full-stack Development/In-house DevOps Consulting [Melbourne, AU]
  • 전) Amazon Web Services - DevOps Consultant [Seoul/Melbourne, KR/AU]
  • 현) 호주 4대 은행 중 한 곳 - DevOps로 DORA Metrics 정의와 Scalable CI Structure 구현으로 씨름 중... [Melbourne, AU]

Q&A 💬

Q. CI를 구현할 때 그냥 Jenkins 설치하고 Build Command 넣고 배포하게 하면 되는 게 아닌가요?

CI 구현은 빌드 자동화를 하는 것이 목표가 아닙니다. 전체적인 Software Supply Chain에서 발생할 수 있는 빌드, 테스트, 조직의 보안/컴플라이언스 요구사항 등을 자동화하여 점검하여 신뢰성 있는 Artifact를 CD 파트로 넘겨주는 것이 그 목적이라고 할 수 있습니다. 

Q. 사용하는 소프트웨어가 많던데 관련한 기초 지식이 필요한가요?

본 강의에서 사용하는 소프트웨어에 대한 부분에 대해서는 사용 목적과 사용 방법에 대한 부분을 설명해드리면서 CI와 Integration하는 과정을 진행합니다.

Q. DevOps로 커리어를 쌓을 때 이 파트가 얼마나 중요한가요?

DevOps와 관련된 포지션에서는 CI/CD에 대한 부분은 기본적인 요구 사항으로 들어가 있으며, 이때 CI에 대한 질문에서 파이프라인을 어떻게 구성할지에 대한 아이디어 또는 경험을 묻는 경우가 많습니다. 이때, 중요하게 바라보아야 할 관점이 Pipeline flow와 Gated commit에 관련된 부분이고, 본 강의에서는 이러한 부분들을 다루고 있습니다.

💾 수강 전 참고 사항
실습을 위해 다음 PC 사양 및 서비스 버전이 필요합니다.

  • CPU: 4 Core 이상 x86-64/amd64 계열
  • Memory 8GB 이상, Storage 30GB 이상
  • Kubernetes 1.21 이상, Helm 3.8 이상
  • Software build tool, IaC (Terraform, Kubernetes, Helm), Shell Script 등을 사용하여 강의가 진행되지만 이에 대한 기초 지식이 없다고 하여도 듣는 데는 문제가 없습니다.
  • 수업 자료는 [섹션 2 - SigNoz 설치] 수업 하단 노트를 확인해주세요. 강의에 사용하였던 모든 Source Code를 GitHub Repository를 통하여 제공합니다. 구글 폼 링크를 통한 접근 승인까지는 최대 48시간이 걸릴 수 있으며, 본 강의의 소스 코드 및 콘텐츠를 타인과 공유하시면 안 됩니다.

연관 강의 함께 보기 📺

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • CI 내에 컨텐츠를 어떻게 구성하는지 궁금하신 분

  • GitHub Actions가 아예 처음이라 기본 지식을 얻고 싶으신 분

  • Microservice Architecture 상에서 CI는 어떻게 구성하는지 궁금하신 분

  • CI에서 DevSecOps는 어떻게 구성하는지 궁금하신 분

선수 지식,
필요할까요?

  • Shell Scripts

  • Kubernetes 환경 설치 방법, Minikube 또는 EKS/GKE/AKS 셋업 방법

  • Helm 명령어 설치 방법

안녕하세요
JeongSuk Lee입니다.

수강생 수

376

수강평 수

12

강의 평점

4.1

강의 수

7

한국/호주/영국에서 Full-stack developer, DevOps Engineer/Consultant로 15년 정도 일을 하고 있는 Digital Nomad IT Engineer 입니다. IT 조직 운영의 최적화를 위해 끊임 없이 새로운 주제에 대해서 공부를 하고 있으며, 은퇴할 때까지 Engineer로 생활하고 싶다는 꿈을 가지고 있습니다. 현재는 호주 Melbourne에 있는 한 은행의 Developer Experience 팀에서 DevOps로 활동하고 있습니다.

커리큘럼

전체

20개 ∙ (6시간 34분)

강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!