6장. 파이프라인 실행 관리
Pipeline을 코드로 사용하여 코드 리포지토리에서 파이프라인을 생성하고 이러한 파이프라인을 실행할 수 있습니다.
6.1. Pipeline을 코드로 사용하여 파이프라인 실행 생성
코드로 파이프라인을 사용하여 파이프라인을 실행하려면 리포지토리의 .tekton/
디렉터리에 있는 파이프라인 실행 정의 또는 템플릿을 YAML 파일로 생성할 수 있습니다. 원격 URL을 사용하여 다른 리포지토리의 YAML 파일을 참조할 수 있지만 파이프라인 실행은 .tekton/
디렉터리가 포함된 리포지토리의 이벤트에서만 트리거됩니다.
코드 확인자인 파이프라인은 외부 종속 항목 없이 단일 파이프라인 실행으로 모든 작업을 통해 파이프라인을 번들로 실행합니다.
-
파이프라인의 경우 spec 또는 분리된
Pipeline
오브젝트와 함께 하나 이상의 파이프라인 실행을 사용합니다. - 작업의 경우 파이프라인 내부에 작업 사양을 포함하거나 Task 오브젝트로 별도로 정의합니다.
커밋 및 URL 매개 변수화
{{<var>}} 형식으로 동적 확장 가능한 변수를 사용하여 커밋 및 URL의 매개변수를 지정할 수 있습니다. 현재 다음 변수를 사용할 수 있습니다.
-
{{repo_owner}}
: 리포지토리 소유자. -
{{REPO_NAME}}
: 리포지토리 이름입니다. -
{{repo_url}}
: 리포지토리 전체 URL입니다. -
{{revision}}
: 커밋의 전체 SHA 버전. -
{{sender}}
: 커밋 보낸 사람의 사용자 이름 또는 계정 ID입니다. -
{{source_branch}}
: 이벤트가 시작된 분기 이름입니다. -
{{target_branch}}
: 이벤트가 대상으로 하는 분기 이름입니다. 푸시 이벤트의 경우source_branch
와 동일합니다. -
{{pull_request_number}}
:pull_request
이벤트 유형에 대해서만 정의된 가져오기 또는 병합 요청 번호입니다. -
{{git_auth_secret}}
: 개인 리포지터리를 확인하기 위해 Git 공급자의 토큰을 사용하여 자동으로 생성되는 시크릿 이름입니다.
파이프라인 실행에 이벤트 일치
파이프라인 실행에 특수 주석을 사용하여 각 파이프라인 실행과 다른 Git 공급자 이벤트를 일치시킬 수 있습니다. 이벤트와 일치하는 파이프라인이 여러 개 있는 경우 코드가 병렬로 실행되고 파이프라인 실행이 완료되면 결과를 Git 공급자에 게시합니다.
파이프라인 실행에 가져오기 이벤트 일치
다음 예제를 사용하여 기본 분기를 대상으로 하는 pull_request
이벤트와 함께 pipeline-pr-
파이프라인 실행을 일치시킬 수 있습니다.
main
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
name: pipeline-pr-main
annotations:
pipelinesascode.tekton.dev/on-target-branch: "[main]" 1
pipelinesascode.tekton.dev/on-event: "[pull_request]"
# ...
- 1
- 쉼표로 구분된 항목을 추가하여 여러 분기를 지정할 수 있습니다. 예를 들면
"[main, release-nightly]"
입니다. 또한 다음을 지정할 수 있습니다.-
"refs/heads/main"
과 같은 분기에 대한 전체 참조 -
"refs/heads/\*"
와 같은 패턴 일치가 있는 글러입니다. -
"refs/tags/1.\*"
와 같은 태그
-
파이프라인 실행에 푸시 이벤트 일치
다음 예제를 사용하여 refs/heads/main
분기를 대상으로 하는 푸시 이벤트와 함께 pipeline-
파이프라인 실행과 일치시킬 수 있습니다.
push
-on-main
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
name: pipeline-push-on-main
annotations:
pipelinesascode.tekton.dev/on-target-branch: "[refs/heads/main]" 1
pipelinesascode.tekton.dev/on-event: "[push]"
# ...
- 1
- 쉼표로 구분된 항목을 추가하여 여러 분기를 지정할 수 있습니다. 예를 들면
"[main, release-nightly]"
입니다. 또한 다음을 지정할 수 있습니다.-
"refs/heads/main"
과 같은 분기에 대한 전체 참조 -
"refs/heads/\*"
와 같은 패턴 일치가 있는 글러입니다. -
"refs/tags/1.\*"
와 같은 태그
-
주석 이벤트와 파이프라인 실행 일치
다음 예제를 사용하여 주석의 텍스트가 ^/merge-pr
정규식과 일치하는 경우 가져오기 요청에 대한 주석과 함께 pipeline-comment
파이프라인 실행을 일치시킬 수 있습니다.
apiVersion: tekton.dev/v1 kind: PipelineRun metadata: name: pipeline-comment annotations: pipelinesascode.tekton.dev/on-comment: "^/merge-pr" # ...
파이프라인 실행이 주석 작성자가 다음 요구 사항 중 하나를 충족하는 경우에만 시작됩니다.
- 작성자는 리포지토리의 소유자입니다.
- 작성자는 리포지토리의 공동 작업자입니다.
- 작성자는 리포지토리 조직에 있는 공용 멤버입니다.
-
주석 작성자는 Kubernetes 문서에 정의된 대로 리포지토리 루트에 있는
OWNERS
파일의승인자
또는검토자
섹션에 나열됩니다. 코드로서의 파이프라인은OWNERS
및OWNERS_ALIASES
파일에 대한 사양을 지원합니다.OWNERS
파일에 필터 섹션이 포함된 경우 코드로서의 파이프라인은 승인자 및 검토자가.*
필터에 대해서만 일치합니다.
주석 이벤트를 파이프라인 실행에 일치시키는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
고급 이벤트 일치
코드로서의 파이프라인은 고급 이벤트 일치에 대한 CEL(Common Expression Language) 기반 필터링 사용을 지원합니다. 파이프라인 실행에 pipelinesascode.tekton.dev/on-cel-expression
주석이 있는 경우 Pipeline은 CEL 표현식을 사용하고 on-target-branch
주석을 건너뜁니다. CEL 표현식은 간단한 on-target-branch
주석 일치와 비교하여 복잡한 필터링 및 부정을 허용합니다.
Pipeline과 함께 CEL 기반 필터링을 코드로 사용하려면 다음 주석 예제를 고려하십시오.
기본
분기를 대상으로 하는pull_request
이벤트를 일치시키고wip
분기에서 가져오는 경우 다음을 수행합니다.apiVersion: tekton.dev/v1 kind: PipelineRun metadata: name: pipeline-advanced-pr annotations: pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch == "main" && source_branch == "wip" ...
경로가 변경된 경우에만 파이프라인을 실행하려면
.pathChanged
접미사 함수를 glob 패턴과 함께 사용하면 됩니다.apiVersion: tekton.dev/v1 kind: PipelineRun metadata: name: pipeline-advanced-pr-pathchanged annotations: pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && "docs/\*.md".pathChanged() 1 # ...
- 1
docs
디렉터리의 모든 마크다운 파일과 일치합니다.
제목
[DOWNSTREAM]
으로 시작하는 모든 가져오기 요청을 일치시킵니다.apiVersion: tekton.dev/v1 kind: PipelineRun metadata: name: pipeline-advanced-pr-downstream annotations: pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request && event_title.startsWith("[DOWNSTREAM]") # ...
pull_request
이벤트에서 파이프라인을 실행하려면실험적
분기를 건너뜁니다.apiVersion: tekton.dev/v1 kind: PipelineRun metadata: name: pipeline-advanced-pr-not-experimental annotations: pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch != experimental" # ...
Pipeline을 코드로 사용하는 동안 고급 CEL 기반 필터링의 경우 다음 필드 및 접미사 함수를 사용할 수 있습니다.
-
이벤트
:push
또는pull_request
이벤트입니다. -
target_branch
: 대상 분기입니다. -
source_branch
:pull_request
이벤트의 출처 분기입니다.푸시
이벤트의 경우target_branch
와 동일합니다. -
event_title
:push
이벤트의 커밋 제목과pull_request
이벤트에 대한 가져오기 또는 병합 요청과 같은 이벤트 제목과 일치합니다. 현재 GitHub, Gitlab 및 Bitbucket Cloud만 지원되는 공급자입니다. -
.pathChanged
: 문자열에 대한 접미사 함수입니다. 문자열은 경로가 변경되었는지 확인하는 경로의 glob일 수 있습니다. 현재 GitHub 및 Gitlab만 공급자로 지원됩니다.
또한 Git 리포지토리 공급자가 전달하는 대로 전체 페이로드에 액세스할 수 있습니다. headers
필드를 사용하여 페이로드의 헤더(예: headers['x-github-event']
)에 액세스합니다. body
필드를 사용하여 페이로드 본문(예: body.pull_request.state
)에 액세스합니다.
코드로 CEL 기반 필터링에 대한 페이로드의 헤더와 본문을 코드로 사용하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
다음 예제에서는 다음 조건이 모두 true인 경우에만 파이프라인 실행이 시작됩니다.
-
가져오기 요청은
주요
분기를 대상으로 합니다. -
가져오기 요청 작성자는
슈퍼유저
입니다. -
작업은 동기화됩니다. 이 작업은 가져오기 요청에서 업데이트가 수행될 때 트리거됩니다.
apiVersion: tekton.dev/v1 kind: PipelineRun metadata: annotations: pipelinesascode.tekton.dev/on-cel-expression: | body.pull_request.base.ref == "main" && body.pull_request.user.login == "superuser" && body.action == "synchronize" # ...
이벤트 일치에 header
또는 body
필드를 사용하는 경우 retest
와 같은 Git 명령을 사용하여 파이프라인 실행을 트리거하지 못할 수 있습니다. Git 명령을 사용하는 경우 페이로드 본문은 원래 페이로드가 아닌 이 명령을 포함하는 주석입니다.
이벤트 일치에 body
필드를 사용할 때 파이프라인 실행을 다시 트리거하려면 가져오기 요청 또는 병합 요청을 닫고 다시 열거나 또는 다음 명령을 사용하여 새 SHA 커밋을 추가할 수 있습니다.
git commit --amend --no-edit && git push --force-with-lease
Github API 작업에 임시 GitHub 앱 토큰 사용
Pipelines에서 GitHub App에서 코드로 생성한 임시 설치 토큰을 사용하여 GitHub API에 액세스할 수 있습니다. 토큰 값은 git-provider-token
키의 개인 리포지토리에 대해 생성된 임시 {{git_auth_secret}}
동적 변수에 저장됩니다.
예를 들어 가져오기 요청에 주석을 추가하려면 Pipelines를 Code 주석으로 사용하여 Tekton Hub의 github-add-comment
작업을 사용할 수 있습니다.
... pipelinesascode.tekton.dev/task: "github-add-comment" ...
그런 다음 파이프라인 실행 정의의 tasks
섹션 또는 finally
작업에 작업을 추가할 수 있습니다.
[...]
tasks:
- name:
taskRef:
name: github-add-comment
params:
- name: REQUEST_URL
value: "{{ repo_url }}/pull/{{ pull_request_number }}" 1
- name: COMMENT_OR_FILE
value: "Pipelines as Code IS GREAT!"
- name: GITHUB_TOKEN_SECRET_NAME
value: "{{ git_auth_secret }}"
- name: GITHUB_TOKEN_SECRET_KEY
value: "git-provider-token"
...
- 1
- 동적 변수를 사용하면 모든 리포지터리의 가져오기 요청에 이 스니펫 템플릿을 재사용할 수 있습니다.
GitHub 앱에서는 생성된 설치 토큰을 8시간 동안 사용할 수 있으며 클러스터에서 다르게 구성하지 않는 한 이벤트가 시작된 저장소로 범위가 지정됩니다.
추가 리소스