CI/CD 툴 비교

rin·2020년 8월 13일
8
post-thumbnail

Red Hat Ansible Automation Platform

확장 가능한 자동화 시스템 구축 및 운영
조직 전반에서 자동화를 구축하고 운영하기 위한 기반으로, 전사적 자동화를 구현하는데 필요한 모든 툴이 초함되어 있다.

Red Hat Ansible Tower

  • 시각화된 대시보드, 롤 기반 엑세스 제어, 잡 스케줄링, 통합 알림, 그레픽 인벤토리 관리를 통해 IT 인프라를 중앙 집중화하고 제어 할 수 있다.
  • REST API와 CLI를 사용해 Ansible Tower를 기존 도구 및 프로세스에 쉽게 추가할 수 있다.

ANSIBLE 대시 보드

  • Ansible 환경에서 진행되는 작업에 대한 디스플레이를 제공
  • 호스트, 인벤토리 상태, 최근 실행된 잡 및 스냅 샷을 보여준다.

실시간 Job Status 업데이트

  • playbook 실행이 실시간으로 스트리밍된다.
  • 각 머신별로 분류된 play, task의 성공/실패를 확인할 수 있다.
  • 자동화 상태와 다음 단계를 확인 할 수 있다.
  • 소스 제어 업데이트나 클라우드 인벤토리 리프레시와 같은 다른 종류의 잡은 공통 작업 보기에 표시된다.

Multi PlayBook Workflow

  • workflow 편집기
  • 프로세스 모델링에 사용
  • 다른 인벤토리, 다른 사용자, 다른 인증방법, 실행 횟수에 상관없이 원하는 수의 playbook, 업데이트, 다른 여러 워크플로우를 연결한다.
  • 어플리케이션 빌드, 테스트 환경에 배포 및 실행, 테스트 결과에 따라 어플리케이션을 자동으로 승격하는 CI/CD 테스트 워크 플로를 빌드 할 수 있다.

활동 기록

  • 모든 자동화 활동이 기록된다.
  • 실행한 사람, 커스텀 마이징한 방식, 수행한 작업, 작업이 일어난 장소를 저장하고 추후에 볼 수 있다. 혹은 이를 Ansible Tower의 API를 통해 export 할 수 있다.
  • Job 생성, Inventory 변경, 인증 저장에 대한 모든 변경 사항의 추적을 보여준다.
  • 이러한 정보는 사용자의 외부 로깅 및 분석 플랫폼으로 전송함으로써 전체 환경에서의 자동화 및 이벤트 상관 관계 분석을 수행할 수 있다.

통합 알림

  • 작업이 성공 시 알림 전송, 실패 시 에스컬레이션 (?)
  • 전체 조직에 대해 한 번에 알림을 보내거나 Job 별로 사용자를 지정할 수 있다.
  • Slack, Hipchat, SMS, email 등에 알림을 연결하거나 사용자지정 webhook을 이용해 인프라의 다른 툴의 트리거를 일으키는 알림을 전송할 수 있다.

실행 일정 제어

  • Playbook 싱행, cloud inventory 업데이트, 소스 제어 업데이트 일정을 제어한다. - 바로 실행, 추후에 실행, 지속적으로 실행
  • 야간 백업, 주기적 configuration 수정같은 가끔 발생하는 작업 혹은 전체 지속적 배포 파이프 라인을 설정

전체 인벤토리 관리 및 추적

  • 공개 클라우드 제공 업체에서 인벤토리를 가져오거나 로컬 OpenStack 클라우드나 VMware 환경에서 동기화 할 수 있다.
  • 클라우드 인벤토리를 동기화 상태로 유지하며 프로비저닝 콜백을 통해 필요에 따라 노드 구성을 요청함으로써 자동 확장이 가능하다.

단순화

  • 클릭 한 번으로 playbook 시작 가능
  • 필요한 변수를 입력하고 사용 가능한 보안 자격 증명을 선택한다.
  • 배포 결과를 모니터링
  • 포털 모드 및 조사 기능을 통해 IT 관리자는 조직 전체의 사용자에게 자동화 작업 실행을 위임할 수 있다. - LDAP, Active Directory, 자격을 위임받은 SAML 인증 같은 기업 디렉터리로 부터 직접 동기화됨

remote 명령 실행

  • 인벤토리의 모든 호스트 혹은 호스트 그룹에서 간단한 task를 실행시킬 수 있다.
  • 원격 명령 실행은 Ansible Tower의 롤 기반 액세스 제어 엔진을 사용하고 모든 작업은 기록된다.

포괄적인 REST API 및 CLI 도구

  • Ansible Tower의 모든 기능은 UI 뿐만 아니라 REST API를 통해 사용할 수 있다.
  • REST 코드를 작성하는 것보다 CLI를 래핑하는 것이 더 쉽다면 Jenkins와 같은 CI 시스템에서 job이 시작하거나 다른 커맨드 라인 툴과 통합해야 할 때 CLI 도구를 사용할 수 있다.
  • API 엑세스 토큰을 사용해 3rd-party 통합을 쉽게 구현할 수 있다.

AWS CodeDeploy

Amazon EC2, AWS Fargate, AWS Lambda 및 온프레미스 서버와 같은 컴퓨터 서비스에 대한 소프트웨어 배포를 자동화하는 완전 관리형 배포 서비스

  • 배포 시 가동 중지 시간 감소
  • 복잡한 어플리케이션 업데이트 작업을 처리
  • 소프트웨어 배포를 자동화함으로써 오류가 발생하기 쉬운 수동 작업을 제거
  • 배포 요구 사항에 맞게 서비스를 확장

자동화된 배포

  • 소프트웨어 배포를 완전히 자동화 → 신속하고 안정적으로 배포
  • 배포 목적지에 관계없이 개발, 테스트, 프로덕션 환경에 걸쳐 일관되게 어플리케이션을 배포할 수 있다.
  • Amazon EC2 인스턴스의 경우, Auto Scaling과 통합 → 트래픽 급증으로 인해 Auto Scaling이 EC2 용량을 자동 조정하면 CodeDeploy는 알림을 받아 새 인스턴스에 자동으로 어플리케이션을 배포하고 Elastic Load Balancing 로드 밸런서에 새 인스턴스를 추가한다.
  • 인스턴스를 AWS 퍼블릭 엔드포인트에 연결하면 단일 서비스로 하이브리드 아키텍처에 어플리케이션을 지속적으로 배포할 수 있다.

자동 중지 시간 최소화

  • 배포 프로세스동안 어플리케이션의 가용성을 최대화하도록 지원
  • 변경 사항을 점진적으로 도입하고 구성 가능한 규칙에 따라 어플리케이션의 상태를 추적
  • 오류 발생 시 배포 중단 및 롤백 가능
  • 블루/그린 배포를 통해 이전 버전과 함께 새 버전의 어플리케이션이 시작된다. → 새 수정 버전으로 업그레이드되는 동안 어플리케이션 가동을 중지할 필요없음
  • Amazon EC2 인스턴스 그룹에 단계적 업데이트를 수행, 극히 일부 인스턴스만 오프라인 상태가 된다.
  • 점진적 진행 → 어플리케이션이 사용 가능한 상태를 유지하고 트래픽을 제공할 수 있도록 한다.
  • 배포를 모니터링하고 실패한 업데이트가 너무 많을 경우 배포를 중지한다.

중앙 집중식 제어

  • AWS Management Console 또는 AWS CLI를 사용해 배포를 시작하고 해당 배포 상태를 추적할 수 있다.
  • 상세한 보고서를 제공 → 각 어플리케이션 수정 버전이 언제 어디에 배포되었는지 확인 가능
  • 배포에 대한 라이브 업데이트를 받도록 푸시 알림을 생성할 수 있다.
  • 하나의 어플리케이션을 여러 배포 그룹에 배포할 수 있다.
  • 최근 배포 기록을 추적하고 저장한다.
  • 배포 대상 그룹에 현재 배포되고 있는 어플리케이션 버전을 확인 할 수 있으며 특정 배포 그룹에 대한 이전 배포 성공 비율 및 변경 기록을 검사할 수 있다.
  • 배포 성공 및 오류에 대한 자세한 보기 - 이전 배포의 타임라인 조사

손쉬운 도입

  • 플랫폼과 언어에 구애받지 않고 모든 어플리케이션과 연동, 동일한 환경을 제공
  • 기존 설정 코드를 재사용 가능
  • 기존 소프트웨어 릴리스 프로세스나 지속적인 전송 도구(AWS CodePipeline, GitHub, Jenkins)와도 통합 가능

ref.
Code Deploy, Code Build 생성 후 Code Pipeline에서 통합하여 사용한다.
Code Deploy : https://jojoldu.tistory.com/281
Code Pipeline : https://jojoldu.tistory.com/283?category=777282

What, How, Where

각 인스턴스 별로 작업이 상태 확인 가능 → RedHat이랑 비슷함

GoCD

❗️ NOTE
Changeset : 버전 제어 소프트웨어에서 (그룹으로 처리되어야하는) 공식적으로 수집 된 커밋 집합. 즉, 현재 버전과 이전 버전 간의 변경 사항을 뜻한다.

Cloud native deployment

  • Kubernetes, Docker, AWS 등과 같은 인기있는 클라우드 환경에서 CD 워크 플로우를 간소화한다.

복잡한 워크플로우의 모델링

  • 병렬 및 순차적 실행이 이뤄지므로 GoCD는 빠른 피드백과 사용자의 요청에 알맞는 배포를 위한 종속성을 쉽게 구성 할 수 있다.
  • fan-in/fan-out 종속성 관리는 항상 "올바른 작업"만 수행하도록 하며 의도하지 않은 빌드를 방지한다. Its fan-in/fan-out dependency management always does the "right thing," avoiding spurious builds.

❗️ NOTE
fan-out : 배포 대상이 여러 다운 스트림 파이프라인이 트리거되는 경우

fan-in : 다운 스트림 파이프 라인을 트리거 하기 위해 여러 업스트림 요소가 필요한 경우
아래 이미지에서 이는 pipeline2가 빨리 완료된다고 하더라도 pipeline1까지 모두 완료되어야 pipeline3이 트리거된다.

신뢰 가능한 아티팩트

  • 모든 파이프 라인 인스턴스는 특정 변경사항 집합에 고정되어 있다.
  • GoCD에서는 한 번 빌드 된 바이너리는 단계간에 쉽게 전달되므로 현재 배포중인 항목이 무엇인지, 바이너리가 테스트되었는지를 정확히 알 수 있습니다.

워크 플로우 시각화

  • 종단간 워크 플로우를 가시화한다.
  • GoCD의 Value Stream Map을 사용하면 커밋에서 배포까지의 변경 사항을 한 눈에 추적 할 수 있다.
  • 모든 변경 사항은 실시간으로 추적되며 손상된 파이프 라인 문제를 해결하는 것을 돕는다.
  • 문제 발생 시 업스트림에서의 원인과 다운 스트림에 미치는 영향을 확인할 수 있다.

시간와 버전 상관없이 배포

  • 수동 트리거를 사용하여 안정화된 버전을 원하는 곳에 배포
  • 프로덕션으로의 푸시 안정성 증대
  • 셀프-서비스(전문지식이 없는 사람도 큰 노력없이 사용가능한 것) 환경을 제공하여 QA팀을 강화할 수 있다.
  • 보안 및 감사 기능

테스트 실행 및 확인

  • 모든 배포 파이프 라인에서 검증은 핵심적인 부분이다.
  • 테스트에서 대부분의 언어 또는 프레임 워크를 지원한다.
  • 에이전트 그리드는 병렬 및 교차 플랫폼 실행을 제공한다.
  • 테스트가 중단되는 경우, 원인이 된 changeset과 플랫폼을 알려준다.

빌드 비교

  • 모든 배포에 대해 간단한 BOM(Bill Of Materials, 제품을 구성하는 모든 부품 목록)을 제공한다.
  • 두 개의 임의의 빌드에서 컨텐츠(파일과 커밋메세지)를 비교할 수 있다. → 파이프라인에 문제가 생겼을 때 중요한 역할을 수행한다.

병목 현상 제거

  • GoCD의 agent grid는 파이프라인, 플랫폼, 버전, 브랜치 등에 걸쳐 병렬 실행 기능을 제공함으로써 병목 현상을 제거한다.

파이프라인 구성을 깔끔하게 유지

  • 파이프라인 구성을 재사용할 수 있도록 템플릿 시스템을 제공한다.
  • 버전과 브랜치에 대한 파이프라인을 쉽게 관리 할 수 있다.

권한

  • 대부분의 엔터프라이즈 어플리케이션이 권한 허가를 위한 모델을 과도하게 사용하는 것과 달리 GoCD는 충분한 만큼만 제공하고자 한다.
  • 감사 가능한 배포를 지원
  • 모든 권한을 가지는 어드민 없이 사용자에게 파이프라인 구성을 위임할 수 있다.

concepts

  • 트리거 종류
    • 선택된 레파지토리(git/svn)에 폴링 -> 변경 감지
    • 타이머 트리거 : 지정된 시간 or 간격으로 트리거

demo

대시보드

에이전트

에딧

히스토리

http://localhost:8153/go/pipelines#!/
open /gocd-20.6.0-12005-1050/run-gocd

개념 : https://docs.gocd.org/current/introduction/concepts_in_go.html

ref. https://www.katalon.com/resources-center/blog/ci-cd-tools/

profile
🌱 😈💻 🌱

0개의 댓글