4.2. OpenShift Pipelines 이해
Red Hat OpenShift Pipelines는 Kubernetes 리소스 기반의 클라우드 네이티브 CI/CD(연속 통합 및 연속 제공) 솔루션입니다. Tekton 빌딩 블록을 사용하여 기본 구현 세부 사항을 요약함으로써 여러 플랫폼에서 배포를 자동화합니다. Tekton은 Kubernetes 배포 전반에서 이식 가능한 CI/CD Pipeline을 정의하는 데 사용되는 여러 가지 표준 CRD(Custom Resource Definitions)를 도입합니다.
4.2.1. 주요 기능
- Red Hat OpenShift Pipelines는 격리된 컨테이너에서 필요한 모든 종속 항목이 포함된 파이프라인을 실행하는 서버리스 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 리소스를 생성하고, 파이프라인 실행 로그를 검토하고, OpenShift Container Platform 네임스페이스에서 파이프라인을 관리할 수 있습니다.
4.2.2. OpenShift Pipeline 개념
이 안내서에서는 다양한 파이프라인 개념을 소개합니다.
4.2.2.1. Task
Tasks는 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 -----------------------------------
이 작업은 Pod를 시작하고 해당 Pod 내에서 지정된 이미지를 사용하는 컨테이너를 실행하여 지정된 명령을 실행합니다.
4.2.2.2. When 표현식
When 표현식은 파이프라인 내에서 작업 실행 기준을 설정하여 작업 실행을 보호합니다. 여기에는 특정 기준이 충족될 때만 작업을 실행할 수 있는 구성 요소 목록이 포함되어 있습니다. when 표현식은 파이프라인 YAML 파일의 finally
필드를 사용하여 지정된 최종 작업 세트에서도 지원됩니다.
when 표현식의 주요 구성 요소는 다음과 같습니다.
-
입력
: 매개 변수, 작업 결과 및 실행 상태와 같은 정적 입력 또는 변수를 지정합니다. 유효한 입력을 입력해야 합니다. 유효한 입력을 입력하지 않으면 기본값은 빈 문자열입니다. -
operator
: 일련의값에
대한 입력의 관계를 지정합니다. Operator 값으로in
또는notin
을 입력합니다. -
값
: 문자열 값의 배열을 지정합니다. 매개 변수, 결과 및 바인딩된 작업 영역 상태와 같은 정적 값 또는 변수의 비어 있지 않은 배열을 입력합니다.
선언된 when 표현식은 작업이 실행되기 전에 평가됩니다. when 표현식 값이 True
이면 작업이 실행됩니다. when 표현식 값이 False
이면 작업을 건너뜁니다.
다양한 사용 사례에서 when 표현식을 사용할 수 있습니다. 예를 들면 다음과 같은 경우입니다.
- 이전 작업의 결과는 예상대로 표시됩니다.
- Git 리포지토리의 파일이 이전 커밋에서 변경되었습니다.
- 레지스트리에 이미지가 있습니다.
- 선택적 작업 영역을 사용할 수 있습니다.
다음 예제에서는 파이프라인 실행에 대한 when 표현식을 보여줍니다. 파이프라인 실행은 다음 기준이 충족되는 경우에만 create-file
작업을 실행합니다. path
매개 변수는 README.md
이고, check-file
작업의 exists
결과가 yes
인 경우에만 echo-file-exists
작업이 실행됩니다.
apiVersion: tekton.dev/v1beta1 kind: PipelineRun 1 metadata: generateName: guarded-pr- spec: 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
- Pipeline에서 사용되는 작업
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 표현식이 표시됩니다.
- 모든 기준이 충족됩니다. 유리한 형태로 표시되는 when 표현식 기호와 태스크는 녹색입니다.
- 다음 중 임의의 기준이 충족되지 않습니다. 작업을 건너뜁니다. 건너뛰기된 작업 및 when 표현식 기호는 회색입니다.
- 어떤 기준도 충족되지 않습니다. 작업을 건너뜁니다. 건너뛰기된 작업 및 when 표현식 기호는 회색입니다.
- 작업 실행에 실패합니다. 실패한 작업 및 when 표현식 기호는 빨간색입니다.
4.2.2.3. 마지막 작업
finally
작업은 파이프라인 YAML 파일의 finally
필드를 사용하여 지정된 최종 작업 집합입니다. finally
작업은 파이프라인 실행이 성공적으로 실행되는지 여부에 관계없이 항상 파이프라인 내의 작업을 실행합니다. finally
작업은 해당 파이프라인이 종료되기 전에 모든 파이프라인 작업이 실행된 후 병렬로 실행됩니다.
finally
작업은 동일한 파이프라인 내의 모든 작업 결과를 사용하도록 구성할 수 있습니다. 이 접근 방식은 이 최종 작업이 실행되는 순서를 변경하지 않습니다. 모든 최종 작업이 실행된 후 다른 최종 작업과 동시에 실행됩니다.
다음 예제에서는 clone-cleanup-workspace
파이프라인의 코드 스니펫을 보여줍니다. 이 코드는 리포지토리를 공유 작업 공간으로 복제하고 작업 영역을 정리합니다. 파이프라인 작업을 실행한 후 파이프라인 YAML 파일의 finally
섹션에 지정된 cleanup
작업이 작업 영역을 정리합니다.
apiVersion: tekton.dev/v1beta1 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
4.2.2.4. TaskRun
TaskRun은 클러스터에서 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 Task를 인스턴스화합니다. 자체 또는 파이프라인의 각 작업에 대해 파이프라인 실행의 일부로 호출할 수 있습니다.
Task는 컨테이너 이미지를 실행하는 하나 이상의 단계(Step)로 구성되며, 각 컨테이너 이미지의 특정 빌드 작업을 수행합니다. TaskRun은 Task의 모든 단계(Step)를 지정된 순서로 실행하며, 모든 단계(Step)가 성공적으로 실행되거나 실패하는 단계가 발생하면 실행을 멈춥니다. TaskRun은 Pipeline의 각 Task에 대한 PipelineRun에 의해 자동으로 생성되며,
다음 예는 관련 입력 매개변수를 사용하여 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
4.2.2.5. 파이프라인
파이프라인은 특정 실행 순서대로 정렬된 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.5" - 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 버전은
v1beta1
입니다. - 2
- Kubernetes 개체의 유형을 지정합니다. 예에서는
Pipeline
입니다. - 3
- 이 Pipeline의 고유한 이름입니다.
- 4
- Pipeline의 정의와 구조를 지정합니다.
- 5
- Pipeline의 모든 Task에 사용되는 Workspace입니다.
- 6
- Pipeline의 모든 Task에 사용되는 매개변수입니다.
- 7
- Pipeline에서 사용되는 Task 목록을 지정합니다.
- 8
buildah
ClusterTask를 사용하여 주어진 Git 리포지토리에서 애플리케이션 이미지를 빌드하는 Taskbuild-image
입니다.- 9
- 동일한 이름의 사용자 지정 Task를 사용하는 Task
apply-manifests
입니다. - 10
- Pipeline에서 Task가 실행되는 순서를 지정합니다. 예에서는
apply-manifests
Task는build-image
Task가 완료된 후에만 실행됩니다.
Red Hat OpenShift Pipelines Operator는 Buildah 클러스터 작업을 설치하고 이미지를 빌드하고 푸시할 수 있는 충분한 권한이 있는 파이프라인
서비스 계정을 생성합니다. 권한이 충분하지 않은 다른 서비스 계정과 연결된 경우 Buildah 클러스터 작업이 실패할 수 있습니다.
4.2.2.6. PipelineRun
PipelineRun
은 CI/CD 워크플로를 실행하는 시나리오에 고유한 파이프라인, 작업 공간, 인증 정보 및 일련의 매개변수 값을 바인딩하는 리소스 유형입니다.
파이프라인 실행 은 파이프라인의 실행 중인 인스턴스입니다. 클러스터에서 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 파이프라인을 인스턴스화합니다. 또한 파이프라인 실행의 각 작업에 대한 작업 실행을 생성합니다.
파이프라인은 완료되거나 작업이 실패할 때까지 작업을 순차적으로 실행합니다. status
필드는 각 작업 실행의 진행 상황 및 모니터링 및 감사 목적으로 저장합니다.
다음 예는 관련 리소스 및 매개변수를 사용하여 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
추가 리소스
4.2.2.7. Workspace
PipelineResources는 디버그하기 어렵고 범위가 제한되며 Task의 재사용 가능성을 낮추기 때문에 OpenShift Pipelines에서는 PipelineResources 대신 Workspace를 사용할 것을 권장합니다.
작업 공간은 입력 또는 출력을 제공하기 위해 런타임 시 파이프라인의 작업에 필요한 공유 스토리지 볼륨을 선언합니다. 볼륨의 실제 위치를 지정하는 대신 Workspace를 사용하여 런타임 시 필요한 파일 시스템 전체 또는 파일 시스템의 일부를 선언할 수 있습니다. 작업 또는 파이프라인은 작업 공간을 선언하고 볼륨의 특정 위치 세부 정보를 제공해야 합니다. 그런 다음 작업 실행 또는 파이프라인 실행에서 해당 작업 공간에 마운트됩니다. 이러한 방식으로 런타임 스토리지 볼륨에서 볼륨 선언을 분리하면 사용자 환경에 종속되지 않으며 유연성 높고 재사용 가능한 Task로 만들 수 있습니다.
다음과 같은 용도로 Workspace를 활용할 수 있습니다.
- Task 입력 및 출력 저장
- Task 간 데이터 공유
- 시크릿에 보관된 자격 증명의 마운트 지점으로 작업 공간 활용
- ConfigMaps에 보관된 구성의 마운트 지점으로 작업 공간 활용
- 조직에서 공유하는 공통 도구의 마운트 지점으로 작업 공간 활용
- 작업 속도를 높이는 빌드 아티팩트 캐시 생성
다음을 사용하여 TaskRun 또는 PipelineRun에서 Workspace를 지정할 수 있습니다.
- 읽기 전용 ConfigMaps 또는 Secret
- 다른 Task와 공유되는 기존 PersistentVolumeClaim
- 제공된 VolumeClaimTemplate의 PersistentVolumeClaim
- TaskRun이 완료되면 삭제되는 emptyDir
다음은 Pipeline에 정의된 대로 build-image
및 apply-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-image
와apply-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
4.2.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/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)
TriggerTemplate
리소스는 리소스를 생성해야 하는 방법에 대해 표준 역할을 합니다.TriggerBinding
리소스에서 매개변수화된 데이터를 사용하는 방식을 지정합니다. 트리거 템플릿은 트리거 바인딩을 통해 입력을 수신한 다음 새 파이프라인 리소스를 생성하고 새 파이프라인 실행을 시작하는 일련의 작업을 수행합니다.다음은 방금 생성한
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.5 - 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
Trigger
리소스는TriggerBinding
및TriggerTemplate
리소스를 결합하고 선택적으로interceptors
이벤트 프로세서를 결합합니다.인터셉터는
TriggerBinding
리소스 전에 실행되는 특정 플랫폼의 모든 이벤트를 처리합니다. 인터셉터를 사용하여 페이로드를 필터링하고, 이벤트를 확인하고, 트리거 조건을 정의 및 테스트하고, 기타 유용한 처리를 구현할 수 있습니다. 인터셉터는 이벤트 확인을 위해 시크릿을 사용합니다. 이벤트 데이터가 인터셉터를 통과한 후 페이로드 데이터를 트리거 바인딩에 전달하기 전에 트리거로 이동합니다. 인터셉터를 사용하여EventListener
사양에서 참조된 관련 트리거의 동작을 수정할 수도 있습니다.다음 예제는
TriggerBinding
및TriggerTemplate
리소스와interceptors
이벤트 프로세서를 연결하는vote-trigger
라는Trigger
리소스의 코드 조각을 보여줍니다.apiVersion: triggers.tekton.dev/v1alpha1 1 kind: Trigger 2 metadata: name: vote-trigger 3 spec: 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 버전입니다. 이 예제에서는v1alpha1
입니다.- 2
- Kubernetes 개체의 유형을 지정합니다. 이 예제에서는
Trigger
입니다. - 3
Trigger
리소스를 식별하는 고유 이름입니다.- 4
- 사용할 서비스 계정 이름입니다.
- 5
- 참조할 인터셉터 이름입니다. 예에서는
github
입니다. - 6
- 지정할 매개 변수입니다.
- 7
TriggerTemplate
리소스에 연결할TriggerBinding
리소스의 이름입니다.- 8
TriggerBinding
리소스에 연결할TriggerTemplate
리소스의 이름입니다.- 9
- 이벤트를 확인하는 데 사용할 시크릿입니다.
EventListener
리소스는 JSON 페이로드와 함께 들어오는 HTTP 기반 이벤트를 수신 대기하는 끝점 또는 이벤트 싱크를 제공합니다. 각TriggerBinding
리소스에서 이벤트 매개변수를 추출한 다음 이 데이터를 처리하여 해당TriggerTemplate
리소스에서 지정하는 Kubernetes 리소스를 생성합니다. 또한EventListener
리소스는 페이로드 유형을 확인하고 선택적으로 수정하는 이벤트interceptors
를 사용하여 페이로드에 대한 간단한 이벤트 처리 또는 기본 필터링 작업을 수행합니다. 현재 파이프라인 트리거는 5가지 유형의 인터셉터를 지원합니다. Webhook 인터셉터,GitHub 인터셉터,GitLab 인터셉터,Bitbucket 인터셉터 및 CEL (Common Expression Language) 인터셉터.다음 예제에서는
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
4.2.3. 추가 리소스
- 파이프라인 설치에 대한 내용은 OpenShift Pipelines 설치를 참조하십시오.
- 사용자 정의 CI/CD 솔루션 생성에 대한 자세한 내용은 CI/CD 파이프라인을 사용하여 애플리케이션 생성을 참조하십시오.
- 재암호화 TLS 종료에 대한 자세한 내용은 재암호화 종료를 참조하십시오.
- 보안 경로에 대한 자세한 내용은 보안 경로 섹션을 참조하십시오.