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 秒)会影响您的配额。
我们有一个包含大约 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 秒)会影响您的配额。