비동기 하위 파이프라인을 사용하여 스테이지 트리거하기

비동기 하위 파이프라인을 사용하여 .pipeline-config.yaml 구성 파일에 추가된 모든 단계를 트리거할 수 있습니다. 이러한 단계를 파이프라인에 인라인으로 추가할 필요가 없으며 파이프라인을 수정할 필요도 없습니다.

다음 예제 코드를 참조하세요:

setup:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
  script: |
    #!/usr/bin/env bash

    source "${ONE_PIPELINE_PATH}"/tools/trigger-task
    set_env "variable-for-my-custom-task" "foo_bar"
    export_env "variable-for-my-custom-task"
    trigger-task "my-custom-task"

my-custom-task:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
  script: |
    #!/usr/bin/env bash
    if [[ "$PIPELINE_DEBUG" == 1 ]]; then
      trap env EXIT
      env
      set -x
    fi
    printf "Test custom stage to trigger async"
    list_repos
    list_artifacts
    get_env "variable-for-my-custom-task"

스테이지를 트리거하기 위해 웹훅 시크릿을 사용하여 웹훅 트리거를 생성합니다. 웹훅 비밀은 파이프라인 매개변수와 Subpipeline Webhook Trigger 의 속성에서 subpipeline-webhook-token 로 찾을 수 있습니다. subpipeline-webhook-token 값 업데이트에 대한 자세한 내용은 비동기 스테이지 웹훅 업데이트하기를 참조하세요.

새로 트리거된 파이프라인 이름은 스테이지 이름(예: my-custom-task)이므로 스테이지 이름이 유효한 파이프라인 실행 이름인지 확인하세요. 스테이지 이름은 Kubernetes 리소스에서 이름 또는 ID를 만드는 데 사용됩니다. Kubernetes 의 개체 이름과 ID는 RFC 1123 또는 RFC 1035를 따라야 합니다:

  • 최대 63자까지 입력할 수 있습니다.
  • 소문자 영숫자 또는 하이픈 문자 '-'만 포함합니다.
  • 영숫자로 시작합니다.
  • 영숫자로 끝납니다.

비동기 파이프라인으로 데이터 전달

스테이지를 실행하는 데 필요한 변수를 전달할 수 있으며, 이를 위해 pipelinectl 를 사용할 수 있습니다.

다음 단계에 따라 두 파이프라인 간에 데이터를 전달할 수 있습니다:

  1. 비동기 파이프라인을 트리거하기 전에 set_env 을 사용하여 변수를 저장하세요. 트리거링 단계 이전의 파이프라인에서 이런 일이 발생할 수 있다는 점에 유의하세요. set_env 을 두 번 사용할 필요가 없습니다.
  2. 변수를 export_env 으로 표시하여 비동기 파이프라인 실행을 위해 내보냅니다.
  3. 내보내기용으로 표시된 모든 변수는 비동기 파이프라인에서 get_env 을 사용하여 사용할 수 있습니다.
set_env <variable-name> <variable-value>
export_env <variable-name>
get_env <variable-name>

표시된 변수만 비동기 파이프라인에서 사용할 수 있습니다. 데이터가 너무 많거나 민감한 데이터가 포함되어 있을 수 있으므로 모든 데이터를 내보낼 수 있는 것은 아닙니다.

비동기 파이프라인 명령 트리거

다음 명령을 사용하여 스테이지를 트리거합니다:

trigger-task <stage-name>

예제 코드:

setup:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
  script: |
    #!/usr/bin/env bash

    source "${ONE_PIPELINE_PATH}"/tools/trigger-task
    set_env "variable-for-my-custom-task" "foo_bar"
    export_env "variable-for-my-custom-task"
    trigger-task "my-custom-task"

이 명령은 파이프라인 구성 yaml에서 작업을 트리거합니다. 예를 들어, trigger-task owasp-zap입니다.

트리거된 파이프라인에서 액세스할 수 있는 항목

이전 파이프라인에서 저장하고 내보낸 모든 리포지토리와 아티팩트( set_env 에서 pipelinectlexport_env 도구를 사용하여) 이전 파이프라인에서 저장한 모든 저장소와 아티팩트는 새로 트리거된 비동기 파이프라인에서도 사용할 수 있습니다. 리포지토리는 이전 파이프라인의 커밋과 함께 동일한 작업 공간 상대 폴더에 복제됩니다. 파이프라인에서 동일한 상태의 리포지토리를 복제할 수 있도록 리포지토리의 커밋은 pipelinectl 에 저장해야 합니다.

리포지토리와 아티팩트로 이동하려면 list_reposlist_artifacts. 생성된 모든 아티팩트와 복제된 모든 리포지토리는 본인만 저장할 수 있습니다 pipelinectl.

사용할 수 없음 트리거 파이프라인 실행의 이전 작업(예: npm 설치)에서 수행한 작업 공간에 대한 변경 사항은 트리거된 새 파이프라인 실행에 모든 작업 공간을 전달할 수 없으므로 사용할 수 없습니다.

트리거된 파이프라인의 상태를 조회하는 방법

API 컬 호출

 while [ "$STATE" = "running" -o "$STATE" = "waiting" -o "$STATE" = "queued" -o "$STATE" = "pending" ]; do
            PIPELINE_STATUS=$(curl -s -k -X GET \
            --header "Authorization: Bearer $IAM_ACCESS_TOKEN" \
            --header "Accept: application/json" \
            --header "Content-Type: application/json" \
            $CD_PIPELINE_RUN_URL)
            STATE=$(echo $PIPELINE_STATUS | jq -r '.status .state')
            echo $STATE
            sleep 10
 done

iBM클라우드 CLI 호출

ibmcloud dev tekton-pipelinerun [pipelineID] --run-id [pipelinerunID] [--output JSON]
ibmcloud dev tekton-pipelinerun ls [pipelineID]

자세한 내용은 IBM Cloud CLI(tekton-pipelinerun)명령을 참조하세요.

CLI를 사용하여 파이프라인을 트리거하는 방법에 대한 자세한 내용은 트리거 사용하기를 참조하세요