我们公司目前也有同样的问题。我们联系了 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 然后读取此文件并生成/更新我们的计划。
如果您需要在每次进行新推送时都运行管道,您可以在 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
希望对你有帮助:)