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
即键 caches
和 script
比 step
进一步缩进,这与锚点是否存在无关。所以这是一个使用单个键映射的序列元素 step
.
如果你会写:
- step:
caches:
- node
script:
- sh bin/pipeline/backend-url-replace.sh
- npm run build
- sh bin/pipeline/deployment.sh
这是有效的 YAML,您的序列元素又是一个映射,但现在它具有三个键 step
、caches
和 script
。 step
的值为 null
(那里可能有一个锚点,这没有区别)。
这就是您在 pipelines
部分中的内容。您的合并键 <<
不是映射中的第一个键(也不一定是)。
这使得例如您示例中的最后一个元素是具有五个值的映射,而不是具有一个键的映射 rest
,并且该键的值是具有四个键的映射,这正是您所需要的。
将锚点添加到我的 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
即键 caches
和 script
比 step
进一步缩进,这与锚点是否存在无关。所以这是一个使用单个键映射的序列元素 step
.
如果你会写:
- step:
caches:
- node
script:
- sh bin/pipeline/backend-url-replace.sh
- npm run build
- sh bin/pipeline/deployment.sh
这是有效的 YAML,您的序列元素又是一个映射,但现在它具有三个键 step
、caches
和 script
。 step
的值为 null
(那里可能有一个锚点,这没有区别)。
这就是您在 pipelines
部分中的内容。您的合并键 <<
不是映射中的第一个键(也不一定是)。
这使得例如您示例中的最后一个元素是具有五个值的映射,而不是具有一个键的映射 rest
,并且该键的值是具有四个键的映射,这正是您所需要的。