Bamboo 脚本化构建计划

Bamboo scripted buildplans

我们目前正在使用 bamboo 来构建和测试我们的软件。现在我们的构建计划只是一堆任务:执行这个 bat,执行那个 bat 等。使用 Bamboo UI.

创建

碰巧 months/years 构建计划需要调整:

但是当我们尝试构建旧版本的软件时,这会中断。一些脚本(从 bamboo 任务中调用)在旧版本中不存在。

在我以前的雇主那里,我们使用 Jenkins 管道,其中构建和测试的内容只是源代码库中的一个文件。

现在有了 bamboo,您似乎可以使用 Bamboo Specs。从我读到你创建规格文件,当你 运行 这个时,它将创建构建计划。但我没有看到随着时间的推移改变构建计划(改变步骤)的关系。

例如,开发的 Bamboo 规范用于构建所有计划分支(例如 Pull Requests)。所以如果你想改变 PullRequest 中的构建,你首先需要将它合并到 develop 中,develop 的 Bamboo Spec 更新了 Build Plan。合并前无法对此进行测试。

问题:如何在 Bamboo 中制定脚本化的构建计划,开发的每个分支都可以有其他可能的构建方式?

我们现在将其设置为:

问题:如何在 Bamboo 中制定脚本化构建计划?

要在 Bamboo 中制定脚本化构建计划,您必须使用 Bamboo 规范。由于您已经熟悉 Jenkins,因此 bamboo specs 的工作方式与 Jenkinsfile 完全一样,可以自动化您的管道。使用它的好处是它存在于您的源代码中,并且您在源代码中对此文件所做的更改会在触发 bamboo 构建时自动更改您的计划(管道)。 这就是我用竹子编写构建计划的方式:

  1. 我将 bamboo.yml 文件添加到我的存储库的根目录下。但目前,我使用 git 子树,我的竹子规格就在那里。但你不必这样做。下面link提供了一个简单的方法。
  2. Link 我对 bamboo 的回购
  3. 告诉 bamboo 在 repo 中扫描 bamboo 规格
  4. 提交并推送

https://confluence.atlassian.com/bamboo/tutorial-bamboo-specs-yaml-stored-in-bitbucket-server-941616819.html

如果我以后必须更改计划,我会编辑 bamboo 规格文件,然后提交并推送。

编辑: 7.0 支持:https://confluence.atlassian.com/bamboo/enhanced-plan-branch-configuration-996709304.html

旧答案:

我找到了 Atlassian 文档:https://jira.atlassian.com/browse/BAM-19620。他们称之为 'divergent plan branches'。 不支持,有一个功能请求。

截至 2019 年 4 月 15 日:

Atlassian Update – [11 April 2019] Hi everyone,

Thank you for your votes and thoughts on this issue.

We fully understand that many of you are dependent on this functionality.

After careful consideration, we've decided to prioritise [this feature] on Bamboo roadmap. We hope to start development after our current projects are completed.

Expect to hear an update on our progress within the next 6 months.

To learn more on how your suggestions are reviewed, see our updated workflow for server feature suggestions.

Kind regards,

Bamboo Team

我遇到了同样的问题,不幸的是不得不经历一个不愉快的选择

向后移植构建脚本

这不一定在任何地方都可行,但我设法让它在我的项目中工作

想法是:将构建脚本视为 C#/Java interface,或更好地视为 contract.

只要您的分支机构在构建软件方面没有提供重大更改,例如你的桌面应用程序变成了网络应用程序,或者你从 Ant 切换到 Gradle,你可以处理这个。

假设我的应用程序始终是一个 Web 应用程序,将作为 JFrog Artifactory 上的 jar 发布,我已经确定了以下所有维护版本通用的步骤:

  • 使用javac构建所有模块的jar
  • 使用gulp构建Java脚本资源
  • 运行 存储库中的 JUnit
  • Baptize版本号通过棘手算法获得的工件
  • 将工件推送到 JFrog Artifactory

所以我的想法是,我采用了我的 Ant 构建脚本并大部分重写了它,以便在不同版本的应用程序上执行相同的任务。作为练习,我开始对不再维护的旧版本进行更改。事实上,我的官方 Git 分支看起来像 release/x.y.z,其中 semver 是 x.y.z.k 并且较新的 bugfix-builds 是从任何 x.y.z 版本的头部构建的。

所以我选择了 release/3.10.0 分支并重写了 Ant。我目前正在使用手动创建的 Bamboo 计划进行测试

Stage: Compile

ant clean ivy-retrieve compile jar #builds the jar in a job
ant gulp-install gulp-prod zip #creates javascript resources

Stage: Test

ant run-junit

Manual Stage: Release

ant baptize ivy-release #tags the artifact using ${bamboo.jira.version} and pushes to JFrog Artifactory

我要用 Yaml 做什么

由于构建脚本相同,但特定任务(例如 Java 编译器版本)可能会在不同版本中发生变化,因此我可以创建一个非常单一的 Yaml 脚本来管理所有版本。

然后我将合并 release/3.10.0 => release/3.10.1 => release/3.10.2 ... release/3.11.2 通过合并冲突

个人经历

今晚我正在努力让 JUnit 测试工作,因为我还选择将我的测试框架向后移植到项目的旧版本。我承认一些测试会失败,因为较旧的和未维护的版本 包含 错误。对我来说,这是一种证明系统有效的方法

确实,分支分支是个好主意,但我不得不在办公室使用 Bamboo 6