Tekton 파이프라인에 대한 작업

DevOps Insights 2026년 8월 31일에 서비스 종료되어 중단될 예정입니다. Continuous Delivery 은 2027년 2월 12일에 au-syd, ca-tor, us-east 지역에서 중단될 예정입니다. 또한 해당 날짜를 기점으로 Code Risk Analyzer는 모든 지역에서 서비스가 중단될 예정입니다. 특정 지역에서 해당 기능을 실제로 사용하지 않는 경우, 해당 지역의 기능은 예정보다 일찍 중단될 수 있으며 새로운 인스턴스 등록이 더 이상 허용되지 않을 수 있습니다. 자세히 알아보기

Tekton Pipelines는 Kubernetes 클러스터 내에서 지속적 통합(Continuous Integration) 및 지속적 배포( Continuous Delivery ) 파이프라인을 구성하고 실행하는 데 사용할 수 있는 오픈 소스 프로젝트입니다. Tekton 파이프라인은 yaml 파일에서 정의되고 이는 보통 Git 저장소(repo)에 저장됩니다.

하이브리드 텍톤
텍톤 파이프라인

Tekton은 파이프라인을 정의하기 위해 Kubernetes 에 일련의 Custom Resources 확장 기능을 제공합니다. 다음 기본 Tekton 파이프라인 리소스는 이러한 확장기능에 포함됩니다.

텍톤 파이프라인 리소스
자원 설명
Task 코드 컴파일, 테스트 실행 및 이미지 빌드와 배치 같은 빌드 단계 세트를 정의합니다.
TaskRun 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 태스크를 인스턴스화합니다. 자체적으로 또는 파이프라인의 일부로 태스크를 시작할 수 있습니다.
Pipeline 파이프라인을 구성하는 태스크 세트를 정의합니다.
PipelineRun 특정 입력, 출력 및 실행 매개변수를 사용하여 실행할 파이프라인을 인스턴스화합니다.

Tekton 파이프라인을 사용할 때 다음 기능을 이용할 수 있습니다.

  • Cloud 특성: Tekton 파이프라인은 Kubernetes에서 실행되고, 첫 번째 클래스 유형으로 Kubernetes 클러스터를 사용하며, 해당 빌드 블록으로 컨테이너를 사용합니다.
  • 분리: 하나의 파이프라인을 사용하여 임의의 Kubernetes 클러스터에 배치할 수 있습니다. 파이프라인을 구성하는 태스크를 격리하여 실행할 수 있습니다. 그리고 파이프라인을 실행하는 사이에 리소스(예: Git 저장소)를 전환할 수 있습니다.
  • 유형 지정: 이미지와 같은 특정 유형의 리소스에 대한 구현을 전환할 수 있습니다.

Tekton 파이프라인 프로젝트는 베타 릴리스입니다. 새 버전의 Tekton으로 파이프라인을 업데이트해야 합니다. Tekton 최신 버전에 대한 자세한 내용은 다음을 참조하십시오. https://github.com/tektoncd/pipeline/releases.

IBM Cloud® Continuous Delivery에서는 애플리케이션을 빌드, 테스트 및 배치할 때 사용할 수 있는 두 가지 유형의 Delivery Pipeline을 제공합니다.

  • 클래식: 클래식 Delivery Pipeline은 파이프라인 다이어그램에 임베드된 상태로 그래픽으로 작성됩니다. 이러한 파이프라인은 클라우드의 공유 작업자 또는 자체 Kubernetes 클러스터에서 실행되는 개인용 작업자에서 실행될 수 있습니다.
  • Tekton: Tekton Delivery Pipeline은 Kubernetes 리소스 세트로서 파이프라인을 정의하는 yaml 파일 내에서 작성됩니다. 해당 YAML 파일을 편집하여 파이프라인의 동작을 변경할 수 있습니다. Tekton 파이프라인은 자체 클러스터에서 실행되는 개인용 작업자에서 실행될 수 있습니다. 이는 퍼블릭 클라우드의 IBM 관리 작업자에서도 실행될 수 있습니다. Tekton 통합 기능은 Tekton 파이프라인 실행 상태를 확인하고 새로운 실행을 트리거하는 데 사용할 수 있는 대시보드를 제공합니다. 또한 파이프라인 트리거, 파이프라인 정의, 파이프라인이 실행되는 작업자 및 파이프라인 특성을 지정하기 위한 메커니즘을 제공합니다.

두 파이프라인 유형에서는 별도의 컨테이너에서 실행하고 선택하는 이미지를 사용함으로써 작업 또는 단계를 서로 구분합니다. Classic 및 Tekton 파이프라인은 모두 하나의 툴체인 내에 존재하며, 빌드, 테스트 및 배포 과정에서 사용되는 추가 도구 통합 기능을 추가하기 위해 해당 툴체인에 의존합니다.

2020년 11월 20일에 Dockerhub는 익명 이미지 가져오기에 대한 비율 제한을 도입했습니다. 이 변경사항은 Dockerhub 호스팅 이미지를 참조하는 태스크를 실행 중인 사용자에게 영향을 줄 수 있습니다. IBM Cloud Container Registry 등의 대체 레지스트리를 사용하도록 권장합니다.

전제조건

Tekton 파이프라인을 추가 및 실행하기 전에 다음 리소스가 준비되어 있는지 확인하십시오.

  • 다음 도구 통합을 포함하는 도구 체인:

    • Tekton yaml 파일을 포함하여 Tekton 파이프라인 코드를 포함하는 저장소 도구 통합(예: GitHub 도구 통합). 다음에서 파이프라인 및 작업 정의 예제를 확인하세요 GitHub 에서 확인할 수 있습니다. Tekton 파이프라인 사용 시작에 대한 자세한 내용은 ‘Tekton 파이프라인’을 참조하세요.
    • 선택사항입니다. 기본 공유 Pipeline Worker를 사용하지 않으면 Kubernetes 클러스터를 참조하는 Delivery Pipeline Private Worker 도구 통합을 사용할 수 있습니다. 개인용 작업자에 대한 자세한 정보는 Delivery Pipeline Private Worker 설치를 참조하십시오.
  • 로컬로 설치된 IBM Cloud CLI.

  • kubectl 이 로컬로 설치되었습니다.

  • IBM Cloud® Kubernetes Service 클러스터와 같은 Kubernetes 클러스터 (버전 1.22 이상).

도구 체인 및 Delivery Pipeline Private Worker 도구 통합은 같은 지역에 있어야 합니다.

콘솔을 사용하여 Tekton에 대한 Delivery Pipeline 작성

Delivery Pipeline 도구 통합을 구성하는 경우 작성할 파이프라인 유형을 선택할 수 있습니다.

  1. 툴체인이 없는 경우, 템플릿을 선택하여 툴체인을 생성하십시오. 사용하는 템플리트에 따라 사용 가능한 필드가 다를 수 있습니다. 기본 필드 값을 검토하고 필요한 경우 해당 설정을 변경하십시오.

  2. 이미 툴체인이 있고 여기에 이 도구 통합 기능을 추가하려는 경우, IBM Cloud 콘솔에서 메뉴 아이콘( 햄버거 아이콘 ) > 플랫폼 자동화 > 툴체인을 클릭하십시오. '툴체인' 페이지에서 툴체인을 클릭하면 해당 툴체인의 '개요' 페이지가 열립니다.

  3. 다음과 같이 도구 체인에 Delivery Pipeline 통합을 추가하십시오.

    a. 도구 추가를 클릭하십시오.

    b. 도구 통합 섹션에서 Delivery Pipeline을 클릭하십시오.

  4. 새 파이프라인의 이름을 지정하십시오.

  5. Tekton을 선택하여 Tekton Delivery Pipeline을 작성하십시오. 정의된 Kubernetes 클러스터에서 Tekton 파이프라인 실행 결과를 확인할 수 있으며, 파이프라인 정의 저장소, 파이프라인 트리거, 파이프라인 실행 위치 및 간단한 시크릿을 구성할 수 있습니다.

  6. 파이프라인을 사용하여 사용자 인터페이스를 배치하려는 경우 앱 보기 메뉴에서 앱 표시 선택란을 선택하십시오. 파이프라인에서 작성하는 모든 앱이 도구 체인의 개요 페이지에 있는 앱 보기 목록에 표시됩니다.

  7. 통합 작성을 클릭하여 도구 체인에 Delivery Pipeline을 추가하십시오.

콘솔을 사용하여 Tekton에 대한 Delivery Pipeline 구성

  1. 툴체인의 ‘개요’ 페이지에서 ‘배포 파이프라인 ’ 카드의 Delivery Pipeline 를 클릭하여 Tekton Delivery Pipeline 개요 페이지를 엽니다.

  2. 설정 을 클릭하십시오. 정의 섹션에서 다음 태스크를 완료하십시오.

    a. Tekton 파이프라인 정의 및 관련 아티팩트를 포함하는 Git 저장소 및 URL을 지정하십시오. 저장소를 사용할 수 없으면 도구 체인 개요 페이지로 돌아와 저장소를 추가하십시오.

    b. 사용하려는 Git 저장소 내의 분기를 선택하거나 태그를 입력하십시오.

    c. Git 저장소 내에서 파이프라인 정의 경로를 지정하십시오. 동일한 저장소 내에서 특정 정의를 참조할 수 있습니다. 도구 체인에 통합되어 있는 경우 여러 정의 저장소도 추가할 수 있습니다.

    d. 변경사항을 저장하십시오.

    파이프라인 정의가 자동으로 업데이트됩니다.

    계산된 파이프라인 정의 크기 한계는 1MB입니다. 파이프라인을 저장하거나 실행할 때 오류가 발생하면 파이프라인 정의의 크기를 줄이거나 다중 파이프라인으로 분할해야 합니다.

  3. 작업자 탭에서는 Tekton 파이프라인을 실행할 때 사용하려는 IBM 관리 공유 작업자 또는 개인용 작업자를 선택하십시오. 개인용 작업자에 대한 자세한 정보는 Delivery Pipeline Private Worker에 대한 작업을 참조하십시오.

    개인용 작업자는 Tekton 파이프라인과 동일한 도구 체인에서 정의되어야 합니다.

  4. 환경 특성 섹션에서 추가를 클릭하고 특성 유형을 선택하여 사용자 고유의 환경 특성을 정의하십시오. 예를 들어 IBM Cloud 리소스에 액세스하기 위해 파이프라인에 있는 모든 스크립트에서 사용하는 API 키를 전달하는 API_KEY 특성을 정의할 수 있습니다. 다음 유형의 특성을 추가할 수 있습니다.

    • 열거: 사용자 정의 옵션 목록에서 선택할 수 있는 값이 있는 특성 키입니다.
    • 보안 값: AES-128 암호화를 통해 보호되는 단일 행 값이 있는 특성 키입니다. 이 값은 별표 문자를 사용하여 표시됩니다. 또는 도구 체인에서 이러한 도구를 사용할 수 있는 경우, 키 아이콘을 클릭하여 저장소 통합에서 시크릿(예: IBM Key Protect)을 선택할 수 있습니다.
    • 텍스트 값: 단일 행 또는 여러 행일 수 있는 텍스트 값이 있는 특성 키입니다. 이전에는 별도의 텍스트 영역 특성 유형에서 다중 행 값을 지원했습니다.
    • 도구 통합: 도구 체인 도구 통합에서 런타임에 분석되는 값이 있는 특성 키입니다. 기본적으로 이 값은 도구 통합의 JSON 문자열 표시입니다. 선택적 JSON 필터에 대한 값을 제공하여 특정 필드 또는 오브젝트의 서브세트를 검색할 수 있습니다. 예를 들어 GitHub 통합이 선택되고 JSON 필터 parameters.repo_url이 지정된 경우 이 값은 PipelineRun 리소스가 실행될 때 도구 통합에 구성된 Git 저장소의 URL을 반영합니다.

    Tekton 파이프라인 리소스에서 이러한 특성에 액세스할 수 있습니다. 이 특성에 대한 자세한 정보는 Tekton 파이프라인 환경 및 리소스를 참조하십시오.

    대체되지 않도록 특성을 잠글 수 있습니다. 런타임 시 잠긴 특성을 대체하려고 시도하면 실행 요청이 거부됩니다. 잠긴 특성은 기본적으로 실행 사이드 패널에 표시되지 않지만 '모든 특성 표시' 옵션을 사용하여 읽기 전용으로 표시할 수 있습니다.

  5. 저장 을 클릭하십시오.

  6. '파이프라인 개요' 페이지에서 [추가]를 클릭하여 트리거를 생성하고, 추가할 트리거 유형을 선택한 다음, 해당 트리거를 이벤트 리스너에 연결합니다. 사용 가능한 이벤트 리스너 목록에는 파이프라인 코드 저장소에 정의된 리스너가 포함되어 있습니다.

    트리거는 Tekton 트리거 정의를 기반으로 합니다. Git 리포 트리거는 자신에게 매핑된 이벤트 리스너를 사용하여 수신되는 이벤트 페이로드에서 정보를 추출하고 Kubernetes 리소스를 생성합니다. 이러한 리소스는 Tekton PipelineRun 리소스에 적용됩니다.

    트리거된 파이프라인 실행은 Limit concurrent runs 옵션을 사용하여 실행을 직렬화하도록 구성하지 않는 한 동시에 실행됩니다. 이 옵션이 사용 가능하면 이 트리거로 시작할 수 있는 동시 실행 수를 제한할 수 있습니다. 예를 들어, 최대 한도가 1로 설정된 경우, 이 트리거에 대한 파이프라인 실행은 한 번에 하나만 수행되며, 그 외의 실행은 “대기 중” 상태로 대기열에 들어갑니다. 최대 20개의 실행( IBM 관리형 워커를 사용하는 경우 5개)이 대기 상태로 큐에 쌓인 후, 이후 요청은 자동으로 취소됩니다. IBM 관리형 워커를 사용할 경우, 기본적으로 모든 시간 기반 트리거는 동시에 하나만 실행될 수 있습니다.

    트리거가 동시 실행 한도를 초과하면 용량을 사용할 수 있을 때까지 새 파이프라인 실행이 '대기' 상태로 전환됩니다. 원하는 경우 이 동작을 수정하여 가장 최근 실행만 '대기 중' 상태가 되고 다른 실행은 자동으로 취소되도록 할 수 있습니다. 예를 들어, 짧은 시간 내에 여러 번 실행이 트리거될 때 가장 최근 커밋만 빌드하려는 경우 Git 트리거에 유용할 수 있습니다. 이 기능을 활성화하려면 트리거 구성 패널에서 '대기 실행 1회로 제한' 토글을 사용할 수 있으며, limit_waiting_runs 속성을 사용하여 API를 통해서도 설정할 수 있습니다 (API 문서 참조). 이 설정은 '대기 중' 상태의 실행에만 적용되며 활성 실행에는 영향을 미치지 않습니다.

    수동 트리거실행 파이프라인 단추를 클릭하고 트리거를 선택하면 실행됩니다.

    Git 저장소 트리거는 지정된 Git 저장소 및 분기에 대해 지정된 Git 이벤트 유형이 발생하면 실행됩니다.

    Tekton 파이프라인 리소스에서 Git 트리거로 전달되는 웹훅 페이로드에 액세스할 수 있습니다. 정확한 필드가 저장소에 특정한 경우 웹훅 페이로드에 대한 일반 구문은 $(event.payloadFieldName)입니다. 웹훅을 작성하려면 우선 대응되는 Git 통합에 대해 Git Admin 액세스 권한을 부여해야 합니다. Git Admin 액세스 권한을 부여하려면 다시 Git 통합을 구성 및 저장하십시오.

    시간 기반 트리거는 CRON 값으로 정의된 예약된 시간에 실행됩니다. 시간 기반 트리거에 사용되는 CRON 표현식은 UNIX crontab 구문을 기반으로 하며, 다음 다섯 가지 시간 및 날짜 필드로 구성됩니다: minute, hour, day of the month, month, day of the week. 이러한 필드는 X X X X X 형식으로 공백으로 구분됩니다. 타이밍 트리거의 최대 빈도는 5분마다 한 번입니다. 다음 예는 다양한 시간 빈도를 사용하는 문자열을 보여줍니다.

    • */5 * * * * - 트리거가 5분마다 실행됩니다.
    • 0 * * * * - 트리거가 매시간 시작 시 실행됩니다.
    • 0 9 * 1 MON-FRI - 트리거가 1월의 평일 오전 9시마다 실행됩니다.
    • 0 * * NOV,DEC 1 - 트리거가 11월, 12월 중 월요일 매시간에 실행됩니다.

일반 웹훅 트리거는 시크릿 설정으로 구성된 POST 요청이 일반 웹훅 URL로 이동할 때 실행됩니다. 일반 웹훅 트리거는 POST 요청에 대한 고유한 웹훅 URL을 제공합니다.

PipelineRun UI가 이벤트 페이로드 섹션에서 일반 웹훅 페이로드 값을 숨기지 않으므로 페이로드에 민감한 데이터를 포함하지 마십시오. 그 대신에 비밀번호 또는 API 키 시크릿 등의 트리거 특성을 사용하여 일반 웹훅에서 요구하는 데이터를 보호하십시오.

다음 방법 중 하나를 사용하여 Git, Slack 발신 웹훅, Artifactory 웹훅 등에서 사용할 수 있도록 일반 웹훅 트리거를 보호할 수 있습니다.

  • 저장된 토큰과 POST 요청 내에서 전달되는 토큰을 비교하는 토큰 일치. 지원되는 토큰 소스는 헤더, 조회 또는 페이로드입니다. 토큰 일치는 GitLab 웹훅 및 Slack 발신 웹훅에서 사용됩니다.
  • 저장된 토큰이 있는 HMAC 16진 다이제스트를 사용하여 다이제스트된 페이로드에서 생성되는 시그니처와 해시를 비교하는 페이로드 일치. 지원되는 시그니처 소스는 헤더, 조회 또는 페이로그입니다. 사용자가 다이제스트 알고리즘을 지정해야 합니다. 페이로드 다이제스트 일치는 GitHub 웹훅에서 사용됩니다.
  • Tekton 태스크 유효성 검증을 수행하려면 사용자가 해당 Tekton 태스크 내에서 웹훅 요청을 유효성 검증해야 합니다.

GitHub 웹훅과 함께 일반 웹훅 트리거를 사용하려면 다음 값을 지정하십시오.

  • 보안: Payload Digest Matches
  • 시그니처 소스: Header
  • 헤더 키 이름: X-Hub-Signature
  • 다이제스트 알고리즘: sha1.

GitLab 웹훅과 함께 일반 웹훅 트리거를 사용하려면 다음 값을 지정하십시오.

  • 보안: Token Matches
  • 토큰 소스: Header
  • 헤더 키 이름: X-Gitlab-Token

Slack 웹훅과 함께 일반 웹훅 트리거를 사용하려면 다음 값을 지정하십시오.

  • 보안: Token Matches
  • 토큰 소스: Payload
  • JSON 특성 이름/양식 키: token

다음 예는 Token Matches 규칙으로 보안 설정된 일반 웹훅에 curl 명령을 사용하는 방법을 보여줍니다.

  ![일반 웹훅](images/pipeline_tekton_generic_webhook.png){: caption="웹훅 " caption-side="bottom"}
curl -X POST \
https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \
-H 'Content-Type: application/json' \
-H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \
-d '{
"somekey": "somevalue"
}'

파이프라인 정의에서 페이로드 값을 얻으려면 이벤트에서 파생된 값으로 Triggerbinding 매개변수를 지정하십시오.

apiVersion: tekton.dev/v1beta1
kind: TriggerBinding
metadata:
name: binding
spec:
params:
- name: somekey
value: $(event.somekey)

변경사항을 저장하십시오.

또한 일반 웹훅 트리거는 웹훅 요청 본문에서 프로퍼티 전달을 지원합니다. 이를 통해 웹훅에 의해 트리거되는 PipelineRun 에 대한 프로퍼티를 재정의하거나 PipelineRun 에 사용된 파이프라인/트리거 프로퍼티를 보완하는 추가 프로퍼티를 전달할 수 있습니다.

페이로드 프로퍼티에 비밀번호나 API 키 비밀 번호와 같은 민감한 데이터를 전달해야 하는 경우, 해당 프로퍼티에 속성 유형 SECURE 을 사용하여 UI에서 일반 텍스트로 표시되지 않도록 해야 합니다.

또한, 트리거되는 PipelineRun 을 설명하고 브라우저에서 PipelineRun 세부 정보를 볼 때 UI에 표시되는 선택적 설명을 요청 본문으로 전달할 수 있습니다.

다음 예는 텍스트 속성, 보안 속성 및 설명을 전달하면서 일반 웹훅과 함께 curl 명령을 사용하는 방법을 보여 줍니다:

curl -X POST \
https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \
-H 'Content-Type: application/json' \
-H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \
-d '{
  "description":"This text can be used to describe the PipelineRun that will be triggered by this request.",
  "properties":[
    {"name":"mytextprop","type":"TEXT","value":"my text value"},
    {"name":"mysecureprop","type":"SECURE","value":"mysecret"}
  ]
}'

Tekton 파이프라인에 대한 Delivery Pipeline 트리거 구성하기

Git 리포지토리의 다양한 이벤트에 따라 Tekton 파이프라인의 트리거를 구성할 수 있습니다. 다음 옵션을 사용하여 Git 트리거를 필터링합니다:

  • 브랜치: 브랜치: 지정된 이벤트가 발생하면 선택한 리포지토리의 특정 브랜치에 대한 파이프라인을 트리거합니다.
  • 패턴: 지정된 이벤트가 발생하면 선택한 리포지토리의 태그 및 브랜치 이름에 대한 글로브 일치를 기반으로 파이프라인을 트리거합니다.
  • CEL 필터: 이벤트가 제공된 일반 표현식 언어(CEL) 필터와 일치할 때 파이프라인을 트리거합니다.

분기패턴 옵션을 사용하여 ' commit push, ' pull request opened' , ' updated' 또는 ' closed' 와 같은 이벤트를 지정합니다. 또한 초안 풀리퀘스트 이벤트 포함 옵션을 전환하여 초안 풀리퀘스트에 대한 파이프라인 트리거를 허용하거나 건너뛰는 방식으로 풀리퀘스트 이벤트를 지정할 수 있습니다. 마찬가지로, 포크된 리포지토리에서 풀 리퀘스트 이벤트 포함 토글을 사용하여 포크된 리포지토리에서 풀 리퀘스트에 대한 파이프라인 트리거를 허용할지 여부를 지정할 수 있습니다. 또한 라벨 필터 옵션을 선택하여 필터 테이블의 사용자 정의 기준에 따라 풀 리퀘스트 라벨을 기반으로 필터링을 활성화할 수 있습니다.

CEL 필터 옵션은 이벤트 페이로드의 다른 필드와 일치하는 것과 같은 고급 사용 사례를 지원합니다. 이 옵션은 푸시 이벤트, 모든 풀 리퀘스트 이벤트, 이슈 이벤트, 이슈 댓글 이벤트, 릴리스 이벤트 및 GitHub 병합 대기열 이벤트를 지원합니다. 이 옵션은 일반 웹훅 트리거의 선택적 기능으로도 사용할 수 있으며 웹훅 페이로드를 기반으로 이벤트 필터링을 제공합니다.

CEL 개요

CEL은 조건을 평가하고 간결하고 가독성 있는 방식으로 유효성 검사를 수행하도록 설계된 강력하고 유연한 표현 언어입니다. CEL은 이벤트 필터링과 같이 복잡한 조건부 로직이 필요한 사용 사례에 이상적입니다.

Tekton 파이프라인에서는 보다 강력하고 유연한 이벤트 필터링을 제공하기 위해 CEL 옵션이 도입되었습니다. 웹훅 페이로드는 사용자가 제공한 CEL 표현식에 대해 평가됩니다. CEL 표현식이 true 로 평가되면 파이프라인 실행이 트리거됩니다.

CEL에서는 다음과 같은 기능을 지원합니다:

  • 산술 연산자 (+, -, *, /, %)
  • 비교 연산자 (=, !=, <, >, <=, >=)
  • 논리 연산자 (&&, ||)
  • 문자열 연산자(contains, matches, startsWith, endsWith)
  • 컬렉션 연산자(in, !in)
  • 변수(변수를 이름으로 직접 참조)
  • 리터럴(문자열, 숫자, 부울, 널과 같은 리터럴 지원)

CEL에는 기본 CEL 언어에 더 많은 기능을 제공하기 위해 다음과 같은 확장 기능이 포함되어 있습니다:

  • Sets extension 을 추가하여 고급 집합 작업을 지원하고 이벤트 필터링에 더 많은 유연성을 제공합니다. 이 확장 기능에 대한 자세한 내용은 Sets를 참조하세요.
  • matchesGlob 을 추가하여 기존 패턴 필드를 새 CEL 필터 옵션으로 변환할 때 호환성을 제공하세요. 고급 정규식 일치에는 네이티브 CEL matches 연산자를 사용하는 것이 좋습니다.

CEL에 대한 자세한 내용은 CEL 문서를 참조하세요.

CEL로 변환

기존 이벤트 필터링 선택 항목을 CEL 표현식으로 변환하려면 다음 단계를 완료하세요:

  1. 변환하려는 Git 트리거를 편집합니다.

  2. 트리거 켜기 섹션에서 CEL 필터 옵션을 선택합니다.

    셀 필터
    필터

    다음 요소는 자동으로 동등한 CEL 표현식으로 변환됩니다:

    • 분기 또는 패턴
    • commit push, pull request opened, updated, closed 등의 이벤트가 있습니다
    • 초안 풀 리퀘스트 이벤트 포함
    • 포크에서 풀 리퀘스트 이벤트 포함
    • 라벨 필터

    셀 필터
    필터

    생성된 CEL 표현식은 필요에 따라 편집할 수 있는 텍스트 영역 필드에 기록됩니다.

    일반 웹훅 트리거에는 전환을 위한 필터가 존재하지 않으므로, CEL 필터로의 전환은 Git 트리거에만 적용됩니다.

    CEL 옵션을 선택한 상태에서 트리거를 저장하면 이전에 선택한 이벤트가 CEL 표현식으로 바뀝니다. CEL 필터 옵션을 저장한 후 브랜치 또는 패턴 옵션으로 전환하면 이전 이벤트 선택 항목이 저장되지 않습니다. CEL 옵션에서 분기 또는 패턴 옵션으로의 변환은 지원되지 않습니다.

CEL 표현식 예제

다음은 지원되는 각 Git 유형에 대한 일반적인 CEL 표현식 예시입니다: GitHub, GitLabBitBucket. 이러한 예제를 복사하고 수정하여 요구 사항을 충족할 수 있습니다.

GitHub 예제:

지정된 브랜치에 대해 풀 리퀘스트가 열리거나 업데이트될 때 실행합니다:

   header['x-github-event'] == 'pull_request' &&
      (body.action == 'opened' || body.action == 'synchronize') &&
      body.pull_request.base.ref == 'main'

커밋이 지정된 브랜치에 푸시되면 실행됩니다:

   header['x-github-event'] == 'push' && body.ref == 'refs/heads/main'

커밋이 지정된 브랜치에 푸시될 때 실행되지만 커밋 메시지에 특정 문자열이 포함되면 건너뜁니다:

   header['x-github-event'] == 'push' &&
      body.ref == 'refs/heads/main' &&
      !body.head_commit.message.contains("skip run")

지정된 문자열이 포함된 댓글이 풀 리퀘스트에 추가될 때 실행됩니다:

   header['x-github-event'] == 'issue_comment' &&
      body.action == 'created' && has(body.issue.pull_request) &&
      body.comment.body.contains('/lgtm')

지정된 레이블로 이슈가 만들어지면 실행합니다:

   header['x-github-event'] == 'issues' &&
      body.action == 'opened' &&
      body.issue.labels.exists(label, label.name == 'urgent')

GitLab 예제:

지정된 브랜치에 대해 병합 요청이 열리거나 업데이트될 때 실행됩니다:

   header['x-gitlab-event'] == 'Merge Request Hook' &&
      (body.object_attributes.action == 'open' || body.object_attributes.action == 'update') &&
      body.object_attributes.target_branch == 'main'

커밋이 지정된 브랜치에 푸시되면 실행됩니다:

   header['x-gitlab-event'] == 'Push Hook' && body.ref == 'refs/heads/main'

커밋이 지정된 브랜치에 푸시될 때 실행되지만 커밋 메시지에 특정 문자열이 포함되면 건너뜁니다:

   header['x-gitlab-event'] == 'Push Hook' &&
      body.ref == 'refs/heads/main' &&
      !body.object_attributes.last_commit.message("skip run")

지정된 문자열이 포함된 댓글이 병합 요청에 추가될 때 실행됩니다:

   header['x-gitlab-event'] == 'Note Hook' &&
      body.object_attributes.noteable_type == 'MergeRequest' &&
      body.object_attributes.action == 'create' &&
      body.object_attributes.note.contains('/lgtm')

지정된 레이블로 이슈가 만들어지면 실행합니다:

   header['x-gitlab-event'] == 'Issue Hook' &&
      (body.object_attributes.action == 'open') &&
      body.object_attributes.labels.exists(label, label.name == 'urgent')

BitBucket 예제:

지정된 브랜치에 대해 풀 리퀘스트가 열리거나 업데이트될 때 실행합니다:

   (header['x-event-key'] == 'pullrequest:created' || header['x-event-key'] == 'pullrequest:updated') &&
       body.pullrequest.destination.branch.name == 'main'

커밋이 지정된 브랜치에 푸시되면 실행됩니다:

   header['x-event-key'] == 'repo:push' && body.push.changes[0].new.name == 'main'

커밋이 지정된 브랜치에 푸시될 때 실행되지만 커밋 메시지에 특정 문자열이 포함되면 건너뜁니다:

   header['x-event-key'] == 'repo:push' &&
      body.push.changes[0].new.name == 'main' &&
      !body.push.changes[0].commits[0].message("skip run")

지정된 문자열이 포함된 댓글이 풀 리퀘스트에 추가될 때 실행됩니다:

   header['x-event-key'] == 'pullrequest:comment_created' &&
      body.comment.content.raw.contains('/lgtm')

지정된 레이블로 이슈가 만들어지면 실행합니다:

   header['x-event-key'] == 'issue:created' &&
      body.issue.kind == 'bug'

필터

필터를 사용하면 특정 기준에 따라 풀 리퀘스트를 구체화할 수 있습니다. 필터 필드는 현재 풀 리퀘스트에서 레이블을 지정하여 레이블의 유무에 따라 파이프라인 실행을 제어할 수 있도록 지원합니다. 그러나 라벨이 추가되거나 제거될 때 파이프라인을 트리거하는 것이 아니라 파이프라인 실행을 허용하기 전에 PR의 라벨을 확인합니다.

작동 방식:

  • PR 이벤트가 발생하면(새 커밋이 추가되는 등) 파이프라인은 PR의 레이블을 확인합니다.
  • PR이 라벨 조건을 충족하면(예: "승인됨" 라벨이 있는 경우) 파이프라인이 실행됩니다.
  • PR이 레이블 조건을 충족하지 않으면 파이프라인이 실행되지 않습니다.

구성 예시:

아래 스크린샷은 '승인됨' 및 '검토됨' 레이블에 대해 트리거를 구성한 예시를 보여줍니다.

  • PR 파이프라인은 두 레이블이 모두 있는 경우에만 트리거됩니다.
  • 레이블 중 하나라도 누락되면 파이프라인이 실행되지 않습니다.

PR 파이프라인 실행을 위한 라벨 필터 구성하기
PR 파이프라인 실행을 위한 라벨 필터 구성하기

이벤트 페이로드 확인

이벤트 필터링을 위한 CEL 표현식을 작성할 때는 표현식을 평가할 웹훅 페이로드의 구조와 내용을 이해해야 합니다. 파이프라인 실행 세부 정보 페이지에서 기존 실행에 대한 페이로드를 검사할 수 있습니다.

이벤트 페이로드를 보려면 파이프라인 실행 세부 정보 페이지로 이동하여 컨텍스트 표시를 클릭합니다. 파이프라인 실행을 트리거한 원시 웹훅 페이로드를 보고 원하는 조건과 일치하는 CEL 표현식의 관련 필드를 확인할 수 있습니다.

API를 사용하여 Tekton에 대한 Delivery Pipeline 작성

  1. IAM 베어러 토큰을 확보하십시오. 또는 SDK를 사용하는 경우 IAM API키를 얻고 환경 변수를 사용하여 클라이언트 옵션을 설정하십시오.

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. Delivery Pipeline 도구 통합을 추가할 도구 체인의 지역 및 ID를 판별 하십시오.

  3. 도구 체인에 Delivery Pipeline 도구 통합을 추가하십시오.

    curl -X POST \
      https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
        "tool_type_id": "pipeline",
        "parameters": {
          "name": "{tool_integration_name}",
          "type" : "tekton"
        }
      }'
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    ...
    (async () => {
       const toolchainService = CdToolchainV2.newInstance();
       const pipelinePrototypeModel = {
          toolchainId: {toolchain_id},
          toolTypeId: 'pipeline',
          name: {tool_integration_name},
          type: "tekton"
       };
       const pipelineTool = await toolchainService.createTool(pipelinePrototypeModel);
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    createPipelineToolOptions := toolchainClient.NewCreateToolOptions({toolchain_id}, "pipeline")
    createPipelineToolOptions.SetName({tool_integration_name})
    createPipelineToolOptions.SetType("tekton")
    pipelineTool, response, err := toolchainClient.CreateTool(createPipelineToolOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchain_service = CdToolchainV2.new_instance()
    pipeline_tool = toolchain_service.create_tool(
       name = {tool_integration_name},
       toolchain_id = {toolchain_id},
       tool_type_id = "pipeline",
       type = "tekton"
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    CreateToolOptions createPipelineToolOptions = new CreateToolOptions.Builder()
       .name({tool_integration_name})
       .toolchainId({toolchain_id})
       .toolTypeId("pipeline")
       .type("tekton")
       .build();
    Response<ToolchainToolPost> response = toolchainService.createTool(createPipelineToolOptions).execute();
    ToolchainToolPost pipelineTool = response.getResult();
    

    다음 표에서는 이전 단계에서 사용된 각 변수를 나열하고 설명합니다.

    Delivery Pipeline 도구와 API 통합을 추가하기 위한 변수
    가변 설명
    {region} 도구 체인이 상주하는 지역입니다 (예: us-south).
    {tool_integration_name} 도구 통합의 이름입니다 (예: ci-pipeline).
    {toolchain_id} 도구 통합을 추가할 도구 체인의 ID입니다.
    {iam_token} 유효한 IAM 베어러 토큰입니다.
  4. 지정된 지역 내에서 공용 관리 작업자를 사용하도록 Delivery Pipeline 을 구성하십시오.

    curl -X POST \
       https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines \
       -H 'Authorization: Bearer {iam_token}' \
       -H 'Accept: application/json' \
       -H 'Content-Type: application/json' \
       -d '{
          "id": "{pipeline_id}",
          "worker": { "id": "public" }
       }'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const tektonService = CdTektonPipelineV2.newInstance();
       const workerIdentityModel = {
          id: 'public',
       };
       const params = {
          id: {pipeline_id},
          worker: workerIdentityModel,
       };
       const res = await tektonService.createTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    createTektonPipelineOptions := pipelineSvc.NewCreateTektonPipelineOptions(
       {pipeline_id}
    )
    workerIdentityModel := &cdtektonpipelinev2.WorkerIdentity{
       ID: core.StringPtr("public"),
    }
    createTektonPipelineOptions.SetWorker(workerIdentityModel)
    tektonPipeline, response, err := pipelineSvc.CreateTektonPipeline(createTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    worker_identity_model = {
       'id': 'public',
    }
    response = pipeline_service.create_tekton_pipeline(
       id = {pipeline_id},
       worker = worker_identity_model
    )
    tekton_pipeline = response.get_result()
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    WorkerIdentity workerIdentityModel = new WorkerIdentity.Builder()
       .id("public")
       .build();
    CreateTektonPipelineOptions createTektonPipelineOptions = new CreateTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .worker(workerIdentityModel)
       .build();
    Response<TektonPipeline> response = pipelineSvc.createTektonPipeline(createTektonPipelineOptions).execute();
    TektonPipeline tektonPipeline = response.getResult();
    

    다음 표에서는 이전 단계에서 사용된 각 변수를 나열하고 설명합니다.

    API로 Delivery Pipeline 구성하기 위한 변수
    가변 설명
    {region} 도구 체인이 상주하는 지역입니다 (예: us-south).
    {pipeline_id} 파이프라인 도구 통합이 작성된 이전 단계에서 리턴된 파이프라인의 ID입니다.
    {iam_token} 유효한 IAM 베어러 토큰입니다.

Delivery Pipeline API에 대한 자세한 내용은 API 문서를 참조하십시오.

Terraform을 사용하여 Tekton에 대한 Delivery Pipeline 작성

  1. Terraform CLI를 설치하고 Terraform을 위한 IBM Cloud 제공자 플러그인을 구성하려면 IBM Cloud®에서 Terraform 시작하기 튜토리얼을 따르십시오.

  2. 이름이 main.tf인 Terraform 구성 파일을 작성하십시오. 이 파일에서 HashiCorp 구성 언어를 사용하여 파이프라인을 생성하는 구성을 추가하십시오. 이 구성 언어 사용에 대한 자세한 정보는 Terraform 문서를 참조하십시오.

    파이프라인은 도구 체인에 속해야 합니다. Terraform을 사용하여 도구 체인을 작성할 수도 있습니다.

    다음 예는 지정된 Terraform 리소스를 사용하여 도구 체인 및 파이프라인을 작성합니다.

    data "ibm_resource_group" "group" {
      name = "default"
    }
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
         name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
     worker {
         id = "public"
     }
     pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    

    ibm_cd_toolchain_tool_pipelineibm_cd_tekton_pipeline 리소스에 대한 자세한 정보는 Terraform 레지스트리 문서에서 인수 참조 세부사항을 참조하십시오.

  3. 필요한 경우 Terraform CLI를 초기화하십시오.

    terraform init
    
  4. Terraform 실행 플랜을 작성하십시오. 이 계획은 도구 체인을 작성하기 위해 실행해야 하는 모든 조치를 요약합니다.

    terraform plan
    
  5. Terraform 실행 계획을 적용합니다. Terraform은 도구 체인을 작성하는 데 필요한 모든 조치를 수행합니다.

    terraform apply
    

Tekton에 대한 Delivery Pipeline 보기

콘솔 UI, API 또는 Terraform을 사용하여 파이프라인을 볼 수 있습니다.

콘솔을 사용하여 Delivery Pipeline 보기

Tekton Delivery Pipeline 개요 페이지는 하나 이상의 트리거가 추가될 때까지 비어 있는 테이블을 표시합니다. Tekton 파이프라인 실행이 발생하면 (수동으로 또는 외부 이벤트의 결과로) 파이프라인의 각 트리거와 연관된 최근 실행에 대한 데이터가 테이블에 표시됩니다. 각 행은 단일 트리거에 대한 정보를 표시하고 해당 트리거와 연관된 최근 실행의 그래프를 표시합니다. 해당 실행의 성공 또는 실패 및 최근 실행이 발생한 시간과 같은 정보도 표시됩니다. 각 트리거에 대한 조치를 수행할 수도 있습니다. 즉, 트리거를 수동으로 실행하거나, 즐겨찾기로 표시하거나, 트리거를 편집하거나, 사용 또는 사용 안함으로 설정하거나, 삭제할 수 있습니다. 그래프의 항목 중 하나를 클릭하여 해당 개별 PipelineRun 의 세부사항을 검사할 수도 있습니다. 또는 트리거 이름을 클릭하여 해당 트리거와 연관된 모든 PipelineRun 에 대한 PipelineRuns 페이지를 열 수 있습니다. 각 PipelineRun 의 상태, 트리거 및 지속 기간과 같은 관련 정보도 사용할 수 있습니다.

파이프라인은 다음 상태로 실행될 수 있습니다.

  • 보류 중: PipelineRun이 요청됩니다.
  • 실행 중: PipelineRun이 클러스터에서 실행 중입니다.
  • 성공: PipelineRun이 클러스터에서 성공적으로 완료되었습니다.
  • 실패: PipelineRun에 실패했습니다. 실행 로그 파일을 검토하여 원인을 판별하십시오.
  • 큐 처리됨: PipelineRun을 처리하도록 허용되고 작업자 용량이 사용 가능하면 실행됩니다.
  • 대기 중: PipelineRun이 큐 처리되기 위해 대기 중입니다.
  • 취소됨: 시스템 또는 사용자가 PipelineRun을 취소했습니다. 대기 중인 실행 건수가 허용 한도를 초과하면 시스템은 ‘ PipelineRun ’을 취소합니다.
  • 오류: PipelineRun에 클러스터에서 적용되지 못하게 하는 오류가 포함되어 있습니다. 오류 원인에 대한 자세한 정보는 실행 세부사항을 참조하십시오.

선택한 실행에 대한 자세한 정보를 보려면 테이블의 행을 클릭하여 Task 정의 및 각 PipelineRun 정의의 단계를 보십시오. 각 Task 정의 및 단계의 상태, 로그와 세부사항, 전체적인 PipelineRun 정의 상태도 볼 수 있습니다.

해당 Continuous Delivery 서비스 인스턴스에 대해 선택된 플랜에 따라 및 해당 PipelineRuns 로그의 보존 기간이 결정됩니다. Professional 플랜의 Tekton 파이프라인은 1년동안 유지됩니다. Lite 플랜의 Tekton 파이프라인은 30일동안 유지됩니다. 보존 기간이 지난 PipelineRuns 항목을 보관하려면, 해당 PipelineRuns 항목의 [작업 ] 메뉴에서 [다운로드 ]를 선택하여.zip 파일을 다운로드하십시오.

API를 사용하여 Delivery Pipeline 보기

  1. IAM 베어러 토큰을 확보하십시오. 또는 SDK를 사용하는 경우 IAM API키를 얻고 환경 변수를 사용하여 클라이언트 옵션을 설정하십시오.

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. 파이프라인 데이터를 가져오십시오.

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id} \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const pipelineSvc = CdTektonPipelineV2.newInstance();
       const params = {
          id: {pipeline_id},
       };
       const res = await pipelineSvc.getTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    getTektonPipelineOptions := pipelineSvc.NewGetTektonPipelineOptions(
       {pipeline_id}
    )
    tektonPipeline, response, err := pipelineSvc.GetTektonPipeline(getTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    response = pipeline_service.get_tekton_pipeline(
       id = {pipeline_id}
    )
    tekton_pipeline = response.get_result()
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    GetTektonPipelineOptions getTektonPipelineOptions = new GetTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .build();
    Response<TektonPipeline> response = pipelineSvc.getTektonPipeline(getTektonPipelineOptions).execute();
    TektonPipeline tektonPipeline = response.getResult();
    

다음 표에서는 이전 단계에서 사용된 각 변수를 나열하고 설명합니다.

API로 Delivery Pipeline 보기 위한 변수
가변 설명
{region} 파이프라인이 상주하는 지역입니다 (예: us-south).
{pipeline_id} 확인하려는 파이프라인의 ID입니다.
{iam_token} 유효한 IAM 베어러 토큰입니다.

Terraform을 사용하여 Delivery Pipeline 보기

  1. 기존 파이프라인에 대한 resource 블록을 포함하는 Terraform 파일 (예: main.tf) 을 찾으십시오.

  2. 아직 블록을 포함하지 않는 경우 output 블록을 Terraform 파일에 추가하십시오.

    다음 예제의 resource 에서는 기존 파이프라인을 설명합니다. output 블록은 Terraform에 지정된 리소스의 속성을 출력하도록 지시합니다.

    data "ibm_resource_group" "group" {
      name = "default"
    }
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
    resource_group_id = data.ibm_resource_group.group.id
    }
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
        name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
      worker {
        id = "public"
      }
      pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    output "my_tekton_pipeline_attributes" {
      value = ibm_cd_tekton_pipeline.my_tekton_pipeline
    }
    

    ibm_cd_toolchain_tool_pipelineibm_cd_tekton_pipeline 리소스에 대한 자세한 정보는 Terraform 레지스트리 문서에서 인수 참조 세부사항을 참조하십시오.

  3. 필요한 경우 Terraform CLI를 초기화하십시오.

    terraform init
    
  4. refresh-only 옵션을 사용하여 Terraform 실행 플랜을 적용하십시오. Terraform은 해당 상태를 새로 고치고 파이프라인 자원의 속성을 표시합니다.

    terraform apply -refresh-only -auto-approve
    

Tekton용 Delivery Pipeline 로그 보기

콘솔 UI, API를 사용하여 PipelineRuns 의 로그를 보거나 로그를 다운로드할 수 있습니다. 또한 " Continuous Delivery " 서비스 인스턴스를 구성하여 동일한 계정의 IBM Cloud Logs 인스턴스로 Tekton PipelineRun 로그를 라우팅할 수 있습니다.

콘솔을 사용하여 Delivery Pipeline 실행 로그 보기

콘솔 UI를 사용하여 Tekton 파이프라인의 PipelineRuns 로그를 볼 수 있습니다. 실행의 각 단계에 대한 로그에 액세스하려면 Tekton Delivery Pipeline 개요 페이지의 표에서 개별 실행을 클릭하고 실행 세부 정보 페이지를 엽니다.

컨텍스트 보기 를 클릭하여 PipelineRun 에 대한 추가 메타데이터를 보고, 상담원 로그를 클릭하여 실행을 처리하고 실행한 작업자 상담원의 로그를 확인합니다. 에이전트 로그에는 PipelineRun 이 실행된 클러스터의 이름, 작업자 에이전트의 버전 번호, git 복제 작업에 대한 세부 정보, PipelineRun 실행을 준비할 때 에이전트가 수행한 기타 처리 단계와 같은 유용한 정보가 포함되어 있습니다. 이러한 로그에는 실행 중 문제가 발생한 경우 유용한 오류 및 디버깅 정보도 포함될 수 있습니다.

PipelinRun 세부 정보 페이지에서 모든 로그와 PipelineRun 에 대한 메타데이터가 포함된 일부 파일이 포함된 PipelineRun zip 번들을 다운로드할 수도 있습니다. PipelineRun 세부 정보 페이지에서 작업 > 다운로드를 클릭하여 다운로드할 수 있습니다.

Delivery Pipeline 에서 실행한 로그 보기 IBM Cloud Logs

Tekton 파이프라인의 PipelineRuns 로그를 IBM Cloud Logs 인스턴스로 전송하여 해당 인스턴스에서 로그를 보고, 필터링하고, 검색할 수 있습니다. 이 기능을 사용하려면 몇 가지 단계가 필요합니다:

  1. IBM Cloud Logs 인스턴스는 " Continuous Delivery " 인스턴스와 동일한 계정 및 리소스 그룹에 있어야 합니다. 관찰 가능성-> 로깅-> 인스턴스로 이동하여 기존 IBM Cloud Logs 인스턴스를 확인하거나 IBM Cloud Logs 인스턴스를 새로 만듭니다.
  2. 관찰 가능성-> 로깅-> 라우팅으로 이동합니다. Tekton 파이프라인 및 Continuous Delivery 서비스 인스턴스가 위치한 지역에 대한 표에서 대상 설정을 클릭합니다.
  3. 인스턴스가 나열된 표에서 IBM Cloud Logs 인스턴스를 선택합니다. 인스턴스가 나열되기 전에 먼저 '인증' 버튼을 클릭해야 할 수도 있습니다.
  4. IBM Cloud 의 "리소스" 페이지에서 " Continuous Delivery " 서비스 인스턴스를 엽니다.
  5. 관리 페이지로 이동하여 설정 탭을 엽니다. 그런 다음 'Tekton 파이프라인 플랫폼 로그 사용'의 토글을 클릭합니다.

위의 구성을 완료하면 새 PipelineRuns 인스턴스에 대한 로그가 IBM Cloud Logs 인스턴스로 전달됩니다. 로그를 보려면 IBM Cloud Logs:

  1. IBM Cloud Logs 인스턴스의 대시보드를 열고 로그 페이지로 이동합니다.
  2. 필터 섹션의 애플리케이션 필터 아래에서 ibm-플랫폼-로그 확인란을 클릭하고 필터 아래에서 도구체인의 확인란을 클릭합니다.
  3. 날짜 범위를 선택합니다.
  4. 여기에 표시되는 로그 데이터에는 로그 자체뿐만 아니라 메타데이터도 포함되어 있습니다. 이 보기에 표시되는 열을 사용자 지정하여 관련 로그 데이터를 표시하고 이러한 속성을 기준으로 필터링할 수 있습니다. 예를 들어, 다음과 같습니다.
    • message.log- 여기에는 단일 로그 행의 텍스트가 포함됩니다.
    • message.timestamp- 이 로그 줄과 관련된 타임스탬프입니다.
    • message.lineNumber- 스텝 로그 내에서 이 로그 줄의 줄 번호를 나타냅니다.
    • message.pipelineId- 이 로그를 생성한 실행을 소유한 파이프라인의 ID입니다.
    • message.region- PipelinRun 이 실행된 지역의 이름입니다.
    • message.regionId- PipelinRun 이 실행된 지역의 ID입니다.
    • message.severity- 이 로그 줄과 관련된 심각도(예: error, debug, info).
    • message.pipelineMetadata 와 같은 유용한 데이터가 포함되어 있습니다:
      • accountId- 이 PipelineRun 을 소유하고 있는 IBM Cloud 계정의 ID입니다.
      • buildNumber- 관련된 PipelineRun 의 빌드 번호입니다.
      • pipelineName- 이 실행을 소유한 파이프라인의 이름입니다.
      • pipelineRunId- 이 로그 행을 생성한 PipelineRun 의 ID입니다.
      • stepName- 이 로그 행을 생성한 단계의 이름입니다.
      • taskName- 이 로그와 연결된 작업의 이름입니다.
      • toolchainId- 실행을 소유한 파이프라인이 포함된 도구 체인의 ID입니다.
      • triggerName- 이 로그 행을 생성한 실행을 생성한 파이프라인 트리거의 이름입니다.

API를 사용하여 Delivery Pipeline 실행 로그 보기

  1. IAM 베어러 토큰을 확보하십시오.

  2. PipelineRun 에 사용할 수 있는 로그 개체 목록을 가져옵니다.

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id}/pipeline_runs/{run_id}/logs \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json'
    

    이 API 요청은 로그 객체 배열을 반환하며, 각 객체에는 로그 항목 하나에 대한 세부 정보가 포함되어 있습니다 PipelineRun:

    {
       "logs": [
          {
             "name": "pipelinerun-sample/step-0",
             "id": "{sample_log_id}",
             "href": "https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id}/pipeline_runs/{run_id}/logs/{sample_log_id}"
          }
       ]
    }
    
  3. 각 로그 개체 항목은 PipelineRun 의 단계에 매핑됩니다. 단계 로그를 가져오려면 연결된 로그 객체에서 href 값을 사용하여 요청합니다:

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id}/pipeline_runs/{run_id}/logs/{sample_log_id} \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json'
    

    이 요청은 로그와 log_id가 포함된 객체를 응답으로 반환합니다:

    {
       "data": "log content",
       "id": "{sample_log_id}"
    }
    

삭제 Delivery Pipeline

콘솔 UI, API 또는 Terraform을 사용하여 파이프라인을 삭제할 수 있습니다. 이 삭제는 되돌릴 수 없습니다.

콘솔 UI를 사용하여 툴체인 삭제하기

  1. IBM Cloud 콘솔에서 메뉴 아이콘 햄버거 아이콘 > 플랫폼 자동화 > 툴체인을 클릭합니다.
  2. 도구 체인 페이지에서 도구 체인을 클릭하여 해당 개요 페이지를 여십시오. 또는 사용자 앱의 앱 세부사항 페이지에서 도구 체인 이름을 클릭하십시오.
  3. '배달 파이프라인' 섹션에서 삭제하려는 파이프라인을 찾습니다.
  4. 해당 파이프라인의 메뉴 아이콘을 클릭하고 삭제 옵션을 클릭합니다.
  5. 대화 상자에서 ‘삭제’를 클릭하여 삭제를 확인하십시오.

API를 사용하여 Delivery Pipeline 삭제하기

  1. IAM 베어러 토큰을 확보하십시오. 또는 SDK를 사용하는 경우 IAM API키를 얻고 환경 변수를 사용하여 클라이언트 옵션을 설정하십시오.

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. DevOps Insights 도구 통합을 추가할 도구 체인의 영역 및 ID를 판별 하십시오.

  3. 파이프라인을 삭제하십시오.

    curl -X DELETE \
      https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools/{pipeline_id} \
      -H 'Authorization: Bearer {iam_token}'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const pipelineSvc = CdTektonPipelineV2.newInstance();
       const params = {
          id: {pipeline_id},
       };
       const res = await pipelineSvc.deleteTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    deleteTektonPipelineOptions := pipelineSvc.NewDeleteTektonPipelineOptions(
       {pipeline_id}
    )
    response, err := pipelineSvc.DeleteTektonPipeline(deleteTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    response = pipeline_service.delete_tekton_pipeline(
       id={pipeline_id}
    )
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    DeleteTektonPipelineOptions deleteTektonPipelineOptions = new DeleteTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .build();
    Response<Void> response = pipelineSvc.deleteTektonPipeline(deleteTektonPipelineOptions).execute();
    

다음 표에서는 이전 단계에서 사용된 각 변수를 나열하고 설명합니다.

API로 Delivery Pipeline 삭제하기 위한 변수
가변 설명
{region} 도구 체인이 상주하는 지역입니다 (예: us-south).
{toolchain_id} 삭제할 파이프라인을 포함하는 도구 체인의 ID입니다.
{pipeline_id} 삭제하려는 파이프라인의 ID입니다.
{iam_token} 유효한 IAM 베어러 토큰입니다.

Terraform을 사용하여 Delivery Pipeline 삭제

  1. 기존 파이프라인에 대한 resource 블록을 포함하는 Terraform 파일 (예: main.tf) 을 찾으십시오.

    다음 예제의 resource 에서는 기존 파이프라인을 설명합니다.

    data "ibm_resource_group" "group" {
      name = "default"
    }
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
         name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
     worker {
         id = "public"
     }
     pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    
  2. Terraform 파일에서 ibm_cd_toolchain_tool_pipelineibm_cd_tekton_pipeline resource 블록을 제거하십시오.

  3. 필요한 경우 Terraform CLI를 초기화하십시오.

    terraform init
    
  4. Terraform 실행 플랜을 작성하십시오. 이 계획은 파이프라인을 삭제하기 위해 실행해야 하는 모든 조치를 요약합니다.

    terraform plan
    
  5. Terraform 실행 계획을 적용합니다. Terraform은 파이프라인을 삭제하는 데 필요한 모든 조치를 수행합니다.

    terraform apply
    

트리거 사용

웹 UI 또는 명령줄/API 호출을 사용하여 파이프라인을 트리거할 수 있습니다. 이는 일반적으로 CI, CD 또는 CC 파이프라인과 같은 파이프라인에 사용됩니다.

명령줄 또는 API를 통해 파이프라인 트리거하기

명령줄에서 IBM Cloud CLI를 사용하거나 curl 을 사용하여 직접 API를 호출하여 파이프라인을 트리거할 수 있습니다.

IBM Cloud CLI 사용

IBM Cloud CLI를 사용하여 파이프라인을 트리거할 수 있습니다. CLI 명령에 대한 자세한 내용은 IBM Cloud CLI 문서를 참조하세요.

  1. IBM Cloud에 로그인
    ibmcloud login --sso
    
  2. 수동으로 파이프라인 트리거
    ibmcloud dev tekton-trigger <pipeline_id> --trigger-name "<trigger_name>"
    

명령에서 pipeline_idtrigger_name 을 대체한 후 실행하여 파이프라인을 시작합니다. 성공하면 출력에 파이프라인이 시작되었음을 표시하고 다음과 유사한 세부 정보를 표시합니다:

파이프라인이 정상적으로 시작되었습니다.

  • 실행 ID : ruekhg-eifjkvr-kjf-rkvj
  • 트리거 : CC 수동 트리거
  • 상태 : 보류 중

그런 다음 UI에서 각 툴체인을 열어 파이프라인이 트리거되었는지 확인할 수 있습니다.

curl 사용하여 API를 통해 파이프라인 트리거하기

curl 을 사용하여 API를 통해 직접 파이프라인을 트리거할 수 있습니다. API를 통해 Tekton 파이프라인을 트리거하는 방법에 대한 자세한 내용은 IBM Cloud API Docs/를 참조하세요 CD Tekton 파이프라인.

인증 프로세스
  • 아직 API 키가 없는 경우 IBM Cloud API 키로 이동하여 생성하세요.

  • API 키가 있으면 다음 curl 명령을 사용하여 IAM 토큰을 생성합니다:

    curl -X POST 'https://iam.cloud.ibm.com/identity/token' \
      -H 'Content-Type:application/x-www-form-urlencoded' \
      -H 'Accept:application/json' \
      -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=<API_KEY>'
    
    
  • <API_KEY>를 생성한 API 키로 대체하십시오.

  • IAM 토큰이 있으면 이를 사용하여 다음 요청을 인증하여 파이프라인에 액세스하세요:

    curl -L --request GET 'https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<PIPELINE_ID>' \
    --header 'Authorization: Bearer <IAM_TOKEN_VALUE>'
    
  • 인증이 완료되면 다음 curl 명령을 사용하여 파이프라인을 트리거합니다:

    curl -i -X POST \
        -H "Authorization: Bearer <IAM_token>" \
        -H "Accept: application/json" \
        -H "Content-Type: application/json" \
        --data '{
            "trigger": {
                "name": "CC Manual Trigger",
                "properties": {
                    "pipeline-debug": "false"
                }
            }
        }' \
        "https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<pipeline_id>/pipeline_runs"
    
  • -i 옵션을 사용하면 HTTP 응답 헤더가 출력에 포함되므로 오류 발생 시 HTTP 상태 코드를 확인할 수 있습니다.

  • 파이프라인에 필요한 환경 속성은 --data 페이로드 내에 추가할 수 있으며, 속성 추가 방법에 대한 자세한 내용은 IBM Cloud API Docs/를 참조하세요 CD Tekton 파이프라인.

  • 파이프라인이 트리거되면 출력은 다음과 유사하게 표시됩니다:

    • HTTP 응답에는 201 Created 상태가 표시되어 파이프라인 트리거 요청이 수락되었음을 확인합니다.

    • location 헤더는 트리거된 파이프라인 실행의 URL 을 가리킵니다.

    • 다음과 같은 메타데이터가 표시됩니다:

      • pipeline_id
      • status (예: "pending")
      • trigger 이름(예: "Manual CD Trigger")
      • run_id (트리거된 실행의 고유 ID)
      • 전체 URL 에서 실행을 확인하실 수 있습니다.
    • 이렇게 하면 파이프라인이 성공적으로 트리거되었음을 확인할 수 있습니다. 이제 IBM Cloud UI에서 툴체인의 파이프라인 섹션으로 이동하여 상태와 로그를 볼 수 있습니다.

  • 명령이 성공적으로 실행되면 파이프라인이 트리거됩니다. 트리거되면 응답에는 파이프라인 실행에 대한 세부 정보가 포함됩니다.

태스크 실행 팟에 대한 세부사항 보기

특정 TaskRun 에 대한 기본 Kubernetes 포드에 대한 정보를 보려면, ‘ Task ’ 이름을 클릭한 다음 ‘Pod’를 클릭하세요.

작업자가 보고한 팟 및 관련 이벤트에 대한 세부사항을 볼 수 있습니다. 이 정보는 특정 실패를 디버그하거나 실행 중 시간이 소요되는 위치를 판별하는 데 도움이 될 수 있습니다.

Tekton 파이프라인 및 리소스에 대해 자세히 알아보기

텍톤 파이프라인에 대해 자세히 알아보려면 텍톤: 최신 접근 방식 Continuous Delivery 문서를 참조하세요.

파이프라인 내에서 참조할 수 있는 Tekton 작업에 대해 자세히 알아보려면 Open Toolchain Tekton 카탈로그 를 참조하십시오. 이 GitHub 저장소에는 Tekton 파이프라인에서 재사용할 수 있는 태스크 세트가 포함되어 있습니다.