검색

6장. 파이프라인 실행 관리

download PDF

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 파일의 승인자 또는 검토자 섹션에 나열됩니다. 코드로서의 파이프라인은 OWNERSOWNERS_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시간 동안 사용할 수 있으며 클러스터에서 다르게 구성하지 않는 한 이벤트가 시작된 저장소로 범위가 지정됩니다.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.