Bitbucket管道-根据生成输出运行或跳过步骤



我们有一个包含大约5个项目的单回购。所有这些项目都是基于git更改历史构建的,所以如果项目A没有更改,它就不是构建的。这是由Nx monorepo管理的。

我们正在使用Bitbucket管道来构建和部署我们的项目。我们希望将每个部署拆分为自己的步骤,以便对每个项目的部署有更多的控制权。

为了实现这一点,我们需要更改构建步骤,使其仅在dist文件夹包含要部署的门户时执行。我已经阅读了关于条件配置的内容,但我找不到任何关于在条件中检查构建工件的内容,而不是触发更改的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秒(将影响您的配额。

最新更新