gpt4 book ai didi

continuous-integration - Bamboo Java 规范、单个管道存储库和多个项目

转载 作者:行者123 更新时间:2023-12-04 10:34:10 25 4
gpt4 key购买 nike

我对采用 Bamboo 的配置即代码模型非常感兴趣,但我目前正在努力寻找最佳实践/文档/教程来实现以下场景:

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

如何实现这一目标?

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

理想情况下,我想要的是一个仅包含管道定义的项目独立存储库......并以某种方式指示 Bamboo 每次在上述 50 多个存储库的任何分支上进行新推送时触发定义的阶段/作业/任务.

这在某种程度上可行吗(在管道项目中没有硬编码 repo 引用)?

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

谢谢!

最佳答案

目前我们公司也有同样的问题。我们联系了 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 然后读取此文件并生成/更新我们的计划。

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

这也是我的@bambooSpecs main 方法的一个例子:
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

希望能帮助到你 :)

关于continuous-integration - Bamboo Java 规范、单个管道存储库和多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60266007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com