我真的很想采用Bamboo的Configuration as Code模型,但是我目前正在努力寻找最佳实践/文档/教程来实现以下方案:
我有50多个(Java)项目,每个项目都位于Bitbucket上的单独存储库中。因此,超过50个存储库。我希望所有这些对象都有一个共同的共享管道。
如何实现?
我设法创建了一个特定于项目的管道(保存在Bamboo-specs文件夹中),但是我承担不起50多种不同的管道定义,因为在此管道中定义的任务可能会随着时间而改变...
理想情况下,我希望拥有一个仅包含管道定义的独立于项目的回购...并且每当在上述任何一个分支上进行新的推送时,便以某种方式指示Bamboo触发定义的阶段/任务/任务50多个存储库。
这是否可行(在管道项目中没有硬编码的repo引用)?
我的公司CI在Bamboo 6.8.1上运行。
谢谢!
答案 0 :(得分:0)
我不确定这是否能回答您的问题,但我方面将所有内容都放在同一存储库中,并将Java代码共享到一个公共库中。 here说明了我使用的方法:
@BambooSpec
带注释的类,因此可能包含多个计划或部署。我以这样的方式组织这些活动:将这些构建与我拥有的一组构建项目相结合答案 1 :(得分:0)
我们当前在公司中也遇到同样的问题。我们联系了atlassian,它建议我们拥有一个Java项目,并从那里管理我们的所有项目。 这样,每次我们需要更新管道时,我们只需要运行一次Java Project。
目前,我们有一个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 Pipeline Definition中定义触发器。
这也是我的@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
希望它会有所帮助:)