【发布时间】:2018-08-01 19:35:39
【问题描述】:
这是我想要实现的目标:
我有一个包含二进制版本的构建作业的项目。二进制文件需要一段时间才能针对每个平台进行交叉编译,因此我只想在标记发布时发布构建,但我希望构建本地本地版本并为每个签入版本运行测试。
基于飞行学校的演示......到目前为止,我的管道配置如下所示:
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”之前检查,导致release build被处理从分配给上次签到的 git 版本。
我想要一种解决此问题的方法,以便发布构建显示为单独的任务,但仅在版本发生冲突时触发。
到目前为止我想到的一些事情
使用 tag_filter 设置创建一个单独的 git 资源,以便它仅在将 semver 标签推送到 master 时运行
- 专业版:仅在推送标签时运行作业
- Con:与上面基于 semver 的示例一样,测试存在相同的断开继承问题
使用结帐中的 git 历史记录作为构建脚本的一部分,为 semver 标签添加条件检查(或更改文件的差异)
- 专业人士:基本上会做我想做的事,而不会与 Concourse 过多的摔跤
- 缺点:如果不实际读取构建输出,则无法看到 UI 中的差异
- 缺点:难以与其他任务和资源类型组合使用二进制版本来做某事
手动触发发布构建
- 专业版:设置简单
- 缺点:需要人工干预。
当检测到版本更改时,使用 API 在测试完成时触发暂停的构建步骤
- 缺点:没有看到其他人这样做的任何例子,看起来真的很复杂。
当 git 资源和 semver 资源发生变化时,我还没有找到触发任务的方法。
我正在寻找解决上述示例中的并发问题的答案,或者寻找能够产生类似发布工作流程的替代模式。
【问题讨论】:
标签: concourse concourse-git-resource