Bitbucket 管道配置问题

Bitbucket Pipelines config issue

将锚点添加到我的 bitbucket-pipelines.yml 文件后,我得到:

配置错误 您的 bitbucket-pipelines.yml 文件中的 'master' 部分缺少 'step'。请添加缺少的 'step' 以修复错误。

但是,根据 https://bitbucket-pipelines.prod.public.atl-paas.net/validator,配置有效

image: node:latest
definitions:
  caches:
    node: ./node_modules
  steps:
    - step: &Test-step
        name: Run tests
        script:
          - npm install
          - npm run test
    - step: &Deploy-step
        caches:
          - node
        script:
          - sh bin/pipeline/backend-url-replace.sh
          - npm run build
          - sh bin/pipeline/deployment.sh
    - step: &E2E-step
        name: E2E tests
        caches:
          - node
        image: cypress/base:10
        script:
          - set +e; npm run cy:test
          - sh bin/pipeline/cypress-media-cp.sh
pipelines:
  branches:
    master:
      - step: *Test-step
      - step:
        <<: *Deploy-step
        name: Deploy to Test
        deployment: test
      - step:
        <<: *Deploy-step
        name: Deploy to Staging
        trigger: manual
        deployment: staging
    release/*:
      - step: *Test-step
      - step:
        <<: *Deploy-step
        name: Deploy to Staging
        deployment: staging

我做错了什么?

这有时似乎是由于缩进问题造成的。

您可能需要将每个 step 下的列表缩进增加到四个空格(目前是两个):

pipelines:
  branches:
    master:
      - step: *Test-step
      - step:
          <<: *Deploy-step
          name: Deploy to Test
          deployment: test
      - step:
          <<: *Deploy-step
          name: Deploy to Staging
          trigger: manual
          deployment: staging
    release/*:
      - step: *Test-step
      - step:
          <<: *Deploy-step
          name: Deploy to Staging
          deployment: staging

@AndroidNoobie 解决了你的问题,但没有解释发生了什么。

在您的定义中,您缩进了作为 step:

值的映射
- step: &Deploy-step
    caches:
      - node
    script:
      - sh bin/pipeline/backend-url-replace.sh
      - npm run build
      - sh bin/pipeline/deployment.sh

即键 cachesscriptstep 进一步缩进,这与锚点是否存在无关。所以这是一个使用单个键映射的序列元素 step.

如果你会写:

- step: 
  caches:
    - node
  script:
    - sh bin/pipeline/backend-url-replace.sh
    - npm run build
    - sh bin/pipeline/deployment.sh

这是有效的 YAML,您的序列元素又是一个映射,但现在它具有三个键 stepcachesscriptstep 的值为 null(那里可能有一个锚点,这没有区别)。

这就是您在 pipelines 部分中的内容。您的合并键 << 不是映射中的第一个键(也不一定是)。

这使得例如您示例中的最后一个元素是具有五个值的映射,而不是具有一个键的映射 rest,并且该键的值是具有四个键的映射,这正是您所需要的。