Automation Pipelines 관리자 또는 개발자는 Automation Pipelines 및 VMware Tanzu Kubernetes Grid Integrated Edition(이전 이름: VMware Enterprise PKS)을 사용하여 소프트웨어 애플리케이션 배포를 Kubernetes 클러스터로 자동화할 수 있습니다. 이 사용 사례에서는 애플리케이션의 릴리스를 자동화하는 데 사용할 수 있는 다른 방법을 설명합니다.

이 사용 사례에서는 두 단계가 포함된 파이프라인을 생성하고 Jenkins를 사용하여 애플리케이션을 구축하고 배포합니다.

  • 첫 번째 단계는 개발을 위한 단계입니다. 이 단계에서는 Jenkins를 사용하여 코드를 GitHub 저장소의 분기에서 풀한 후 구축하고 테스트하고 게시합니다.
  • 두 번째 단계는 배포를 위한 단계입니다. 이 단계에서는 파이프라인이 애플리케이션을 Kubernetes 클러스터에 배포할 수 있도록 주요 사용자의 승인이 필요한 사용자 작업을 실행합니다.

파이프라인 업무 공간에서 Kubernetes API 끝점을 사용하는 경우 Automation Pipelines은 CI(지속적 통합) 작업 또는 사용자 지정 작업을 실행하는 데 필요한 Kubernetes 리소스(예: ConfigMap, Secret 및 포드)를 생성합니다. Automation Pipelines은 NodePort를 사용하여 컨테이너와 통신합니다.

파이프라인 실행 간에 데이터를 공유하려면 영구 볼륨 할당을 제공해야 합니다. 그러면 Automation Pipelines은 영구 볼륨 할당을 컨테이너에 마운트하여 데이터를 저장하고 후속 파이프라인 실행에 사용합니다.

Automation Pipelines 파이프라인 업무 공간은 지속적 통합 작업 및 사용자 지정 작업을 위해 Docker 및 Kubernetes를 지원합니다.

업무 공간 구성에 대한 자세한 내용은 파이프라인 작업 공간 구성에서 참조하십시오.

애플리케이션을 Kubernetes 클러스터에 배포하는 워크플로는 Jenkins, Automation Pipelines, GitHub, Git에 대한 트리거 및 Kubernetes를 사용합니다.

파이프라인이 애플리케이션 구축, 테스트, 게시 및 배포를 수행할 수 있도록 개발 도구, 배포 인스턴스 및 파이프라인 YAML 파일이 준비되어 있어야 합니다. 파이프라인은 Kubernetes 클러스터의 개발 및 운영 인스턴스에 애플리케이션을 배포합니다.

이 워크플로는 애플리케이션을 Kubernetes 클러스터로 릴리스하는 프로세스를 탐색하는 데 유용합니다.

애플리케이션 릴리스를 자동화하는 기타 방법:

  • Jenkins를 사용하여 애플리케이션을 구축하는 대신 Automation Pipelines 기본 빌드 기능 및 Docker 빌드 호스트를 사용할 수 있습니다.
  • 애플리케이션을 Kubernetes 클러스터에 배포하는 대신 AWS(Amazon Web Services) 클러스터에 배포할 수 있습니다.

Automation Pipelines 기본 구축 기능 및 Docker 호스트 사용에 대한 자세한 내용은 다음을 참조하십시오.

사전 요구 사항

  • 배포할 애플리케이션 코드가 작동하는 GitHub 저장소에 있는지 확인합니다.
  • 작동하는 Jenkins 인스턴스가 있는지 확인합니다.
  • 작동하는 이메일 서버가 있는지 확인합니다.
  • 이메일 서버에 연결하는 이메일 끝점을 Automation Pipelines에서 생성합니다.
  • 파이프라인이 애플리케이션을 배포할 Kubernetes 클러스터 2개(개발 및 운영)를 AWS(Amazon Web Services)에 설정합니다.
  • GitHub 저장소에 파이프라인의 YAML 코드가 포함되어 있는지, 또는 환경의 메타데이터와 규격을 정의하는 YAML 파일이 포함되어 있는지 확인합니다.

프로시저

  1. Automation Pipelines에서 끝점 > 새 끝점을 클릭하여, GitHub 저장소에서 코드를 풀하기 위해 파이프라인에서 사용할 Jenkins 끝점을 생성합니다.
    온-프레미스 Jenkins 인스턴스의 끝점은 클라우드 프록시를 사용하며 Jenkins URL, 사용자 이름, 암호 및 폴더 경로를 입력해야 합니다.
  2. Kubernetes 끝점을 생성하려면 새 끝점을 클릭합니다.
    1. 개발 Kubernetes 클러스터용 끝점을 생성합니다.
    2. 운영 Kubernetes 클러스터용 끝점을 생성합니다.
      Kubernetes 클러스터의 URL은 포트 번호를 포함하거나 포함하지 않을 수 있습니다.
      예를 들면 다음과 같습니다.
      https://10.111.222.333:6443
      https://api.kubernetesserver.fa2c1d78-9f00-4e30-8268-4ab81862080d.k8s-user.com
    온-프레미스 Kubernetes 인스턴스의 끝점은 클라우드 프록시를 사용하며 Kubernetes 클러스터의 URL, 사용자 이름 및 암호를 입력해야 합니다.
  3. 애플리케이션의 컨테이너(예: Wordpress)를 개발 Kubernetes 클러스터에 배포하는 파이프라인을 생성하고 파이프라인의 입력 속성을 설정합니다.
    1. 파이프라인을 트리거할 커밋 코드를 파이프라인이 GitHub에서 인식할 수 있게 하려면 파이프라인에서 입력 탭을 클릭하고 속성 자동 삽입을 선택합니다.
    2. GIT_COMMIT_ID라는 속성을 추가하고 옆에 있는 별 모양을 클릭합니다.
      파이프라인 실행 시 Git 트리거가 반환하는 커밋 ID가 표시됩니다.
    Jenkins 및 Kubernetes를 사용하는 파이프라인의 입력 탭에 Git 입력 속성이 표시됩니다.
  4. 파이프라인 성공 또는 실패 시 이메일을 전송하는 알림을 추가합니다.
    1. 파이프라인에서 알림 탭을 클릭하고 추가를 클릭합니다.
    2. 파이프라인 실행이 완료되었을 때 이에 대한 이메일 알림을 추가하려면 이메일을 선택한 후 완료를 선택합니다. 그런 다음 이메일 서버를 선택하고 이메일 주소를 입력한 후 저장을 클릭합니다.
    3. 파이프라인 실패에 대한 또 다른 이메일 알림을 추가하려면 실패를 선택하고 저장을 클릭합니다.
    이메일 알림을 추가할 때 파이프라인 상태 중 하나를 선택하고 이메일 서버와 받는 사람을 선택합니다.
  5. 파이프라인에 개발 단계를 추가하고, 애플리케이션을 구축, 테스트 및 게시하는 작업을 추가합니다. 그런 다음 각 작업을 검증합니다.
    1. 애플리케이션을 구축하려면 Jenkins 끝점을 사용하고 Jenkins 서버에서 구축 작업을 실행하는 Jenkins 작업을 추가합니다. 그런 다음 파이프라인이 코드를 풀할 수 있도록 ${input.GIT_BRANCH_NAME} 형식으로 Git 분기를 입력합니다.
    2. 애플리케이션을 테스트하려면 동일한 Jenkins 끝점을 사용하고 Jenkins 서버에서 테스트 작업을 실행하는 Jenkins 작업을 추가합니다. 그런 다음 동일한 Git 분기를 입력합니다.
    3. 애플리케이션을 게시하려면 동일한 Jenkins 끝점을 사용하고 Jenkins 서버에서 게시 작업을 실행하는 Jenkins 작업을 추가합니다. 그런 다음 동일한 Git 분기를 입력합니다.
    Jenkins 및 Kubernetes를 사용하는 파이프라인에서 애플리케이션을 구축하는 Jenkins 작업은 Jenkins 끝점, Jenkins 작업 및 분기 이름을 사용합니다.
  6. 파이프라인에 배포 단계를 추가한 다음 애플리케이션 배포에 대한 승인을 요청하는 작업과 Kubernetes 클러스터에 애플리케이션을 배포하는 또 다른 작업을 추가합니다. 그런 다음 각 작업을 검증합니다.
    1. 애플리케이션 배포에 대한 승인을 요청하려면 '사용자 작업' 작업을 추가하고, 승인을 해야 하는 사용자의 이메일 주소를 추가한 다음 메시지를 입력합니다. 그런 다음 이메일 보내기를 사용하도록 설정합니다.
    2. 애플리케이션을 배포하려면 Kubernetes 작업을 추가합니다. 그런 다음 Kubernetes 작업 속성에서 개발 Kubernetes 클러스터를 선택하고 생성 작업을 선택한 다음 로컬 정의 페이로드 소스를 선택합니다. 그런 다음 로컬 YAML 파일을 선택합니다.
  7. Automation Pipelines이 Git 트리거를 사용하도록 하는 Git Webhook를 추가합니다. Git Webhook는 개발자가 코드를 커밋하면 파이프라인을 트리거합니다.
    Kubernetes 파이프라인을 트리거하는 Git용 Webook에서 분기 및 비밀 토큰을 입력해야 합니다.
  8. 파이프라인을 테스트하려면 GitHub 저장소로 이동하여 애플리케이션 YAML 파일을 업데이트한 다음 변경 내용을 커밋합니다.
    1. Automation Pipelines에 커밋이 표시되는지 확인합니다.
    1. 트리거 > Git > 작업을 클릭합니다.
    2. 파이프라인 트리거를 찾아봅니다.
    3. 대시보드 > 파이프라인 대시보드를 클릭합니다.
    4. 파이프라인 대시보드의 최근에 성공한 변경 내용 영역에서 GIT_COMMIT_ID를 찾습니다.
  9. 파이프라인 코드를 확인하고, 변경 내용이 표시되는지 확인합니다.

결과

축하합니다! Kubernetes 클러스터에 소프트웨어 애플리케이션의 배포를 자동화했습니다.

예: Kubernetes 클러스터에 애플리케이션을 배포하는 예시 파이프라인 YAML

이 예시에 사용된 파이프라인 유형의 경우 YAML은 다음 코드와 유사합니다.

apiVersion: v1
kind: Namespace
metadata:
  name: ${input.GIT_BRANCH_NAME}
  namespace: ${input.GIT_BRANCH_NAME}
---  
apiVersion: v1
data:
  .dockercfg: eyJzeW1waG9ueS10YW5nby1iZXRhMi5qZnJvZy5pbyI6eyJ1c2VybmFtZSI6InRhbmdvLWJldGEyIiwicGFzc3dvcmQiOiJhRGstcmVOLW1UQi1IejciLCJlbWFpbCI6InRhbmdvLWJldGEyQHZtd2FyZS5jb20iLCJhdXRoIjoiZEdGdVoyOHRZbVYwWVRJNllVUnJMWEpsVGkxdFZFSXRTSG8zIn19
kind: Secret
metadata:
  name: jfrog
  namespace: ${input.GIT_BRANCH_NAME}
type: kubernetes.io/dockercfg
---   
apiVersion: v1
kind: Service
metadata:
  name: pipelines
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: pipelines
spec:
  ports:
    - port: 80
  selector:
    app: pipelines
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: pipelines
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: pipelines
spec:
  selector:
    matchLabels:
      app: pipelines
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: pipelines
        tier: frontend
    spec:
      containers:
      - name: pipelines
        image: cas.jfrog.io/pipelines:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: pipelines
      imagePullSecrets:
      - name: jfrog
      

다음에 수행할 작업

소프트웨어 애플리케이션을 운영 Kubernetes 클러스터에 배포하려면 위의 단계를 다시 수행하면서 운영 클러스터를 선택하십시오.

Automation Pipelines과 Jenkins의 통합에 대한 자세한 내용은 Automation Pipelines과 Jenkins를 통합하는 방법 항목을 참조하십시오.