В настоящее время у нас в компании такая же проблема. Мы связались с 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:
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
Надеюсь, поможет :)
person
Miguel Pineda
schedule
25.05.2020