클라우드 배포를 위한 CI/CD 파이프라인 설정

신속하게 소프트웨어를 제공하는 것은 클라우드에서 효율적으로 애플리케이션을 실행하는 데 중요합니다. Jenkins는 Oracle Cloud에서 워크로드에 대한 CI(지속적 통합) 및 CD(지속적 배포) 파이프라인을 자동화하는 데 자주 사용되는 제품입니다.

구조

이 참조 아키텍처에서 Jenkins는 Oracle Cloud Infrastructure에 호스팅되어 구축을 중앙 집중화하고 배포를 확장합니다. 연속 통합 프로세스는 애플리케이션을 생성하고 Oracle Cloud Infrastructure Registry(OCIR) 및 Container Engine for Kubernetes(OKE)을 사용하여 배치합니다. GitHub는 소스 코드를 관리하는 데 사용됩니다.

GitHub는 Web hook 통합을 제공하므로 Jenkins는 각 코드 체크인 후 자동화된 빌드 및 테스트 실행을 시작합니다. 샘플 웹 애플리케이션은 일반 사용자가 Container Engine for Kubernetes 클러스터에서 액세스할 수 있는 CI/CD 파이프라인의 일부로 배치됩니다. 프로세스를 간소화하기 위해 Terraform가 기반 구조 자동화에 사용됩니다.

이 참조 아키텍처에서 Terraform은 단일 Jenkins VM에서 컨트롤러(서버) 및 에이전트(작업자) 노드 구성까지 다양한 구성으로 Jenkins를 배포할 수 있는 Terraform 모듈을 활용합니다. 즉, Jenkins 모듈을 비Kubernetes 사용 사례(예: APEX 애플리케이션 개발, VM의 WebLogic 등)를 위한 다른 아키텍처 배포에 통합할 수 있습니다.

에이전트 구성은 작업 로드 요구사항을 반영하는 서로 다른 수의 컴퓨트 인스턴스를 제공하도록 환경을 재구성할 수 있음을 의미합니다. 여기에는 이전 종속성 누적 문제를 방지하기 위해 에이전트 VM을 교체할 수 있는 가능성, 일시적인 종속성 충돌 및 선언되지 않은 종속성 작업을 수행할 수 있는 빌드가 포함됩니다.

Jenkins를 실행하는 VM 노드는 Jenkins를 지원하는 데 필요한 모든 소프트웨어와 함께 사전 구축된 사전 정의된 VM 이미지를 사용하여 구성됩니다.

다음 다이어그램은 이 참조 구조를 보여줍니다.

cicd-oci.png에 대한 설명이 나옵니다.
그림 cicd-oci.png에 대한 설명

cicd-oci-oracle.zip

이 아키텍처에는 다음과 같은 구성요소가 있습니다:
  • 지역

    Oracle Cloud Infrastructure 지역은 가용성 도메인이라고 하는 하나 이상의 데이터 센터를 포함하는 지역화된 지역입니다. 지역은 다른 지역과 독립적이며 방대한 거리는 국가 또는 대륙에서 분리할 수 있습니다.

  • 가용성 도메인

    가용성 도메인은 영역 내에 독립적인 독립형 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 결함 허용 한도를 제공하는 다른 가용성 도메인의 리소스와 격리됩니다. 가용성 도메인은 전원, 냉각 또는 내부 가용성 도메인 네트워크와 같은 인프라를 공유하지 않습니다. 따라서 한 가용성 도메인의 실패는 해당 영역의 다른 가용성 도메인에 영향을 주지 않을 수 있습니다.

  • VCN(가상 클라우드 네트워크) 및 서브넷

    Jenkins는 서브넷에 세그먼트할 수 있는 VCN에 배치된 VM(가상 머신) 컴퓨트 인스턴스에서 실행됩니다. Jenkins는 지역별 공용 서브넷 A에 호스트되고 Container Engine for Kubernetes는 지역별 공용 서브넷 B에 배포됩니다.

  • Compute 인스턴스

    Jenkins가 컴퓨트 인스턴스 VM에 배치됩니다. Container Engine for Kubernetes 클러스터는 컴퓨트 인스턴스에서도 해당 노드를 실행합니다.

  • Container Engine for Kubernetes

    Container Engine for Kubernetes는 컨테이너화된 애플리케이션을 클라우드에 배치하는 데 사용할 수 있는 완전하게 관리되고 확장 가능한 고가용성 서비스입니다. 애플리케이션에 필요한 컴퓨트 리소스를 지정하면 Container Engine for Kubernetes가 기존 테넌시의 Oracle Cloud Infrastructure에 프로비전합니다.

  • 레지스트리

    레지스트리는 운용 워크플로우의 개발을 간소화할 수 있는 Oracle 관리 레지스트리입니다. 레지스트리를 사용하면 개발자가 Docker 이미지와 같은 개발 아티팩트를 쉽게 저장, 공유 및 관리할 수 있습니다.

  • Jenkins

    Jenkins는 개발자가 소프트웨어를 안정적으로 구축, 테스트 및 배치할 수 있는 오픈 소스 자동화 서버입니다. Jenkins는 마스터에 의해 건물 프로젝트의 작업 로드가 여러 에이전트 노드에 위임되는 마스터/에이전트 모드를 지원합니다. 단일 Jenkins 설치는 여러 프로젝트를 호스트하거나 빌드 및 테스트에 대해 서로 다른 환경을 제공할 수 있습니다.

권장 사항

요구 사항은 여기에 설명된 아키텍처와 다를 수 있습니다. 다음 권장 사항을 시작점으로 사용하십시오.

  • 컴퓨트 구성

    이 아키텍처는 VM.Standard2.1 구성의 Oracle Linux OS 이미지를 사용하여 Jenkins 서버와 Container Engine for Kubernetes 클러스터 노드를 모두 호스트합니다. 응용 프로그램에 더 많은 메모리 또는 코어가 필요한 경우 다른 구성을 선택할 수 있습니다.

  • VCN

    VCN를 생성할 때 VCN의 서브넷에 연결할 리소스 수에 따라 필요한 CIDR 블록 수 및 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.

    VCN를 생성한 후 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.

    이 구조는 공용 VCN를 사용하여 Container Engine for Kubernetes를 호스트합니다. 전용 VCN를 사용할 수도 있습니다. 이 경우 NAT 게이트웨이를 사용하여 공용 인터넷을 통해 클러스터에 액세스 권한을 부여합니다.

  • Jenkins

    이 구조는 컴퓨트 인스턴스에 Jenkins를 배치합니다. Jenkins 마스터 노드는 CI/CD 파이프라인을 빌드하는 데 사용됩니다. 병렬로 작성 및 실행할 파이프라인이 여러 개 있는 경우 Jenkins 에이전트 노드를 사용하여 파이프라인을 더 개발할 수 있습니다.

  • Container Engine for Kubernetes

    이 구조는 Container Engine for Kubernetes 클러스터를 배치합니다. 작업자 노드는 VM.Standard2.1 Oracle Linux OS에 배치됩니다. 이 아키텍처는 클러스터에서 세 개의 작업자 노드를 사용하지만 각 클러스터에 최대 1000개의 노드를 만들 수 있습니다.

  • 레지스트리

    이 구조는 레지스트리를 내부 사용을 위한 전용 Docker 레지스트리로 배치합니다. Docker 이미지는 레지스트리에서 푸시 및 풀링됩니다. 레지스트리를 공용 Docker 레지스트리로 사용하여 인터넷 액세스 권한이 있는 모든 사용자와 해당 URL에 대한 지식을 통해 Oracle Cloud의 공용 저장소에서 이미지를 가져올 수도 있습니다.

고려 사항

  • 확장성

    로드에 따라 Container Engine for Kubernetes 클러스터의 작업자 노드 수를 업데이트하여 응용 프로그램을 확장할 수 있습니다. 클러스터의 작업자 노드 수를 줄여 확장할 수도 있습니다. 클러스터에 서비스를 생성할 때 로드 밸런서를 생성하여 해당 서비스에 지정된 노드 간에 트래픽을 분배할 수 있습니다. Jenkins의 경우 Jenkins 마스터 노드를 사용하여 여러 파이프라인에 대한 에이전트를 더 생성할 수 있습니다.

  • 애플리케이션 가용성

    결함 도메인은 단일 가용성 도메인 내에서 최상의 복원성을 제공합니다. 여러 가용성 도메인에서 동일한 작업을 수행하는 컴퓨트 인스턴스를 배치할 수 있습니다. 이 설계는 중복성을 도입하여 단일 실패 지점을 제거합니다.

  • 관리 용이성

    이 구조는 소스 제어를 위해 GitHub에서 호스트되는 샘플 웹 애플리케이션을 사용합니다. 레지스트리는 빌드 파이프라인에서 애플리케이션에 대한 Docker 빌드 이미지를 저장하는 데 사용됩니다.

  • 보안

    정책을 사용하여 회사가 보유한 Oracle Cloud Infrastructure 리소스에 액세스할 수 있는 사용자 및 방법을 제한합니다.

    Container Engine for Kubernetes는 IAM(Oracle Cloud Infrastructure Identity and Access Management) 와 통합되어 고유 Oracle Cloud Infrastructure ID 기능을 통한 간편한 인증을 제공합니다.

배치

이 참조 구조를 배치하는 데 필요한 코드는 GitHub에서 사용할 수 있습니다. 한 번의 클릭으로 코드를 Oracle Cloud Infrastructure Resource Manager로 가져와서 스택을 생성하고 배치할 수 있습니다. 또는 Terraform CLI를 사용하여 GitHub에서 컴퓨터로 코드를 다운로드하고, 코드를 사용자정의하고, 구조를 배치합니다.

  • Oracle Cloud Infrastructure Resource Manager를 사용하여 배치:
    1. Oracle Cloud에 배치누릅니다.

      아직 사인인하지 않은 경우 테넌시 및 사용자 인증서를 입력합니다.

    2. 조건 및 조항을 검토하고 동의합니다.
    3. 스택을 배치하고자 하는 영역을 선택하십시오.
    4. 화면 프롬프트 및 지침에 따라 스택을 만듭니다.
    5. 스택을 생성한 후 Terraform 작업 을 누르고 계획 을 선택합니다.
    6. 작업이 완료될 때까지 기다린 후 계획을 검토하십시오.

      변경하려면 스택 세부 정보 페이지로 돌아가서 스택 편집 을 누르고 필요에 따라 변경합니다. 그런 다음 계획 작업을 다시 실행합니다.

    7. 더 이상 변경할 필요가 없는 경우 스택 세부 정보 페이지로 돌아가서 Terraform 작업 을 누르고 적용 을 선택합니다.
  • Terraform CLI를 사용하여 배치합니다:
    1. GitHub로 이동합니다.
    2. 코드를 로컬 컴퓨터에 다운로드하거나 복제합니다.
    3. README.md의 지침을 따릅니다.

변경 로그

이 로그에는 중요한 변경사항이 나열됩니다: