竹节脚本的建造计划

时间:2019-02-19 15:31:18

标签: bamboo bamboo-specs

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

可能需要数月/数年的构建计划调整:

  • 平行化工作
  • 添加额外的工作
  • 更改一些任务

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

在我以前的雇主处,我们使用了詹金斯管道,其中构建和测试的内容只是源存储库中存在的文件。

现在用竹子似乎可以使用竹子规格了。从我的阅读中,您可以创建规格文件,运行此文件时,它将创建构建计划。但是我看不到可以随时间更改构建计划(更改步骤)的关系。

例如,开发的Bamboo Specs用于构建所有计划分支(例如,拉取请求)。因此,如果您想在PullRequest中更改构建,则首先需要将其合并到开发中,development Bamboo Spec更新了构建计划。合并前无法测试。

问题:您如何在Bamboo中制定脚本化的建造计划,而每个开发部门都可以使用其他可能的建造方式?

我们现在将其设置为:

  • Buildplan“产品A”:计划分支:develop,release_x,release,y
  • Buildplan'Product A PullRequest':计划分支:feature / *

3 个答案:

答案 0 :(得分:0)

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

要在Bamboo中创建脚本化的构建计划,您必须使用Bamboo规格。由于您已经熟悉Jenkins,因此通过自动执行管道可以使Bamboo规范与Jenkinsfile完全一样。使用此方法的好处是它位于源代码中,并且在触发Bamboo生成时,您在源代码中对此文件所做的更改会自动更改您的计划(管道)。 这是我用Bamboo编写构建计划的脚本:

  1. 我将我的Bamboo.yml文件添加到我的仓库的根目录下。但是目前,我使用git子树,而我的竹子规格都住在这里。但是您不必这样做。以下链接为您提供了一种简单的方法。
  2. 将我的存储库链接到Bamboo
  3. 告诉竹子扫描回购中的竹子规格
  4. 进行提交并推送

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

如果将来必须对计划进行更改,请编辑Bamboo specs文件,然后提交并推送。

答案 1 :(得分:0)

我找到了Atlassian文档:https://jira.atlassian.com/browse/BAM-19620。他们称其为“分歧计划分支”。 不支持,有功能要求。

截至2019年4月15日:

  

Atlassian更新– [2019年4月11日]大家好,

     

谢谢您对这个问题的投票和看法。

     

我们完全了解,你们中的许多人都依赖于此   功能。

     

经过仔细考虑,我们决定将[   功能]。我们希望在我们   当前的项目已经完成。

     

期望在未来6个月内听到我们的最新进展。

     

要了解有关如何审核您的建议的更多信息,请参阅我们的更新   服务器功能建议的工作流程。

     

亲切的问候,

     

竹队

答案 2 :(得分:0)

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

向后移植构建脚本

这不一定在任何地方都是可行的,但是我设法以某种方式使其适用于我的项目。

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

您的分支机构没有在构建软件方面进行重大更改,例如您的桌面应用程序变成了Web应用程序,或者您从Ant切换到Gradle,就可以进行处理。

假设我的应用程序始终是要在JFrog Artifactory上以jar形式发布的Web应用程序,我已经确定了所有维护版本共有的以下步骤:

  • 使用javac构建所有模块的jar
  • 使用gulp构建Javascript资源
  • 从存储库中运行JUnit
  • 洗礼?带有通过棘手算法获得的版本号的工件
  • 将文物推送到JFrog Artifactory

因此,我的想法是,我已经采用了Ant构建脚本并大部分重写了它,以便在不同版本的应用程序上执行相同的任务。作为练习,我开始从较旧的版本(不再维护)中进行更改。实际上,我的官方Git分支看起来像release/x.y.z,其中semver是x.y.z.k,而较新的错误修复程序构建是从任何x.y.z版本的开头开始的。

因此,我进入了release/3.10.0分支并重写了Ant。我目前正在使用手动创建的Bamboo计划进行测试

阶段:编译

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

阶段:测试

ant run-junit

手动阶段:发布

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