2023년 2월 8일 수요일

개발 후 자동화된 통합/배포/운영을 위한 DevOps CI/CD 파이프라인 및 오픈소스 도구 소개

이 글은 개발 후 자동화된 통합/배포/운영을 위한 DevOps CI(Continuous Integration)/CD(Continuous Delivery) 파이프라인과 오픈소스 도구를 간략히 소개한다.


CI/CD 파이프라인은 자동화된 테스트, 버전 관리, 지속적인 통합, 제공 및 배포를 포함하는 개발 방법론이다. 통합은 자동화를 통해 애플리케이션을 빠르고 효과적으로 배포할 수 있다. CI/CD는 여러 자동화된 테스트/배포 도구를 포함한다. 이 도구를 통해, 개발 배포 과정을 자동화할 수 있지만, 이 기술을 사용하기 이전에 작업하는 방식, 절차, 습관의 변화가 필수적이다.

지속적인 통합/배포 개념
CI/CD는 소프트웨어 개발 프로세스를 자동화하여, 배포 시간을 몇 달에서 몇 시간으로 단축할 수 있다.

지속적 통합에는 코드베이스에 대한 지속적인 코드 통합 프로세스가 포함된다. 사소한 코드 변경으로 인해 원하지 않는 결과가 발생하므로, 소규모 통합을 자주 수행하는 것이 중요하다. 사람 개입 없이 빌드 자동화를 통해 모든 통합의 오류를 확인한다.

이는 CI 서버 및 코드 관리 시스템을 비롯한 자동화 도구에 크게 의존한다. 이를 통해 문제를 조기에 감지하고, 제거할 수 있다. 지속적인 코드 통합은 팀 협업을 촉진하고, 개발자가 고품질 소프트웨어를 신속하게 제공할 수 있도록 한다.

CD는 버그 수정, UI/기능 개선과 같은 작고 빈번한 소프트웨어 변경 사항을 배포하는 방법론이다. 기본적으로 CI가 끝나는 지점에서 CD가 시작된다. 본질적으로 CD에는 지속적인 통합 코드의 스테이징, 테스트 및 배포가 포함된다. CD는 전적으로 운영 영역에 속한다.

CD는 소프트웨어가 CD/CI 파이프라인을 통과할 때, 오류 및 보안 취약성을 식별하기 위한 자동화된 회귀 테스트, 성능 모니터링을 자동 실행한다. 

지속적 통합/배포 도구
애자일 개발 방법론 채택이 증가함에 따라, 여러 CI/CD 도구가 시장에 출시되었다. 

Jenkins
Jenkins는 사용자가 실시간으로 테스트하고 보고할 수 있는 오픈 소스 교차 플랫폼 Java 기반 도구이다. 사용하기 쉬운 Jenkins는 Azure , Google Cloud, AWS 및 DigitalOcean 을 포함한 주요 클라우드 플랫폼과의 원활한 통합을 제공한다. 

CI/CD 파이프라인에는 개발자가 도메인별 언어를 사용하여 모델링 및 구현에 사용할 수 있는 유용한 도구 세트가 포함되어 있다.

MacOS, Windows 및 Linux 플랫폼에서 사용할 수 있는 Jenkins는 강력한 커뮤니티와 1500개 이상의 플러그인으로 구성된 플러그인 생태계를 보유하고 있다. 오픈 소스이고 무료이며 강력하고 확장 가능하므로 대규모 조직과 신생 기업 모두가 선호한다.

Sippable
소프트웨어 회사 Jfrog가 개발한 Shippable은 DevOps 엔지니어가 예측 가능한 소프트웨어 릴리스를 만드는 데 사용할 수 있는 CI/CD 도구 중 하나이다. Docker 지원을 제공하는 Shippable 자동화 플랫폼은 언제 어디서나 애플리케이션의 개발, 테스트, 프로비저닝 및 배포를 간소화한다.

HipChat, Slack, Kubernetes, Google Container Engine, Amazon ECS, Docker, Bitbucket, GitHub, Nose, xUnit, JUnit, Cucumber 등 도구와 원활하게 통합된다.

GitLab CI
GitLab CI는 Windows, macOS 및 Linux와 같은 여러 플랫폼에서 사용할 수 있다. 친숙한 UI로 설계된 GitLab CI는 지속적인 통합, 제공, 코드 검토 및 배포를 포함한 다양한 기능을 간단한 대시보드에 담았다.

GitLab CI는 Shell Executor를 통해 빌드를 트리거할 수 있다. 

TeamCity
JetBrains에서 개발한 TeamCity는 Jira Software, Azure DevOps, NuGet, Maven, Visual Studio Team Services 및 Docker와의 통합을 지원하는 무료 오픈소스 CI/CD 도구이다.

TeamCity는 Linux 및 Windows에서 사용할 수 있으며, 병렬 빌드를 실행하여, 사용자에게 다양한 환경에서 동시에 빌드를 실행할 수 있는 유연성을 제공한다.

TeamCity는 vSphere, VMWare, Google Cloud 및 AWS를 포함한 다양한 클라우드 플랫폼에서 잘 작동한다. Kotlin 기반 DSL(도메인 스펙 언어)을 사용하여 파이프라인을 정의할 수 있다.

Buildkite
Buildkite는 개발자에게 온프레미스 플랫폼에서 확장 가능하고 안전한 파이프라인을 실행할 수 있는 기능을 제공한다. 사용자는 Docker, macOS, Linux, Windows에 Buildkite를 설치하고 중앙 집중식 플랫폼의 여러 에이전트에서 병렬로 작업을 실행할 수 있다. 사용자가 GraphQL API를 활용하는 도구를 구축할 수 있다.

Codefresh
Kubernetes 에서 개발된 Codefresh는 GitOps를 완벽하게 지원한다. Puppet , Pulumi, Terraform, Slack, GitLab, Bitbucket 및 GitHub 와 같은 잘 알려진 도구와의 통합을 제공한다 .

Kubernetes 대시보드를 통해 Codefresh는 프로그래머에게 Azure, Amazon Web Services, Kubernetes를 포함한 다양한 플랫폼에서 가시성, 확장성 및 뛰어난 속도를 제공한다.

Codefresh Runner라는 CLI(Command Line Interface)를 통해, 코드 배포, 빌드 트리거 및 테스트 실행을 위한 확장 가능하고 효과적인 방법을 제공한다.

Bitrise
Bitrise는 모바일 앱 개발에 사용되는 대부분의 프로그래밍 언어(예: Flutter, Reactive Native, Iconic, Cordova, Objective C, Swift 및 Kotlin)에 대한 강력한 지원을 제공한다. Bitrise는 오픈 소스 프로젝트로 개별 모바일 애플리케이션 개발자에게 무료로 제공된다. 

Bitrise는 사용자가 값비싼 하드웨어를 설치하지 않아도 되도록 해준다. GitLab Enterprise, GitHub, Bitbucket, GitLab 및 GitHub Enterprise와 같은 임시, 공용 및 개인용 Git 서비스와 잘 연결된다. 

AutoRABIT
AutoRABIT은 Salesforce 플랫폼용 맞춤형 솔루션을 제공하는 CI/CD 도구 중 하나이다.

대화식의 사용자 친화적인 인터페이스를 제공하며, 120개 이상의 메타데이터 유형을 지원한다. AutoRABIT은 사용자가 Salesforce 지향 도구를 시스템에 통합하는 데 필요한 노력을 피할 수 있도록 도와준다.

Strider
MongoDB를 데이터베이스로 사용하는 Strider는 JavaScript/NodeJS로 작성되었다. Ruby, NodeJS 및 Python을 포함하여 광범위한 언어를 지원한다.

사용자는 Strider를 Bitbucket, Heroku, GitHub Enterprise, GitLab, GitHub 및 Slack과 통합하여 알림을 받을 수 있다. Strider의 내장 플러그인으로 다양한 기능을 쉽게 확장하고, 사용자 정의할 수 있다.

파이프라인의 보안
CI/CD 파이프라인은 팀이 사람의 실수를 줄이고, 개발팀의 결과물을 운영하는 데 도움이 된다. 하지만, 악의적인 행위의 표적이 될 수도 있다. 따라서 CI/CD 파이프라인 보호를 고려할 필요가 있다.

암호 관리는 CI/CD(지속적인 통합 및 배포) 중요한 보안 방법이다. 암호는 암호, 토큰 및 개인 키와 같이 노출되어서는 안 되는 민감한 정보이다. 권한이 없는 개인이나 시스템이 파이프라인에 접속할 수 없도록, 안전한 위치에 암호가 저장되어야 한다. 이를 위한, 인기 있는 암호 관리 도구는 Hashicorp Vault, AWS Secrets Manager 및 Azure Key Vault 등이 있다.

다른 보안 방법은 개발 산출물 컨텐츠 자체를 암호화하는 것이다. AES-256과 같은 보안 암호화 알고리즘을 사용하고, 암호화 키를 정기적으로 교체하여, 시간이 지나도 컨텐츠가 안전하게 유지되도록 한다.

마무리
CI/CD를 통해 애플리케이션을 신속하고 효과적으로 배포할 수 있다. CI/CD는 여러 자동화된 테스트/배포 도구를 포함한다. 이 도구를 통해, 개발 배포 과정을 자동화할 수 있다. 다만, 어떤 기술이든 제대로 활용하기 전에 우리가 작업하는 방식, 절차, 습관의 변화는 필수적일 것이다.

레퍼런스

댓글 없음:

댓글 쓰기