Bitbucket管道在分支之间共享一些步骤

Bitbucket管道在分支之间共享一些步骤,bitbucket,bitbucket-pipelines,Bitbucket,Bitbucket Pipelines,是否可以在分支之间共享步骤,并且仍然运行特定于分支的步骤?例如,开发和发布分支具有相同的构建过程,但上传到单独的S3存储桶 pipelines: default: - step: script: - cd source - npm install - npm build develop: - step: script: - s3cmd put --config

是否可以在分支之间共享步骤,并且仍然运行特定于分支的步骤?例如,开发和发布分支具有相同的构建过程,但上传到单独的S3存储桶

pipelines:
  default:
    - step:
        script:
          - cd source
          - npm install
          - npm build
  develop:
    - step:
        script:
          - s3cmd put --config s3cmd.cfg ./build s3://develop

  staging:
    - step:
        script:
          - s3cmd put --config s3cmd.cfg ./build s3://staging

我看了这篇文章(),但步骤是一样的。

显然,它正在进行中。希望很快可以买到


我认为Bitbucket做不到。您可以使用一个管道并检查分支名称:

pipelines:
  default:
    - step:
        script:
          - cd source
          - npm install
          - npm build 
          - if [[ $BITBUCKET_BRANCH = develop ]]; then s3cmd put --config s3cmd.cfg ./build s3://develop; fi
          - if [[ $BITBUCKET_BRANCH = staging ]]; then s3cmd put --config s3cmd.cfg ./build s3://staging; fi

最后两行将仅在指定的分支上执行。

虽然尚未正式支持,但您现在可以预定义步骤。
 definitions:
  step: &Build
    name: Build
    script:
      - npm install
      - npm build

pipelines:
  default:
    - step: *Build
  branches:
    master:
      - step: *Build
      - step:
          name: deploy
          # do some deploy from master only
当我在分支的子集上运行相同的步骤时,我从bitbucket工作人员那里得到了这个提示

 definitions:
  step: &Build
    name: Build
    script:
      - npm install
      - npm build

pipelines:
  default:
    - step: *Build
  branches:
    master:
      - step: *Build
      - step:
          name: deploy
          # do some deploy from master only
它并不完美,但总比没有好

使用YAML锚定:

definitions:
  steps:
    - step: &Test-step
        name: Run tests
        script:
          - npm install
          - npm run test
    - step: &Deploy-step
        name: Deploy to staging
        deployment: staging
        script:
          - npm install
          - npm run build
          - fab deploy
pipelines:
  default:
    - step: *Test-step
    - step: *Deploy-step
  branches:
    master:
      - step: *Test-step
      - step:
        <<: *Deploy-step
        name: Deploy to production
        deployment: production
        trigger: manual
定义:
步骤:
-步骤:&测试步骤
名称:运行测试
脚本:
-npm安装
-npm运行测试
-步骤:&部署步骤
名称:部署到暂存
部署:登台
脚本:
-npm安装
-npm运行构建
-工厂部署
管道:
违约:
-步骤:*测试步骤
-步骤:*部署步骤
分支机构:
大师:
-步骤:*测试步骤
-步骤:

您可以使用定义和重用步骤

  • 锚定
    以定义配置块
  • 别名
    *
    以在其他地方引用该块
并且源分支保存在名为
BITBUCKET\u branch

您还需要将生成结果(在本例中是
build/
文件夹)从一个步骤传递到下一个步骤,这是通过完成的

将这三者结合起来,将获得以下配置:

定义:
步骤:
-步骤:&生成
名称:Build
脚本:
-cd源
-npm安装
-npm构建
工件:#定义要传递给每个未来步骤的工件。
-/建造
-步骤:&s3传输
姓名:转到S3
脚本:
-s3cmd put——配置s3cmd.cfg./build s3://${BITBUCKET\u BRANCH}
管道:
违约:
-步骤:*构建
发展:
-步骤:*构建
-步骤:*s3传输
登台:
-步骤:*构建
-步骤:*s3传输
您现在还可以使用和步骤中提到的glob模式,一次完成
develope
staging
分支:

“{develope,staging}”:
-步骤:*构建
-步骤:*s3传输

这里有两个注意事项:1)定义块必须在管道块之前(Yamlint允许两个但不允许bitbucket)2)要共享许多步骤,请为每个步骤指定一个唯一的名称:
步骤构建:&build
然后
-step:&step构建
将锚调用参数化会很好,但它似乎不受支持。这里有一个功能: