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
希望对您有所帮助:)
我真的很想采用 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
希望对您有所帮助:)