2장. Pipeline

2.1. OpenShift Pipelines 이해

중요

OpenShift Pipelines는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수도 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 고객은 출시 예정된 제품 기능을 Preview를 통해 미리 사용해 보면서 테스트하고 개발 과정에서 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 https://access.redhat.com/support/offerings/techpreview/를 참조하십시오.

Red Hat OpenShift Pipelines는 Kubernetes 리소스 기반의 클라우드 네이티브 CI/CD(연속 통합 및 연속 제공) 솔루션입니다. Tekton 빌딩 블록을 사용하여 기본 구현 세부 사항을 요약함으로써 여러 플랫폼에서 배포를 자동화합니다. Tekton은 Kubernetes 배포 전반에서 이식 가능한 CI/CD Pipeline을 정의하는 데 사용되는 여러 가지 표준 CRD(Custom Resource Definitions)를 도입합니다.

2.1.1. 주요 기능

  • Red Hat OpenShift Pipelines는 격리된 컨테이너에서 필요한 모든 종속 항목이 포함된 Pipeline을 실행하는 서버리스 CI/CD 시스템입니다.
  • Red Hat OpenShift Pipelines는 마이크로 서비스 기반 아키텍처에서 작업하는 분산된 팀을 위해 설계되었습니다.
  • Red Hat OpenShift Pipelines는 쉽게 확장하고 기존 Kubernetes 툴과 통합할 수 있는 표준 CI/CD 파이프라인 정의를 사용하므로 필요에 따라 스케일링할 수 있습니다.
  • Red Hat OpenShift Pipelines를 사용하면 모든 Kubernetes 플랫폼에서 이식 가능한 S2I(Source-to-Image), Buildah, Buildpacks, Kaniko 등의 Kubernetes 툴로 이미지를 빌드할 수 있습니다.
  • OpenShift Container Platform 개발자 콘솔을 사용하여 Tekton 리소스를 생성하고, Pipeline Run 로그를 검토하고, OpenShift Container Platform 네임스페이스에서 Pipeline을 관리할 수 있습니다.

2.1.2. Red Hat OpenShift Pipelines 개념

Red Hat OpenShift Pipelines는 애플리케이션에 대한 CI/CD 파이프라인을 어셈블할 수 있는 빌드 블록 역할을 하는 표준 CRD(Custom Resource Definitions) 집합을 제공합니다.

Task
Task는 Pipeline에서 구성 가능한 최소 단위입니다. 근본적으로 Pipeline 빌드를 형성하는 입력 및 출력의 기능입니다. 개별적으로 또는 Pipeline의 일부로 Task를 실행할 수 있습니다. Pipeline에 하나 이상의 Task가 포함되며, 각 Task는 하나 이상의 단계(Step)로 구성됩니다. 단계(Step)는 Task에서 순차적으로 실행되는 일련의 명령 집합입니다.
Pipeline
Pipeline은 애플리케이션 빌드, 배포 및 제공 작업을 자동화하는 복잡한 워크플로를 구성하기 위해 실행되는 일련의 Task로 구성됩니다. PipelineResources와 매개변수, 그리고 하나 이상의 Task로 구성된 집합체가 Pipeline입니다. Pipeline은 입력 및 출력으로서 Task에 추가되는 PipelineResources를 사용하여 외부 세계와 상호 작용합니다.
PipelineRun
PipelineRun은 Pipeline의 실행 중 인스턴스입니다. PipelineRun에 의해 Pipeline이 시작되고, Pipeline에서 실행되는 각 Task에 대한 TaskRun 생성이 관리됩니다.
TaskRun
TaskRun은 Pipeline의 각 Task에 대한 PipelineRun에 의해 자동으로 생성되며, Pipeline에서 Task 인스턴스를 실행한 결과입니다. Pipeline 밖에서 Task를 실행하는 경우, 수동으로 생성해야 할 수도 있습니다.
Workspace
Workspace는 런타임 시 입력을 수신하거나 출력을 제공하기 위해 Task에 필요한 스토리지 볼륨입니다. Task 또는 Pipeline은 Workspace를 선언하고, TaskRun 또는 PipelineRun은 선언된 Workspace에 마운트되는 스토리지 볼륨의 실제 위치를 제공합니다. 그 결과 유연하고 재사용 가능한 Task가 되며, 여러 Task에서 Workspace를 공유할 수 있게 됩니다.
Trigger
Trigger는 Git pull 요청과 같은 외부 이벤트를 캡처하고, 이벤트 페이로드를 처리하여 주요 정보를 추출합니다. 추출된 정보는 사전 정의된 매개변수 세트에 맵핑되고, 이 매개변수 세트는 Kubernetes 리소스 생성 및 배포와 관련된 일련의 Task를 트리거합니다. Pipeline과 함께 Trigger를 사용하여 Kubernetes 리소스를 통해 실행이 전체적으로 정의된 완전한 CI/CD 시스템을 생성할 수 있습니다.
Condition
Condition은 Pipeline에서 Task를 실행하기 전에 수행되는 검증 또는 검사를 나타냅니다. Condition은 반환 값이 True 또는 False인 논리 테스트를 수행하는 if 문과 같습니다. 모든 Condition에서 True가 반환된면 Task가 실행되지만 Condition 중 하나라도 실패하면 해당 Task와 모든 후속 Task를 건너 뜁니다. Pipeline에서 Condition을 사용하여 여러 가지 시나리오를 다루는 복잡한 워크플로를 생성할 수 있습니다.

2.1.3. 자세한 OpenShift Pipeline 개념

이 안내서에서는 다양한 Pipeline 개념을 소개합니다.

2.1.3.1. Task

Tasks는 Pipeline 구성 블록이며, 순차적으로 실행되는 단계들로 구성됩니다. Task는 재사용이 가능하며 여러 Pipeline에서 사용할 수 있습니다.

Steps는 이미지 빌드와 같은 특정 목표를 달성하는 일련의 명령입니다. 모든 작업은 Pod로 실행되고 각 단계는 해당 Pod 내에서 컨테이너로 실행됩니다. 여러 단계가 동일한 Pod 내에서 실행되기 때문에 이러한 단계에서 파일, 구성 맵, 보안을 캐싱하기 위해 동일한 볼륨에 액세스할 수 있습니다.

다음 예는 apply-manifests Task를 보여줍니다.

apiVersion: tekton.dev/v1beta1 1
kind: Task 2
metadata:
  name: apply-manifests 3
spec: 4
  workspaces:
  - name: source
  params:
    - name: manifest_dir
      description: The directory in source that contains yaml manifests
      type: string
      default: "k8s"
  steps:
    - name: apply
      image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest
      workingDir: /workspace/source
      command: ["/bin/bash", "-c"]
      args:
        - |-
          echo Applying manifests in $(params.manifest_dir) directory
          oc apply -f $(params.manifest_dir)
          echo -----------------------------------
1
Task API 버전은 v1beta1입니다.
2
Kubernetes 오브젝트 유형은 Task입니다.
3
이 작업의 고유 이름입니다.
4
작업의 매개변수 및 단계 목록과 작업에서 사용하는 작업 공간입니다.

이 작업은 Pod를 시작하고 해당 Pod 내에서 지정된 이미지를 사용하는 컨테이너를 실행하여 지정된 명령을 실행합니다.

2.1.3.2. TaskRun

TaskRun은 클러스터에서 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 Task를 인스턴스화합니다. 자체로 또는 PipelineRun의 일부로 호출될 수 있습니다.

Task는 컨테이너 이미지를 실행하는 하나 이상의 단계(Step)로 구성되며, 각 컨테이너 이미지의 특정 빌드 작업을 수행합니다. TaskRun은 Task의 모든 단계(Step)를 지정된 순서로 실행하며, 모든 단계(Step)가 성공적으로 실행되거나 실패하는 단계가 발생하면 실행을 멈춥니다.

다음 예는 관련 입력 매개변수를 사용하여 apply-manifests Task를 실행하는 TaskRun을 보여줍니다.

apiVersion: tekton.dev/v1beta1 1
kind: TaskRun 2
metadata:
  name: apply-manifests-taskrun 3
spec: 4
  serviceAccountName: pipeline
  taskRef: 5
    kind: Task
    name: apply-manifests
  workspaces: 6
  - name: source
    persistentVolumeClaim:
      claimName: source-pvc
1
TaskRun API 버전은 v1beta1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 TaskRun입니다.
3
이 TaskRun을 식별하는 고유한 이름입니다.
4
TaskRun의 정의입니다. 이 TaskRun에 대한 Task 및 필수 작업 Workspace가 지정됩니다.
5
이 TaskRun에 사용되는 Task 참조의 이름입니다. 이 TaskRun은 apply-manifests Task를 실행합니다.
6
TaskRun에서 사용하는 Workspace입니다.

2.1.3.3. Pipeline

파이프라인은 특정 실행 순서대로 정렬된 Task 리소스 컬렉션입니다. 하나 이상의 작업이 포함된 파이프라인을 사용하여 애플리케이션에 대한 CI/CD 워크플로를 정의할 수 있습니다.

Pipeline 리소스 정의는 함께 사용하면 파이프라인에서 특정 목표를 달성할 수 있는 여러 필드 또는 특성으로 구성됩니다. 각 Pipeline 리소스 정의에는 특정 입력을 수집하고 특정 출력을 생성하는 Task가 하나 이상 포함되어야 합니다. 또한 파이프라인 정의에는 애플리케이션 요구 사항에 따라 Conditions, Workspaces, Parameters 또는 Resources가 선택적으로 포함될 수 있습니다.

다음 예제에서는 buildah ClusterTask 리소스를 사용하여 Git 리포지토리에서 애플리케이션 이미지를 빌드하는 build-and-deploy 파이프라인을 보여줍니다.

apiVersion: tekton.dev/v1beta1 1
kind: Pipeline 2
metadata:
  name: build-and-deploy 3
spec: 4
  workspaces: 5
  - name: shared-workspace
  params: 6
  - name: deployment-name
    type: string
    description: name of the deployment to be patched
  - name: git-url
    type: string
    description: url of the git repo for the code of deployment
  - name: git-revision
    type: string
    description: revision to be used from repo of the code for deployment
    default: "pipelines-1.3"
  - name: IMAGE
    type: string
    description: image to be build from the code
  tasks: 7
  - name: fetch-repository
    taskRef:
      name: git-clone
      kind: ClusterTask
    workspaces:
    - name: output
      workspace: shared-workspace
    params:
    - name: url
      value: $(params.git-url)
    - name: subdirectory
      value: ""
    - name: deleteExisting
      value: "true"
    - name: revision
      value: $(params.git-revision)
  - name: build-image 8
    taskRef:
      name: buildah
      kind: ClusterTask
    params:
    - name: TLSVERIFY
      value: "false"
    - name: IMAGE
      value: $(params.IMAGE)
    workspaces:
    - name: source
      workspace: shared-workspace
    runAfter:
    - fetch-repository
  - name: apply-manifests 9
    taskRef:
      name: apply-manifests
    workspaces:
    - name: source
      workspace: shared-workspace
    runAfter: 10
    - build-image
  - name: update-deployment
    taskRef:
      name: update-deployment
    workspaces:
    - name: source
      workspace: shared-workspace
    params:
    - name: deployment
      value: $(params.deployment-name)
    - name: IMAGE
      value: $(params.IMAGE)
    runAfter:
    - apply-manifests
1
Pipeline API 버전은 v1beta1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 Pipeline입니다.
3
이 Pipeline의 고유한 이름입니다.
4
Pipeline의 정의와 구조를 지정합니다.
5
Pipeline의 모든 Task에 사용되는 Workspace입니다.
6
Pipeline의 모든 Task에 사용되는 매개변수입니다.
7
Pipeline에서 사용되는 Task 목록을 지정합니다.
8
buildah ClusterTask를 사용하여 주어진 Git 리포지토리에서 애플리케이션 이미지를 빌드하는 Task build-image입니다.
9
동일한 이름의 사용자 지정 Task를 사용하는 Task apply-manifests입니다.
10
Pipeline에서 Task가 실행되는 순서를 지정합니다. 예에서는 apply-manifests Task는 build-image Task가 완료된 후에만 실행됩니다.

2.1.3.4. PipelineRun

PipelineRun은 클러스터에서 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 Pipeline을 인스턴스화합니다. PipelineRun의 각 Task에 해당하는 TaskRun이 자동으로 생성됩니다.

Pipeline의 모든 Task는 정의된 순서로 실행되며, 모든 Task가 성공적으로 실행되거나 실패하는 Task가 발생되면 실행을 멈춥니다. status 필드는 모니터링 및 감시 목적으로 PipelineRun에서 각 TaskRun의 진행 상황을 추적하고 저장합니다.

다음 예는 관련 리소스 및 매개변수를 사용하여 build-and-deploy Pipeline을 실행하는 PipelineRun을 보여줍니다.

apiVersion: tekton.dev/v1beta1 1
kind: PipelineRun 2
metadata:
  name: build-deploy-api-pipelinerun 3
spec:
  pipelineRef:
    name: build-and-deploy 4
  params: 5
  - name: deployment-name
    value: vote-api
  - name: git-url
    value: https://github.com/openshift-pipelines/vote-api.git
  - name: IMAGE
    value: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/vote-api
  workspaces: 6
  - name: shared-workspace
    volumeClaimTemplate:
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 500Mi
1
PipelineRun API 버전은 v1beta1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 PipelineRun입니다.
3
이 PipelineRun을 식별하는 고유한 이름입니다.
4
실행할 Pipeline의 이름입니다. 예에서는 build-and-deploy입니다.
5
Pipeline을 실행하는 데 필요한 매개변수 목록을 지정합니다.
6
PipelineRun에서 사용하는 Workspace입니다.

2.1.3.5. Workspace

참고

PipelineResources는 디버그하기 어렵고 범위가 제한되며 Task의 재사용 가능성을 낮추기 때문에 OpenShift Pipelines에서는 PipelineResources 대신 Workspace를 사용할 것을 권장합니다.

Workspace는 런타임 시 Pipeline의 Task에 필요한 공유 스토리지 볼륨을 선언합니다. 볼륨의 실제 위치를 지정하는 대신 Workspace를 사용하여 런타임 시 필요한 파일 시스템 전체 또는 파일 시스템의 일부를 선언할 수 있습니다. TaskRun 또는 PipelineRun에서 해당 Workspace에 마운트된 볼륨의 특정 위치 세부 사항을 제공해야 합니다. 이러한 방식으로 런타임 스토리지 볼륨에서 볼륨 선언을 분리하면 사용자 환경에 종속되지 않으며 유연성 높고 재사용 가능한 Task로 만들 수 있습니다.

다음과 같은 용도로 Workspace를 활용할 수 있습니다.

  • Task 입력 및 출력 저장
  • Task 간 데이터 공유
  • 시크릿에 보관된 자격 증명의 마운트 지점으로 작업 공간 활용
  • ConfigMaps에 보관된 구성의 마운트 지점으로 작업 공간 활용
  • 조직에서 공유하는 공통 도구의 마운트 지점으로 작업 공간 활용
  • 작업 속도를 높이는 빌드 아티팩트 캐시 생성

다음을 사용하여 TaskRun 또는 PipelineRun에서 Workspace를 지정할 수 있습니다.

  • 읽기 전용 ConfigMaps 또는 Secret
  • 다른 Task와 공유되는 기존 PersistentVolumeClaim
  • 제공된 VolumeClaimTemplate의 PersistentVolumeClaim
  • TaskRun이 완료되면 삭제되는 emptyDir

다음은 Pipeline에 정의된 대로 build-imageapply-manifests Task에 대한 shared-workspace Workspace를 선언하는 build-and-deploy Pipeline의 코드 스니펫 예입니다.

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: build-and-deploy
spec:
  workspaces: 1
  - name: shared-workspace
  params:
...
  tasks: 2
  - name: build-image
   taskRef:
     name: buildah
     kind: ClusterTask
   params:
   - name: TLSVERIFY
     value: "false"
   - name: IMAGE
     value: $(params.IMAGE)
   workspaces: 3
   - name: source 4
     workspace: shared-workspace 5
   runAfter:
   - fetch-repository
 - name: apply-manifests
   taskRef:
     name: apply-manifests
   workspaces: 6
   - name: source
     workspace: shared-workspace
   runAfter:
    - build-image
...
1
Pipeline에 정의된 Task 사이에 공유되는 Workspace 목록입니다. Pipeline은 필요한 만큼 Workspace를 정의할 수 있습니다. 예에서는 shared-workspace라는 Workspace 한 개만 선언됩니다.
2
Pipeline에서 사용되는 Task의 정의입니다. 이 스니펫은 공통 Workspace를 공유하는 두 개의 Task, build-imageapply-manifest를 정의합니다.
3
build-image Task에 사용되는 Workspace 목록입니다. Task 정의에 필요한 만큼의 Workspace를 포함할 수 있습니다. 하지만 Task에 사용되는 쓰기 가능한 Workspace를 한 개로 제한하는 것이 좋습니다.
4
Task에서 사용되는 Workspace를 고유하게 식별하는 이름입니다. 이 Task는 source라는 Workspace 한 개를 사용합니다.
5
Task에서 사용하는 Pipeline Workspace의 이름입니다. 이어서 source Workspace는 shared-workspace라는 Pipeline Workspace를 사용한다는 점에 주목하십시오.
6
apply-manifests Task에 사용되는 Workspace 목록입니다. 이 Task는 build-image Task와 source Workspace를 공유한다는 점에 주목하십시오.

작업 공간을 사용하면 여러 작업에서 데이터를 공유하고 파이프라인의 각 작업을 실행하는 동안 필요한 하나 이상의 볼륨을 지정할 수 있습니다. 영구 볼륨 클레임을 생성하거나 사용자를 대신하여 영구 볼륨 클레임을 생성하는 볼륨 클레임 템플릿을 제공할 수 있습니다.

다음의 build-deploy-api-pipelinerun PipelineRun 코드 조각에서는 볼륨 클레임 템플릿을 사용하여 build-and-deploy 파이프라인에 사용된 shared-workspace 작업 공간의 스토리지 볼륨을 정의하는 영구 볼륨 클레임을 생성합니다.

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: build-deploy-api-pipelinerun
spec:
  pipelineRef:
    name: build-and-deploy
  params:
...

  workspaces: 1
  - name: shared-workspace 2
    volumeClaimTemplate: 3
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 500Mi
1
PipelineRun에서 볼륨 바인딩이 제공될 Pipeline Workspace 목록을 지정합니다.
2
볼륨이 제공될 Pipeline의 Workspace 이름입니다.
3
작업 공간의 스토리지 볼륨을 정의하기 위해 영구 볼륨 클레임을 생성하는 볼륨 클레임 템플릿을 지정합니다.

2.1.3.6. Trigger

Kubernetes 리소스에서 전체 CI/CD 실행을 정의하는 완전한 CI/CD 시스템을 생성하려면 파이프라인과 함께 트리거를 사용합니다. 트리거는 외부 이벤트를 캡처하고 처리하여 주요 정보를 추출합니다. 이 이벤트 데이터를 미리 정의된 매개변수 집합에 매핑하면 Kubernetes 리소스를 생성 및 배포하고 파이프라인을 인스턴스화할 수 있는 일련의 작업이 트리거됩니다.

애플리케이션에 Red Hat OpenShift Pipeline을 사용하여 CI/CD 워크플로를 정의하는 경우를 예로 들 수 있습니다. 새로운 변경 사항을 애플리케이션 리포지토리에 적용하려면 파이프라인을 시작해야 합니다. 트리거는 모든 변경 이벤트를 캡처하여 처리하고 최신 변경 사항이 적용된 새 이미지를 배포하는 파이프라인 실행을 트리거하는 방식으로 이 프로세스를 자동화합니다.

트리거는 함께 작동하여 재사용 가능하고 분리되고 자체 유지되는 CI/CD 시스템을 형성하는 다음과 같은 주요 리소스로 구성됩니다.

  • TriggerBinding 리소스는 이벤트를 검증하고 이벤트 페이로드에서 필드를 추출한 다음 해당 필드를 매개변수로 저장합니다.
  • TriggerTemplate 리소스는 리소스를 생성해야 하는 방법에 대해 표준 역할을 합니다. TriggerBinding 리소스에서 매개변수화된 데이터를 사용하는 방식을 지정합니다. 트리거 템플릿은 트리거 바인딩을 통해 입력을 수신한 다음 새 파이프라인 리소스를 생성하고 새 파이프라인 실행을 시작하는 일련의 작업을 수행합니다.
  • EventListener 리소스는 JSON 페이로드와 함께 들어오는 HTTP 기반 이벤트를 수신 대기하는 끝점 또는 이벤트 싱크를 제공합니다. 각 TriggerBinding 리소스에서 이벤트 매개변수를 추출한 다음 이 데이터를 처리하여 해당 TriggerTemplate 리소스에서 지정하는 Kubernetes 리소스를 생성합니다. 또한 EventListener 리소스는 페이로드 유형을 확인하고 선택적으로 수정하는 이벤트 interceptors를 사용하여 페이로드에 대한 간단한 이벤트 처리 또는 기본 필터링 작업을 수행합니다. 현재 파이프라인 트리거가 지원하는 인터셉터 유형은 네 가지로, Webhook 인터셉터, GitHub 인터셉터, GitLab 인터셉터, CEL(Common Expression Language) 인터셉터입니다.
  • Trigger 리소스는 TriggerBindingTriggerTemplate 리소스를 연결하고, EventListener 사양에서 이 Trigger 리소스를 참조합니다.

다음은 수신된 이벤트 페이로드에서 Git 리포지토리 정보를 추출하는 TriggerBinding 리소스의 코드 조각 예입니다.

apiVersion: triggers.tekton.dev/v1alpha1 1
kind: TriggerBinding 2
metadata:
  name: vote-app 3
spec:
  params: 4
  - name: git-repo-url
    value: $(body.repository.url)
  - name: git-repo-name
    value: $(body.repository.name)
  - name: git-revision
    value: $(body.head_commit.id)
1
TriggerBinding 리소스의 API 버전입니다. 이 예제에서는 v1alpha1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 TriggerBinding입니다.
3
TriggerBinding 리소스를 확인하는 고유한 이름입니다.
4
수신한 이벤트 페이로드에서 추출하여 TriggerTemplate 리소스로 전달할 매개변수 목록입니다. 예에서는 Git 리포지토리 URL, 이름 및 개정 정보가 이벤트 페이로드의 본문에서 추출됩니다.

다음은 방금 생성한 TriggerBinding 리소스에서 수신한 Git 리포지토리 정보를 사용하여 애플리케이션을 생성하는 TriggerTemplate 리소스의 코드 조각입니다.

apiVersion: triggers.tekton.dev/v1alpha1 1
kind: TriggerTemplate 2
metadata:
  name: vote-app 3
spec:
  params: 4
  - name: git-repo-url
    description: The git repository url
  - name: git-revision
    description: The git revision
    default: pipelines-1.3
  - name: git-repo-name
    description: The name of the deployment to be created / patched

  resourcetemplates: 5
  - apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      name: build-deploy-$(tt.params.git-repo-name)-$(uid)
    spec:
      serviceAccountName: pipeline
      pipelineRef:
        name: build-and-deploy
      params:
      - name: deployment-name
        value: $(tt.params.git-repo-name)
      - name: git-url
        value: $(tt.params.git-repo-url)
      - name: git-revision
        value: $(tt.params.git-revision)
      - name: IMAGE
        value: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/$(tt.params.git-repo-name)
      workspaces:
      - name: shared-workspace
        volumeClaimTemplate:
         spec:
          accessModes:
           - ReadWriteOnce
          resources:
            requests:
              storage: 500Mi
1
TriggerTemplate 리소스의 API 버전입니다. 이 예제에서는 v1alpha1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 TriggerTemplate입니다.
3
TriggerTemplate 리소스를 식별하는 고유 이름입니다.
4
TriggerBinding 또는 EventListerner 리소스에서 제공하는 매개변수입니다.
5
TriggerBinding 또는 EventListener 리소스를 통해 수신한 매개변수를 사용하여 리소스를 생성해야 하는 방법을 지정하는 템플릿 목록입니다.

다음 예제는 TriggerBindingTriggerTemplate 리소스를 연결하는 vote-trigger라는 Trigger 리소스의 코드 조각을 보여줍니다.

apiVersion: triggers.tekton.dev/v1alpha1 1
kind: Trigger 2
metadata:
  name: vote-trigger 3
spec:
  serviceAccountName: pipeline 4
  bindings:
    - ref: vote-app 5
  template: 6
     ref: vote-app
1
Trigger 리소스의 API 버전입니다. 이 예제에서는 v1alpha1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 이 예제에서는 Trigger입니다.
3
Trigger 리소스를 식별하는 고유 이름입니다.
4
사용할 서비스 계정 이름입니다.
5
TriggerTemplate 리소스에 연결할 TriggerBinding 리소스의 이름입니다.
6
TriggerBinding 리소스에 연결할 TriggerTemplate 리소스의 이름입니다.

다음 예제에서는 vote-trigger라는 Trigger 리소스를 참조하는 EventListener 리소스를 보여줍니다.

apiVersion: triggers.tekton.dev/v1alpha1 1
kind: EventListener 2
metadata:
  name: vote-app 3
spec:
  serviceAccountName: pipeline 4
  triggers:
    - triggerRef: vote-trigger 5
1
EventListener 리소스의 API 버전입니다. 이 예제에서는 v1alpha1입니다.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 EventListener입니다.
3
EventListener 리소스를 식별하는 고유 이름입니다.
4
사용할 서비스 계정 이름입니다.
5
EventListener 리소스에서 참조하는 Trigger 리소스의 이름입니다.

2.1.4. 추가 리소스