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
리소스는TriggerBinding
및TriggerTemplate
리소스를 연결하고,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)
다음은 방금 생성한 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: master - 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
다음 예제는 TriggerBinding
및 TriggerTemplate
리소스를 연결하는 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 name: vote-app
다음 예제에서는 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