Bitbucket 管道 - 运行 或根据构建输出跳过步骤

Bitbucket pipelines - Run or skip step based on build output

我们有一个包含大约 5 个项目的 monorepo。所有这些项目都是根据 git 更改历史构建的,因此如果项目 A 没有更改,则不会构建。这由 Nx monorepo.

管理

我们正在使用 Bitbucket Pipelines 来构建和部署我们的项目。我们希望将每个部署拆分成它自己的步骤,以便我们可以更好地控制每个项目的部署。

为了实现这一点,我们需要更改构建步骤,使其仅在 dist 文件夹包含要部署的门户时才执行。我读过 condition configuration,但我找不到任何关于在条件下检查构建工件而不是触发更改的 git 提交的信息。那么如果门户不在构建工件中,有没有办法跳过(或直接通过)步骤?

构建步骤

- step: &build
    name: Build
    caches:
      - node
    script:
      - git fetch origin master:refs/remotes/master
      - npm run build
    artifacts:
      - dist/**

示例 Dist 工件

.
├── dist/
│   ├── login-portal
│   ├── Portal-Y

我们的部署步骤

- step: &deployLoginPortal
    image: amazon/aws-cli:2.4.17
    deployment: test
    trigger: manual
    script:
      - aws s3 sync $LOGIN_OUTPUT_PATH s3://$LOGIN_S3_BUCKET/ --acl public-read # Sync the portal

# $LOGIN_OUTPUT_PATH = 'dist/login-portal'

示例条件(不起作用)

condition:
  changesets:
    includePaths:
      - $LOGIN_OUTPUT_PATH/** # only run if dist contains changes in $LOGIN_BUILD_PATH

我是否遗漏了什么,或者是否有其他方法仅在构建工件 (dist/) 包含该步骤要部署的门户时才执行该步骤?

您可以在执行 aws s3 sync 之前手动检查工件是否存在,如果不满足条件则优雅地退出该步骤:

script:
  - [ ! -d "$LOGIN_OUTPUT_PATH" ] && echo "Directory $LOGIN_OUTPUT_PATH is not present; gracefully exiting" && exit 0
  - aws s3 sync $LOGIN_OUTPUT_PATH s3://$LOGIN_S3_BUCKET/ --acl public-read

请注意,从技术上讲,您的步骤仍会被触发,因此其启动时间(通常约为 40 秒)会影响您的配额。