3.2. OpenShift Pipelines Concepts


이 안내서에서는 다양한 파이프라인 개념을 소개합니다.

3.2.1. 작업

작업 리소스는 파이프라인의 구성 블록이며 순차적으로 실행되는 단계로 구성됩니다. 기본적으로 입력 및 출력의 기능입니다. 작업은 개별적으로 또는 파이프라인의 일부로 실행할 수 있습니다. 작업은 재사용 가능하며 여러 파이프라인에서 사용할 수 있습니다.

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

다음 예제에서는 apply-manifests 작업을 보여줍니다.

apiVersion: tekton.dev/v1 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
작업 API 버전 v1.
2
Kubernetes 오브젝트 유형은 Task입니다.
3
이 작업의 고유 이름입니다.
4
작업의 매개변수 및 단계 목록과 작업에서 사용하는 작업 공간입니다.

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

참고

OpenShift Pipelines 1.6부터 단계 YAML 파일에서 다음 기본값이 제거됩니다.

  • HOME 환경 변수가 /tekton/home 디렉토리에 기본적으로 설정되어 있지 않음
  • workingDir 필드가 기본적으로 /workspace 디렉터리가 아닙니다

대신 단계의 컨테이너는 HOME 환경 변수와 workingDir 필드를 정의합니다. 그러나 단계에 대한 YAML 파일에 사용자 지정 값을 지정하여 기본값을 재정의할 수 있습니다.

임시 조치로 이전 OpenShift Pipelines 버전과의 호환성을 유지하기 위해 TektonConfig 사용자 정의 리소스 정의에서 다음 필드를 false 로 설정할 수 있습니다.

spec:
  pipeline:
    disable-working-directory-overwrite: false
    disable-home-env-overwrite: false

3.2.2. when 표현식

When 표현식은 파이프라인 내에서 작업 실행 기준을 설정하여 작업 실행을 보호합니다. 여기에는 특정 기준이 충족될 때만 작업을 실행할 수 있는 구성 요소 목록이 포함되어 있습니다. when 표현식은 파이프라인 YAML 파일의 finally 필드를 사용하여 지정된 최종 작업 세트에서도 지원됩니다.

when 표현식의 주요 구성 요소는 다음과 같습니다.

  • input: 매개 변수, 작업 결과, 실행 상태와 같은 정적 입력 또는 변수를 지정합니다. 유효한 입력을 입력해야 합니다. 유효한 입력을 입력하지 않으면 기본값은 빈 문자열입니다.
  • operator: 일련의 values에 대한 입력의 관계를 지정합니다. Operator 값으로 in 또는 notin을 입력합니다.
  • values: 문자열 값 배열을 지정합니다. 매개 변수, 결과 및 바인딩된 작업 영역 상태와 같은 정적 값 또는 변수의 비어 있지 않은 배열을 입력합니다.

선언된 when 표현식은 작업이 실행되기 전에 평가됩니다. when 표현식 값이 True이면 작업이 실행됩니다. when 표현식 값이 False이면 작업을 건너뜁니다.

다양한 사용 사례에서 when 표현식을 사용할 수 있습니다. 예를 들면 다음과 같은 경우입니다.

  • 이전 작업의 결과는 예상대로 표시됩니다.
  • Git 리포지토리의 파일이 이전 커밋에서 변경되었습니다.
  • 레지스트리에 이미지가 있습니다.
  • 선택적 작업 영역을 사용할 수 있습니다.

다음 예제에서는 파이프라인 실행에 대한 when 표현식을 보여줍니다. 파이프라인 실행은 다음 기준이 충족되는 경우에만 create-file 작업을 실행합니다. path 매개 변수는 README.md이고, check-file 작업의 exists결과가 yes인 경우에만 echo-file-exists 작업이 실행됩니다.

apiVersion: tekton.dev/v1
kind: PipelineRun 1
metadata:
  generateName: guarded-pr-
spec:
  taskRunTemplate:
    serviceAccountName: pipeline
  pipelineSpec:
    params:
      - name: path
        type: string
        description: The path of the file to be created
    workspaces:
      - name: source
        description: |
          This workspace is shared among all the pipeline tasks to read/write common resources
    tasks:
      - name: create-file 2
        when:
          - input: "$(params.path)"
            operator: in
            values: ["README.md"]
        workspaces:
          - name: source
            workspace: source
        taskSpec:
          workspaces:
            - name: source
              description: The workspace to create the readme file in
          steps:
            - name: write-new-stuff
              image: ubuntu
              script: 'touch $(workspaces.source.path)/README.md'
      - name: check-file
        params:
          - name: path
            value: "$(params.path)"
        workspaces:
          - name: source
            workspace: source
        runAfter:
          - create-file
        taskSpec:
          params:
            - name: path
          workspaces:
            - name: source
              description: The workspace to check for the file
          results:
            - name: exists
              description: indicates whether the file exists or is missing
          steps:
            - name: check-file
              image: alpine
              script: |
                if test -f $(workspaces.source.path)/$(params.path); then
                  printf yes | tee /tekton/results/exists
                else
                  printf no | tee /tekton/results/exists
                fi
      - name: echo-file-exists
        when: 3
          - input: "$(tasks.check-file.results.exists)"
            operator: in
            values: ["yes"]
        taskSpec:
          steps:
            - name: echo
              image: ubuntu
              script: 'echo file exists'
...
      - name: task-should-be-skipped-1
        when: 4
          - input: "$(params.path)"
            operator: notin
            values: ["README.md"]
        taskSpec:
          steps:
            - name: echo
              image: ubuntu
              script: exit 1
...
    finally:
      - name: finally-task-should-be-executed
        when: 5
          - input: "$(tasks.echo-file-exists.status)"
            operator: in
            values: ["Succeeded"]
          - input: "$(tasks.status)"
            operator: in
            values: ["Succeeded"]
          - input: "$(tasks.check-file.results.exists)"
            operator: in
            values: ["yes"]
          - input: "$(params.path)"
            operator: in
            values: ["README.md"]
        taskSpec:
          steps:
            - name: echo
              image: ubuntu
              script: 'echo finally done'
  params:
    - name: path
      value: README.md
  workspaces:
    - name: source
      volumeClaimTemplate:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 16Mi
1
Kubernetes 개체의 유형을 지정합니다. 예에서는 PipelineRun입니다.
2
파이프라인에 사용되는 작업 create-file 입니다.
3
check-file 작업에서 exists 결과가 yes인 경우에만 echo-file-exists 작업을 실행하도록 지정하는 when 표현식입니다.
4
path 매개 변수가 README.md인 경우에만 task-s shouldld-be-skipped-1 작업을 건너뛰도록 지정하는 When 표현식입니다.
5
echo-file-exists 작업의 실행 상태와 작업 상태가 Succeeded인 경우에만, finally-task-should-be-executed 작업을 실행하도록 지정하는 when 표현식은 check-file 작업의 exists 결과는 yes이고 path 매개 변수는 README.md입니다.

OpenShift Container Platform 웹 콘솔의 Pipeline Run 세부 정보 페이지에 다음과 같이 작업의 상태와 when 표현식이 표시됩니다.

  • 모든 기준이 충족됨: Task와 다이아몬드 모양으로 표시되는 when 표현식 기호는 녹색입니다.
  • 기준 중 하나가 충족되지 않음: 작업을 건너뜁니다. 건너뛰기된 작업 및 when 표현식 기호는 회색입니다.
  • 충족 기준이 없음: 작업을 건너뜁니다. 건너뛰기된 작업 및 when 표현식 기호는 회색입니다.
  • 작업 실행 실패: 실패한 작업 및 When 표현식 기호는 빨간색입니다.

3.2.3. finally 작업

finally 작업은 파이프라인 YAML 파일의 finally 필드를 사용하여 지정된 최종 작업 집합입니다. finally 작업은 파이프라인 실행이 성공적으로 실행되는지 여부에 관계없이 항상 파이프라인 내의 작업을 실행합니다. finally 작업은 해당 파이프라인이 종료되기 전에 모든 파이프라인 작업이 실행된 후 병렬로 실행됩니다.

finally 작업은 동일한 파이프라인 내의 모든 작업 결과를 사용하도록 구성할 수 있습니다. 이 접근 방식은 이 최종 작업이 실행되는 순서를 변경하지 않습니다. 모든 최종 작업이 실행된 후 다른 최종 작업과 동시에 실행됩니다.

다음 예제에서는 clone-cleanup-workspace 파이프라인의 코드 스니펫을 보여줍니다. 이 코드는 리포지토리를 공유 작업 공간으로 복제하고 작업 영역을 정리합니다. 파이프라인 작업을 실행한 후 파이프라인 YAML 파일의 finally 섹션에 지정된 cleanup 작업이 작업 영역을 정리합니다.

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: clone-cleanup-workspace 1
spec:
  workspaces:
    - name: git-source 2
  tasks:
    - name: clone-app-repo 3
      taskRef:
        name: git-clone-from-catalog
      params:
        - name: url
          value: https://github.com/tektoncd/community.git
        - name: subdirectory
          value: application
      workspaces:
        - name: output
          workspace: git-source
  finally:
    - name: cleanup 4
      taskRef: 5
        name: cleanup-workspace
      workspaces: 6
        - name: source
          workspace: git-source
    - name: check-git-commit
      params: 7
        - name: commit
          value: $(tasks.clone-app-repo.results.commit)
      taskSpec: 8
        params:
          - name: commit
        steps:
          - name: check-commit-initialized
            image: alpine
            script: |
              if [[ ! $(params.commit) ]]; then
                exit 1
              fi
1
파이프라인의 고유 이름입니다.
2
git 리포지토리가 복제되는 공유 작업 공간입니다.
3
애플리케이션 리포지토리를 공유 작업 영역에 복제하는 작업입니다.
4
공유 작업 영역을 정리하는 작업입니다.
5
작업 실행에서 실행할 작업에 대한 참조입니다.
6
파이프라인의 작업이 런타임 시 입력을 수신하거나 출력을 제공하는 데 필요한 공유 스토리지 볼륨입니다.
7
작업에 필요한 매개 변수 목록입니다. 매개 변수에 암시적 기본값이 없는 경우 해당 값을 명시적으로 설정해야 합니다.
8
임베디드 작업 정의입니다.

3.2.4. TaskRun

TaskRun 은 클러스터에서 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 작업을 인스턴스화합니다. 자체적으로 또는 파이프라인의 각 작업에 대해 파이프라인 실행의 일부로 호출할 수 있습니다.

작업은 컨테이너 이미지를 실행하는 하나 이상의 단계로 구성되며 각 컨테이너 이미지는 특정 빌드 작업을 수행합니다. 작업 실행은 모든 단계가 성공적으로 실행되거나 실패할 때까지 작업의 단계를 지정된 순서로 실행합니다. TaskRun 은 파이프라인의 각 작업에 대해 PipelineRun 에 의해 자동으로 생성됩니다.

다음 예제에서는 관련 입력 매개변수를 사용하여 apply-manifests 작업을 실행하는 작업 실행을 보여줍니다.

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

3.2.5. 파이프라인

Pipeline 은 특정 실행 순서로 정렬된 Task 리소스 컬렉션입니다. 애플리케이션 빌드, 배포 및 제공 작업을 자동화하는 복잡한 워크플로를 구성하기 위해 실행됩니다. 하나 이상의 작업이 포함된 파이프라인을 사용하여 애플리케이션에 대한 CI/CD 워크플로를 정의할 수 있습니다.

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

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

apiVersion: tekton.dev/v1 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.13"
  - name: IMAGE
    type: string
    description: image to be built 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 버전 v1.
2
Kubernetes 개체의 유형을 지정합니다. 예에서는 Pipeline입니다.
3
이 파이프라인의 고유한 이름입니다.
4
파이프라인의 정의 및 구조를 지정합니다.
5
파이프라인의 모든 작업에서 사용되는 Workspace입니다.
6
파이프라인의 모든 작업에 사용되는 매개변수입니다.
7
파이프라인에 사용되는 작업 목록을 지정합니다.
8
buildah ClusterTask 를 사용하여 지정된 Git 리포지토리에서 애플리케이션 이미지를 빌드하는 작업 build-image.
9
동일한 이름의 사용자 정의 작업을 사용하는 Task apply-manifests.
10
파이프라인에서 작업이 실행되는 순서를 지정합니다. 이 예에서 apply-manifests 작업은 build-image 작업이 완료된 후에만 실행됩니다.
참고

Red Hat OpenShift Pipelines Operator는 Buildah 클러스터 작업을 설치하고 이미지를 빌드하고 푸시하기에 충분한 권한으로 파이프라인 서비스 계정을 생성합니다. 권한이 부족한 다른 서비스 계정과 연결된 경우 Buildah 클러스터 작업이 실패할 수 있습니다.

3.2.6. PipelineRun

PipelineRun 은 CI/CD 워크플로우를 실행하는 시나리오와 관련된 매개변수 값 집합을 바인딩하는 파이프라인, 작업 공간, 인증 정보 세트를 바인딩하는 리소스 유형입니다.

파이프라인 실행은 파이프라인의 실행 중 인스턴스입니다. 클러스터에서 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 파이프라인을 인스턴스화합니다. 또한 파이프라인 실행의 각 작업에 대한 작업 실행을 생성합니다.

파이프라인은 작업이 완료되거나 작업이 실패할 때까지 순차적으로 실행됩니다. status 필드는 각 작업 실행의 진행 상황을 추적하고 모니터링 및 감사 목적으로 저장합니다.

다음 예제에서는 관련 리소스 및 매개변수를 사용하여 build-and-deploy 파이프라인을 실행합니다.

apiVersion: tekton.dev/v1 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
파이프라인 실행 API 버전 v1.
2
Kubernetes 오브젝트의 유형입니다. 예에서는 PipelineRun입니다.
3
이 파이프라인 실행을 식별하는 고유한 이름입니다.
4
실행할 파이프라인의 이름입니다. 예에서는 build-and-deploy입니다.
5
파이프라인을 실행하는 데 필요한 매개변수 목록입니다.
6
파이프라인 실행에서 사용하는 Workspace입니다.

3.2.7. Workspace

참고

PipelineResource CR을 디버그하기 어렵고 범위가 제한되며 작업의 재사용 가능성을 낮추기 때문에 Red Hat OpenShift Pipelines에서 PipelineResource CR 대신 작업 공간을 사용하는 것이 좋습니다.

작업 공간은 입력을 수신하거나 출력을 제공하기 위해 런타임 시 파이프라인의 작업이 필요한 공유 스토리지 볼륨을 선언합니다. 볼륨의 실제 위치를 지정하는 대신 작업 공간을 사용하면 런타임 시 필요한 파일 시스템 또는 파일 시스템의 일부를 선언할 수 있습니다. 작업 또는 파이프라인은 작업 공간을 선언하고 볼륨의 특정 위치 세부 정보를 제공해야 합니다. 그런 다음 작업 실행 또는 파이프라인 실행의 해당 작업 공간에 마운트됩니다. 이러한 런타임 스토리지 볼륨에서 볼륨 선언을 분리하면 사용자 환경과 무관하게 재사용 가능하고 유연하며 작업을 수행할 수 있습니다.

작업 영역을 사용하면 다음을 수행할 수 있습니다.

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

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

  • 읽기 전용 구성 맵 또는 시크릿
  • 다른 작업과 공유되는 기존 영구 볼륨 클레임
  • 제공된 볼륨 클레임 템플릿의 영구 볼륨 클레임
  • 작업 실행이 완료되면 삭제되는 emptyDir

다음 예제에서는 파이프라인에 정의된 대로 build-imageapply-manifests 작업에 대한 shared-workspace 작업 공간을 선언하는 build-and-deploy 파이프라인의 코드 스니펫을 보여줍니다.

apiVersion: tekton.dev/v1
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
파이프라인에 정의된 작업 간에 공유되는 작업 공간 목록입니다. 파이프라인은 필요한 만큼의 작업 공간을 정의할 수 있습니다. 이 예에서는 shared-workspace 라는 작업 공간 하나만 선언됩니다.
2
파이프라인에 사용되는 작업의 정의입니다. 이 스니펫에서는 공통 작업 공간을 공유하는 build-imageapply-manifests 두 작업을 정의합니다.
3
build-image 작업에 사용되는 작업 공간 목록입니다. 작업 정의에는 필요한 만큼의 작업 공간을 포함할 수 있습니다. 그러나 작업에서는 쓰기 가능한 작업 공간을 최대 1개 사용하는 것이 좋습니다.
4
작업에 사용되는 작업 공간을 고유하게 식별하는 이름입니다. 이 작업에서는 source 라는 하나의 작업 공간을 사용합니다.
5
작업에서 사용하는 파이프라인 작업 공간의 이름입니다. 결과적으로 작업 공간 소스shared-workspace 라는 파이프라인 작업 공간을 사용합니다.
6
apply-manifests 작업에 사용되는 작업 공간 목록입니다. 이 작업에서는 소스 작업 공간을 build-image 작업과 공유합니다.

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

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

apiVersion: tekton.dev/v1
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
파이프라인 실행에서 볼륨 바인딩이 제공될 파이프라인 작업 공간 목록을 지정합니다.
2
볼륨이 제공되는 파이프라인의 작업 공간 이름입니다.
3
작업 공간의 스토리지 볼륨을 정의하기 위해 영구 볼륨 클레임을 생성하는 볼륨 클레임 템플릿을 지정합니다.

3.2.8. Trigger

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

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

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

  • TriggerBinding 리소스는 이벤트 페이로드에서 필드를 추출한 다음 해당 필드를 매개변수로 저장합니다.

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

    apiVersion: triggers.tekton.dev/v1beta1 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 버전입니다. 이 예에서 v1beta1.
    2
    Kubernetes 개체의 유형을 지정합니다. 예에서는 TriggerBinding입니다.
    3
    TriggerBinding 리소스를 확인하는 고유한 이름입니다.
    4
    수신한 이벤트 페이로드에서 추출하여 TriggerTemplate 리소스로 전달할 매개변수 목록입니다. 예에서는 Git 리포지토리 URL, 이름 및 개정 정보가 이벤트 페이로드의 본문에서 추출됩니다.
  • TriggerTemplate 리소스는 리소스를 생성해야 하는 방법에 대해 표준 역할을 합니다. TriggerBinding 리소스에서 매개변수화된 데이터를 사용하는 방식을 지정합니다. 트리거 템플릿은 트리거 바인딩을 통해 입력을 수신한 다음 새 파이프라인 리소스를 생성하고 새 파이프라인 실행을 시작하는 일련의 작업을 수행합니다.

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

    apiVersion: triggers.tekton.dev/v1beta1 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.13
      - name: git-repo-name
        description: The name of the deployment to be created / patched
    
      resourcetemplates: 5
      - apiVersion: tekton.dev/v1
        kind: PipelineRun
        metadata:
          name: build-deploy-$(tt.params.git-repo-name)-$(uid)
        spec:
          taskRunTemplate:
            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 버전입니다. 이 예에서 v1beta1.
    2
    Kubernetes 개체의 유형을 지정합니다. 예에서는 TriggerTemplate입니다.
    3
    TriggerTemplate 리소스를 식별하는 고유 이름입니다.
    4
    TriggerBinding 리소스에서 제공되는 매개변수입니다.
    5
    TriggerBinding 또는 EventListener 리소스를 통해 수신한 매개변수를 사용하여 리소스를 생성해야 하는 방법을 지정하는 템플릿 목록입니다.
  • Trigger 리소스는 TriggerBindingTriggerTemplate 리소스를 결합하고 선택적으로 interceptors 이벤트 프로세서를 결합합니다.

    인터셉터는 TriggerBinding 리소스 전에 실행되는 특정 플랫폼의 모든 이벤트를 처리합니다. 인터셉터를 사용하여 페이로드를 필터링하고, 이벤트를 확인하고, 트리거 조건을 정의 및 테스트하고, 기타 유용한 처리를 구현할 수 있습니다. 인터셉터는 이벤트 확인을 위해 시크릿을 사용합니다. 이벤트 데이터가 인터셉터를 통과한 후 페이로드 데이터를 트리거 바인딩에 전달하기 전에 트리거로 이동합니다. 인터셉터를 사용하여 EventListener 사양에서 참조된 관련 트리거의 동작을 수정할 수도 있습니다.

    다음 예제는 TriggerBindingTriggerTemplate 리소스와 interceptors 이벤트 프로세서를 연결하는 vote-trigger라는 Trigger 리소스의 코드 조각을 보여줍니다.

    apiVersion: triggers.tekton.dev/v1beta1 1
    kind: Trigger 2
    metadata:
      name: vote-trigger 3
    spec:
      taskRunTemplate:
        serviceAccountName: pipeline 4
      interceptors:
        - ref:
            name: "github" 5
          params: 6
            - name: "secretRef"
              value:
                secretName: github-secret
                secretKey: secretToken
            - name: "eventTypes"
              value: ["push"]
      bindings:
        - ref: vote-app 7
      template: 8
         ref: vote-app
    ---
    apiVersion: v1
    kind: Secret 9
    metadata:
      name: github-secret
    type: Opaque
    stringData:
      secretToken: "1234567"
    1
    Trigger 리소스의 API 버전입니다. 이 예에서 v1beta1.
    2
    Kubernetes 개체의 유형을 지정합니다. 이 예제에서는 Trigger입니다.
    3
    Trigger 리소스를 식별하는 고유 이름입니다.
    4
    사용할 서비스 계정 이름입니다.
    5
    참조할 인터셉터 이름입니다. 예에서는 github입니다.
    6
    지정할 매개 변수입니다.
    7
    TriggerTemplate 리소스에 연결할 TriggerBinding 리소스의 이름입니다.
    8
    TriggerBinding 리소스에 연결할 TriggerTemplate 리소스의 이름입니다.
    9
    이벤트를 확인하는 데 사용할 시크릿입니다.
  • EventListener 리소스는 JSON 페이로드와 함께 들어오는 HTTP 기반 이벤트를 수신 대기하는 끝점 또는 이벤트 싱크를 제공합니다. 각 TriggerBinding 리소스에서 이벤트 매개변수를 추출한 다음 이 데이터를 처리하여 해당 TriggerTemplate 리소스에서 지정하는 Kubernetes 리소스를 생성합니다. 또한 EventListener 리소스는 페이로드 유형을 확인하고 선택적으로 수정하는 이벤트 interceptors를 사용하여 페이로드에 대한 간단한 이벤트 처리 또는 기본 필터링 작업을 수행합니다. 현재 파이프라인 트리거는 Webhook Interceptors, GitHub Interceptors, GitLab Interceptors, Bitbucket Interceptors, Common Expression Language (CEL) Interceptors의 5 가지 유형의 인터셉터를 지원합니다.

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

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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.