这是我想要实现的目标:
我有一个带有二进制版本的构建作业的项目。二进制文件需要一段时间才能针对每个平台进行交叉编译,因此我只想在标记发布时发布构建,但我希望构建本地本地版本并为每个签入版本运行测试。
基于飞行学校演示......到目前为止,我的管道配置如下所示:
resources:
- name: flight-school
type: git
source:
uri: https://github.com/nbering/flight-school
branch: master
- name: flight-school-version
type: semver
source:
driver: git
uri: https://github.com/nbering/flight-school
branch: master
file: version
jobs:
- name: test-app
plan:
- get: flight-school
trigger: true
- task: tests
file: flight-school/build.yml
- name: release-build
plan:
- aggregate:
- get: flight-school-version
trigger: true
- get: flight-school
passed: [test-app]
- task: release-build
file: flight-school/ci/release.yml
这会在 Web UI 中生成一个管道,如下所示:
问题是当我更新git存储库中的“release”文件时,semver资源“flight-school-version”可以在git资源“flight-school”之前检查,导致从git处理release构建分配给上次签入的版本。
我想要一种解决此问题的方法,以便发布版本显示为单独的任务,但仅在版本发生冲突时触发。
到目前为止我想到的一些事情
使用集合创建一个单独的 git 资源,tag_filter
以便它仅在将 semver 标签推送到 master 时运行
- Pro:作业仅在推送标签时运行
- 缺点:与上面基于 semver 的示例具有相同的测试断开继承问题
使用结帐中的 git 历史记录作为构建脚本的一部分添加 semver 标记的条件检查(或更改文件的差异)
- 优点:基本上会做我想做的事,而不会与 Concourse 过多的摔跤
- 缺点:如果不实际读取构建输出,则看不到 UI 中的差异
- 缺点:难以与其他任务和资源类型组合使用二进制版本来做某事
手动触发发布构建
- 优点:设置简单
- 缺点:需要人工干预。
当检测到版本更改时,使用 API 在测试完成时触发暂停的构建步骤
- 缺点:还没有看到其他人这样做的任何例子,看起来真的很复杂。
当git 资源和 semver 资源都发生变化时,我还没有找到触发任务的方法。
我正在寻找解决上述示例中并发问题的答案,或者寻找会产生类似发布工作流程的替代模式。