将管道参数传递给orb CircleCI

问题描述 投票:0回答:1

我正在尝试使用此博客教程在暂存部署时通过 API 调用来运行我的 E2E 测试:https://circleci.com/blog/pipeline-orchestration-circleback/

我的E2E管道依赖于cypress orb,完整代码如下:

version: 2.1
parameters:
  triggering-pipeline-id:
    type: string
    default: ""
orbs:
  discord: antonioned/[email protected]
  cypress: cypress-io/cypress@3
executor: cypress/default


commands:
  approve-job-in-triggering-pipeline:
    steps:
      - run:
          name: Ping CircleCI API and approve the pending job
          command: |
            echo << pipeline.parameters.triggering-pipeline-id >>
            if ! [ -z "<< pipeline.parameters.triggering-pipeline-id >>" ] 
            then
              workflow_id=$(curl --request GET \
                --url https://circleci.com/api/v2/pipeline/<< pipeline.parameters.triggering-pipeline-id >>/workflow \
                --header "Circle-Token: $CIRCLECI_API_KEY" \
                --header "content-type: application/json" \
              | jq -r '.items[0].id')

              echo $workflow_id
              
              waiting_job_id=$(curl --request GET \
                --url https://circleci.com/api/v2/workflow/$workflow_id/job \
                --header "Circle-Token: $CIRCLECI_API_KEY" \
                --header "content-type: application/json" \
              | jq -r '.items[] | select(.name == "wait-for-triggered-pipeline").id')

              echo $waiting_job_id

              curl --request POST \
                --url https://circleci.com/api/v2/workflow/$workflow_id/approve/$waiting_job_id \
                --header "Circle-Token: $CIRCLECI_API_KEY" \
                --header "content-type: application/json"

            fi
          when: always       

workflows:
 e2e-tests:
    jobs:
    - cypress/run:
        parameters: { "triggering-pipeline-id": << pipeline.parameters.triggering-pipeline-id >> }
        name: "Firefox"
        cypress-command: npm run test:firefox
        install-browsers: true
        cypress-cache-key: custom-cypress-cache-v1-{{ arch }}-{{ checksum "package.json" }}
        cypress-cache-path: ~/.cache/custom-dir/Cypress
        working-directory: /home/circleci/project
        post-steps:
          - approve-job-in-triggering-pipeline
        context:
          - webapp-e2e

但是,当我尝试运行此管道(通过 API 或其他方式)时,我得到:

Error calling workflow: 'e2e-tests'
Error calling job: 'cypress/run'
Error calling command: 'approve-job-in-triggering-pipeline'
Unknown variable(s): triggering-pipeline-id

在不明确传递参数的情况下运行此命令会导致相同的错误,这是有道理的,因为如此处记录:https://github.com/CircleCI-Public/api-preview-docs/blob/master/docs/pipeline-参数.md

Pipeline parameters are not available in orbs, including orbs declared locally in your config.yml file

如何将管道参数正确传递到 orb 中?

谢谢!

circleci orchestration circleci-2.0 circleci-workflows circleci-orb
1个回答
0
投票

我对 Cypress orb 不熟悉,但是您在引用参数时尝试过使用

<< parameters.triggering-pipeline-id >>
而不是
<< pipeline.parameters.triggering-pipeline-id >>
吗?

© www.soinside.com 2019 - 2024. All rights reserved.