Bamboo Java 规范,单一管道存储库和多个项目

Bamboo Java specs, single pipeline repository and multiple projects

我真的很想采用 Bamboo 的配置即代码模型,但我目前正在努力寻找最好的 practices/documentations/tutorials 来实现以下场景:

我有 50 多个 (Java) 个项目,每个项目都位于 Bitbucket 上的一个单独存储库中。因此,有 50 多个存储库。我想为他们所有人提供一个共同的共享管道。

如何实现?

我设法创建了一个特定于项目的管道(保存在 bamboo-specs 文件夹中),但我无法承受 50 多个不同的管道定义,因为此管道中定义的任务可能会随着时间而改变...

理想情况下,我想要的是一个独立于项目的回购协议,仅包含管道定义...并以某种方式指示 Bamboo 每次在任何分支上进行新推送时触发定义的 stage/jobs/tasks上面提到的 50+ 回购。

这是否可行(在管道项目中没有硬编码 repo 引用)?

我的公司 CI 在 Bamboo 6.8.1 上运行。

谢谢!

我不确定这是否会回答您的问题,在我这边,我将所有内容都放在同一个存储库中,并将一段 Java 代码共享到一个公共库。我使用的方法描述为 here:

  • 一个公共图书馆
  • 使用通用的单个项目:请注意,单个项目可能包含多个 @BambooSpec 注释 class,因此包含多个计划或部署。我组织这些构建的方式是将这些构建耦合到我拥有的构建项目集中
  • 从命令行手动推送

我们公司目前也有同样的问题。我们联系了 atlassian,它建议我们拥有 一个 Java 项目 并从那里管理我们所有的项目。 这样,每次我们需要更新我们的管道时,我们只需要 运行 Java 项目一次。

目前我们有一个 JSON 配置文件:

{
"project": [
    {
        "key": "PROJECTKEY",
        "name": "Project name",
        "description": "testing",
        "plans": [
            {
                "key": "PUNO",
                "name": "plan 1",
                "description": "plan description",
                "repositoryName": "repository link / linked repository name",
                "branches": [ "master", "develop"],
                "templateBuild": "TemplateName",
                "templateDeploy": "TemplateName",
                "variables": [
                    {
                        "key": "",
                        "value": ""
                    }
                ]
            }
        ]
    }
]
}

Java 然后阅读此文件和 generate/update 我们的计划。

如果每次进行新推送时都需要 bamboo 运行 管道,您可以在 Java 管道定义中定义触发器。

这也是我的@bambooSpecs 主要方法的一个例子:

ConfigurationFile file = new ConfigurationFile("configurationFile.json");
Project[] proyectos = file.getProjects();
if (proyectos != null && proyectos.length >= 1) {
    List<com.atlassian.bamboo.specs.api.builders.plan.Plan> bambooPlans = new ArrayList<>();
    for (Project p : proyectos) {
        for (Plan plan : p.getPlans()) {
            Class<?> buildClass = Class.forName("com.my.company.templates.build." + plan.getTemplateBuild());
            TemplateBaseBuild template = (TemplateBaseBuild) buildClass.getDeclaredConstructor(TemplateBaseBuild.getConstructorClassArgs()).newInstance(p.getKey(), p.getName(), p.getDescription(), plan.getKey(), plan.getName(), plan.getDescription(), "", plan.getRepositoryName(), Utils.VariablesToBambooVariable(plan.getVariables()));
            for (com.atlassian.bamboo.specs.api.builders.plan.Plan currentPlan : template.getPlans()) {
                bambooPlans.add(currentPlan);
            }
            //TODO: deploy
        }
    }
    bambooPlans.forEach(bambooServer::publish);

}

我们需要定义模板,因为我们的项目可以使用不同的技术。每个模板都有管道定义(阶段、任务、权限、触发器等)

我知道可能有更好的方法来实现这一点,但这是我们目前找到的解决方案。

这里是官方文档:https://docs.atlassian.com/bamboo-specs-docs/6.8.1/specs-java.html

触发器:https://docs.atlassian.com/bamboo-specs-docs/6.8.1/specs-java.html#build-triggers

希望对您有所帮助:)