Jenkins 파이프라인을 이용한 CI/CD와 GitOps 개발자 가이드

# 2022년도 2일 밖에 남지 않았습니다. Red Hat Developer (developers.redhat.com)에서 2022년 올 한해 가장 인기 있었던 기사들을 게재합니다. # Rank#5. Jenkins 파이프라인을 이용한 CI/CD와 GitOps 개발자 가이드 CI/CD 또는 지속적 통합(CI) 및 지속적 제공(CD)은 최신 소프트웨어 개발 라이프사이클에 필수 입니다. GitOps와 결합된 CI/CD를 통해 개발자는 GitHub와 같은 리포지토리에 코드를 커밋하는 즉시 고품질 소프트웨어를 릴리스할 수 있습니다. 자동화는 효과적인 CI/CD를 구현하기 위한 핵심 요소입니다. 이 프로세스에서 개발자와 릴리스 엔지니어는 운영계 환경에 배치하기 전에 소스 코드 리포지토리에서 코드를 테스트하는 데 필요한 모든 지침이 포함된 스크립트를 만듭니다. 프로세스는 효율적이지만 복잡합니다. 다행스럽게도 부담을 덜어주는 도구가 많이 있습니다. Jenkins는 CI/CD에 가장 널리 사용되는 도구 중 하나입니다. Jenkins는 수년 동안 사용되어 왔으며 그 과정에서 기능을 추가하면서 수많은 수정을 거쳤습니다. Jenkins에 추가된 가장 혁신적인 기능 중 하나는 Jenkinsfile에 저장된 자동화 스크립트에 의해 구동되는 Jenkins 파이프라인 작업을 실행하는 기능입니다. 개발자와 릴리스 엔지니어는 Jenkinsfiles를 사용하여 CI/CD 및 GitOps의 사례를 통합 배포 프로세스로 결합할 수 있습니다. Jenkins가 무엇이고 CI/CD와 GitOps 모두에 어떻게 적용되는지에 대한 간단한 복습부터 시작하겠습니다. 그런 다음 Jenkinsfile을 사용하여 CI/CD와 GitOps를 결합한 배포를 생성하는 방법을 안내합니다. Jenkins가 CI/CD를 지원하는 방법 Jenkins는 소스 코드에 대한 단위 테스트 실행과 같은 하나의 task부터, 많은 task들을 포함하는 복잡한 배포 프로세스에 이르기까지, 다양한 배포 프로세스를 관리하기 위한 오픈 소스 도구입니다. 첫 번째 릴리스부터 Jenkins는 회사가 배포 프로세스를 표준화할 수 있도록 했습니다. Jenkins 서버에서 task가 구성되면 해당 작업은 해당 구성에 따라 동일한 방식으로 반복적으로 실행될 수 있습니다. 개발자는 실행할 task와 실행 시기를 정의했고 Jenkins가 나머지 작업을 수행했습니다. Jenkins의 초기 릴리스에서는 개발자가 Jenkins 대시보드를 사용하여 배포 프로세스를 수동으로 정의해야 했습니다. 또한 각 job은 특정 Jenkins 서버에 따라 다릅니다. 배포(aka job)는 업데이트하거나 서버 간에 전송하기가 쉽지 않았습니다. 개발자가 특정 job을 업데이트하려면 서버의 Jenkins 대시보드로 이동하여 수동으로 업데이트를 구현해야 했습니다. 그리고 개발자나 시스템 관리자가 task를 다른 Jenkins 서버로 이동하려는 경우 Jenkins 서버의 파일 시스템에 들어가 특정 디렉터리를 다른 대상 Jenkins 서버로 복사해야 했습니다. 특히 해당 job이 크고 세부 사항이 많은 경우 프로세스가 힘들었습니다. 다행스럽게도 새로운 Jenkins 파이프라인 job 기능은 이러한 단점을 해결합니다. Jenkinsfiles와 CI/CD 및 GitOps 통합 Jenkinsfile은 Jenkins 작업의 각 단계를 정의하는 Groovy 프로그래밍 언어로 작성된 텍스트 파일입니다. 일반적으로 Jenkinsfile은 특정 구성 요소 또는 App을 배포하는 방법을 자세히 이해하고 있는 개발자 또는 시스템 관리자가 만듭니다. Jenkinsfile이 생성되면 소스 코드를 호스팅하는 버전 제어 시스템의 리포지토리에 커밋됩니다. Jenkinsfile이 커밋된 후 개발자 또는 시스템 관리자는 소스 코드 저장소에서 Jenkinsfile의 위치를 선언하고 Jenkins에 Jenkinsfile을 실행할 시기를 지시하는 job을 Jenkins에 생성합니다. Jenkinsfile에는 job을 실행하는 데 필요한 모든 지침이 있습니다. Jenkinsfile을 사용하면 서버 간에 작업을 훨씬 쉽게 전송할 수 있습니다. 필요한 것은 Jenkins에서 새 job을 시작하고 해당 job을 버전 제어(control)에 저장된 Jenkinsfile에 바인딩한 다음 job 실행 시기를 선언하는 것입니다. 배포에 대한 모든 세부 정보와 인텔리전스는 Jenkinsfile에 정의되어 있습니다. 모든 의도와 목적을 위해 Jenkinsfile은 배포 실행 방법에 대한 SSOT(Single Source of Truth)입니다. 그리고 해당 SSOT는 버전 제어 저장소에서 호스팅됩니다. GitOps와 SSOT GitOps 기반 배포 프로세스에서 모든 활동은 버전 제어 코드 리포지토리에서 발생합니다. 일부 회사는 GitHub, BitBucket 또는 Gitlab과 같은 특정 코드 리포지토리 서비스 내에서 GitOps 배포 프로세스를 직접 구동합니다. 다른 회사에는 Jenkins와 같은 외부 에이전트가 배포 프로세스를 실행합니다. 선택한 접근 방식에 관계없이 GitOps에 대해 이해해야 할 중요한 사항은 모든 배포 활동에 대한 단일 정보 소스가 코드 리포지토리라는 것입니다. 리포지토리에서 호스팅되는 Jenkinsfile을 사용하여 Jenkins에서 실행되는 작업을 정의하는 것은 GitOps 감성에 잘 맞습니다. GitOps와 CI/CD에 Jenkins 파이프라인을 사용할 때의 이점 GitHub와 같은 버전 제어 서버와 함께 Jenkins Pipeline 작업을 사용하여 CI/CD와 GitOps를 결합하면 많은 이점이 있습니다. 첫째, 배포 지침을 중앙 버전 제어 리포지토리에 넣으면 리포지토리가 중앙 위치가 되어 모든 배포 활동에 대한 단일 소스로 사용할 수 있습니다. 리포지토리를 신뢰할 수 있는 단일 소스로 사용하면 안정적인 변경 관리 및 감사 기능이 제공됩니다. 버전 제어 및 액세스 보안도 서비스에 내장되어 있습니다. 둘째, Jenkinsfile에서 빌드 프로세스를 선언하면 배포를 더 쉽게 자동화할 수 있습니다. 프로그램을 꺼내기 위해 UI를 만지작거릴 필요가 없습니다. 코드를 작성하고 Jenkins 파이프라인이 나머지 작업을 수행하도록 할 수 있습니다. 마지막으로 Jenkins는 잘 알려진 CI/CD 도구입니다. 실행 가능한 GitOps 중심 배포 프로세스를 구현하는 데 필요한 모든 기능이 있습니다. 이미 Jenkins를 사용하고 있는 회사의 경우 Jenkinsfile을 사용하여 GitOps로 도약하는 것이 처음부터 시작하는 것보다 훨씬 쉽습니다. 그리고 아직 Jenkins를 사용하지 않는 회사의 경우 학습 곡선이 허용됩니다. 이 기술은 수년에 걸쳐 그 자체로 입증되었으며 개발자가 속도를 높이는 데 사용할 수 있는 많은 학습 리소스와 예제가 있습니다. Jenkins 파이프라인 작업에서 Jenkinsfile을 실행하여 CI/CD 프로세스를 구현하는 상세 예제 - node.js App 배포 - 는 아래 링크를 통해 확인하실 수 있습니다. 감사합니다.

A developer's guide to CI/CD and GitOps with Jenkins Pipelines | Red Hat Developer

Red Hat Developer

A developer's guide to CI/CD and GitOps with Jenkins Pipelines | Red Hat Developer

다음 내용이 궁금하다면?

지금 간편 가입하고 다음 내용을 확인해 보세요!

또는

이미 회원이신가요?

2022년 12월 30일 오전 1:44

 • 

저장 26조회 3,579

댓글 0