Разработка плагина Jenkins: можно ли копировать файлы желе и изменять их?

Я пытаюсь разработать свой первый подключаемый модуль Jenkins и не уверен в нескольких проблемах:
Пока у меня есть класс, который создает новый тип задания. В основном он выглядит так же, как FreeStyleProject Дженкинса, и работает нормально.

1) Теперь хотелось бы, чтобы плагин создавал дополнительный раздел на странице конфигурации задания (нового типа). Я попытался добавить config.jelly в пакет ресурсов, но это не сработало. Затем я скопировал файл configure-entries.jelly Дженкинса из resources/hudson/model/Project и добавил сюда свою информацию. Это нормально делать так?
2) Кроме того, я хочу добавить кое-что на страницу проекта. Я обнаружил, что для этого можно использовать файл jobMain.jelly, но простое создание файла в пакете ресурсов ничего не меняет. Поэтому вместо этого я скопировал файл main.jelly Дженкинса из resources/hudson/model/AbstractProject и кое-что добавил сюда. Это нормально? Это работает, но я не уверен, что у меня могут возникнуть проблемы позже.

Заранее спасибо!


person Jenkins User    schedule 28.08.2014    source источник
comment
Как вы думаете, вы могли бы переформатировать этот вопрос, чтобы это не был один большой абзац? Это облегчит еще несколько ответов   -  person simonmorley    schedule 28.08.2014


Ответы (1)


Страница конфигурации

  • Сначала вам нужен класс, который расширяет потомка BuildStepCompatibilityLayer (например, класс Recorder или Builder).
  • Создайте @DataBoundConstructor для этого класса
  • Создайте дескриптор для этого класса как внутренний класс
  • Пример класса, расширяющего класс Builder:

    package tryBuilder.tryBuilder;
    
    import org.kohsuke.stapler.DataBoundConstructor;
    
    import hudson.Extension;
    import hudson.model.AbstractProject;
    import hudson.model.FreeStyleProject;
    import hudson.tasks.BuildStepDescriptor;
    import hudson.tasks.Builder;
    
    import org.kohsuke.stapler.DataBoundConstructor;
    
    public class BuilderExample extends Builder {
    
      @DataBoundConstructor
      public BuilderExample() {
      }
    
      @Extension
      public static class Descriptor extends BuildStepDescriptor<Builder> {
    
        @Override
        public boolean isApplicable(Class<? extends AbstractProject> jobType) {
            return FreeStyleProject.class.isAssignableFrom(jobType);
        }
    
        @Override
        public String getDisplayName() {
            return "BuildstepName";
        }
      }
    }
    

Строка, возвращаемая в методе getDisplayName() (теперь «BuildstepName»), определяет имя шага сборки или действия в Jenkins.

  • Теперь вам нужна карта в каталоге ресурсов с тем же именем, что и класс, созданный выше.
  • Поместите config.jelly в этот каталог.
  • In Jenkins, go to a job, then to config, next:
    • If the class you made extends a class derived from Builder: Add build step
    • Если созданный вами класс расширяет производную от класса форму Publisher: добавьте действие после этапа сборки.
  • И выберите имя, которое вы установили в методе getDisplayName().
  • Теперь ваш config.jelly должен быть виден в этом разделе.

Добавить на страницу проекта

  • Создайте класс, реализующий Action (переопределите необходимые методы и присвойте им значение (не null))
  • В созданном классе Builder/Publisher переопределите метод getProjectAction(AbstractProject<?, ?> project) и верните созданный выше класс, который реализует действие.
  • Переопределите метод `perform (сборка AbstractBuild, средство запуска средства запуска, прослушиватель BuildListener)' в классе Builder/Publisher и дайте ему вернуть значение true.
  • Как это работало, ссылка видна на боковой панели на странице проекта.
  • связать index.jelly с этим классом Action (в карте ресурсов с тем же именем, что и у класса Action)
  • Вы увидите эту страницу, если перейдете по ссылке в боковой панели
  • чтобы показать что-то на самой странице проекта нужно создать файл с именем floatBox.jelly (тоже в карте ресурсов с именем класса Action)
person QuestionBomber    schedule 10.12.2014