Спецификации Bamboo Java, репозиторий с одним конвейером и несколько проектов

Я действительно заинтересован в принятии конфигурации Bamboo как модели кода, но в настоящее время я немного пытаюсь найти лучшие практики/документацию/учебники для реализации следующего сценария:

У меня более 50 (Java) проектов, каждый из которых находится в отдельном репозитории на Bitbucket. Таким образом, репозиторий 50+. Я хотел бы иметь общий общий конвейер для всех из них.

Как этого добиться?

Мне удалось создать конвейер для конкретного проекта (хранящийся в папке bamboo-specs), но я не могу позволить себе иметь более 50 различных определений конвейера, поскольку задачи, определенные в этом конвейере, могут со временем меняться...

В идеале я хотел бы иметь независимое от проекта репо, содержащее только определение конвейера... и каким-то образом проинструктировать Bamboo запускать определенный этап/задания/задачи каждый раз, когда делается новый толчок в любой ветке из вышеупомянутых 50+ репозиториев. .

Возможно ли это как-то (без ссылок на жесткое кодирование репо в трубопроводном проекте)?

Моя компания CI работает на Bamboo 6.8.1.

Спасибо!


person Andrea Di Lisio    schedule 17.02.2020    source источник


Ответы (2)


В настоящее время у нас в компании такая же проблема. Мы связались с 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
comment
Большое спасибо! На самом деле я был удивлен отсутствием официальных инструкций ... Как вы сказали, это своего рода обходной путь, но может помочь на данный момент. Надеемся, что atlassian добавит эту функцию в будущих выпусках! - person Andrea Di Lisio; 27.05.2020
comment
Интересно, что plan.getTemplateBuild() не существует в версии API 6.10.4. - person Alex; 23.07.2021

Я не уверен, что это ответит на ваш вопрос, со своей стороны я помещаю все в один и тот же репозиторий и делюсь фрагментом кода Java с общей библиотекой. Используемый мной метод описан здесь:

  • одна общая библиотека
  • один проект с использованием общего: обратите внимание, что один проект может содержать несколько @BambooSpec аннотированных классов и, следовательно, несколько планов или развертываний. Я организую их таким образом, чтобы эти сборки были связаны в наборе проектов сборки, которые у меня есть.
  • ручное нажатие из командной строки
person Raffi    schedule 20.05.2020