Отправка пользовательских уведомлений в Bamboo

Я пытаюсь разработать новый плагин уведомлений Bamboo.

Согласно официальной документации, если я хочу создать Пользовательское уведомление, в котором я хочу добавить файл журнала в качестве вложения к моему электронному письму, например, мне нужно реализовать следующий интерфейс ExtendedNotification.

public class MyNotification extends AbstractNotification implements ExtendedNotification {
    ...
}

Этот интерфейс ExtendedNotification имеет следующий метод, который необходимо реализовать:

@NotNull
@Override
public Email updateEmail (@NotNull Email email) {
   return null;
}

Проблема заключается в том, что при построении самого Email получение версии сборки из контекста в этом методе не работает (чтобы попытаться прикрепить правильный файл журнала).
Например, если у меня есть следующий файл журнала — \BAMBOO\tools\logs\${bamboo.planKey}\health_${bamboo.buildNumber}.txt). Ниже приведен код полного метода.

@NotNull
@Override
public Email updateEmail (@NotNull Email email) {
   try {

      //VariableContext variables = taskContext.getBuildContext ().getVariableContext ();

      // E:\Atlassian\BAMBOO\tools\logs\${bamboo.planKey}\health_${bamboo.buildNumber}.txt
      File logFile = new File ("E:\\Atlassian\\BAMBOO\\tools\\logs\\" + taskContext.getBuildContext().getPlanKey () + "\\health_" + taskContext.getBuildContext().getBuildNumber() + ".txt");

      //Message message = new MimeMessage(session);
      Multipart multipart = new MimeMultipart ();

      // creates body part for the message
      MimeBodyPart messageBodyPart = new MimeBodyPart ();
      messageBodyPart.setContent (getHtmlEmailContent (), "text/html");

      // creates body part for the attachment
      MimeBodyPart attachPart = new MimeBodyPart ();

      // code to add attachment...will be revealed later
      attachPart.attachFile (logFile);

      // adds parts to the multipart
      multipart.addBodyPart (messageBodyPart);
      multipart.addBodyPart (attachPart);

      // sets the multipart as message's content
      email.setMultipart (multipart);
   } catch (Exception e) {
      log.error ("There was a problem composing the email", e);
      return null;
   }
   return email;
}

Моя проблема заключается в том, чтобы получить ключевую переменную плана в Bamboo, в Java. В моем коде выше я попытался получить его, используя:

taskContext.getBuildContext ().getVariableContext ();

как описано здесь вопрос StackOverflow, но это не работает.

Я видел пример создания пользовательского уведомления здесь — введите здесь описание ссылки, но код довольно старый и не использует никаких вложений.

Любая идея о том, как этого добиться? Спасибо


person R13mus    schedule 16.10.2018    source источник


Ответы (1)


Наконец, я нашел способ заставить его работать.

Те переменные, которые я хочу получить, planKey и buildNumber, поступают из следующего:

public class MyNotification extends AbstractCompletedNotification implements ExtendedNotification {
    private ResultsSummary resultsSummary;
    private ImmutablePlan plan;
    ...

    @NotNull
    @Override
    public Email updateEmail (@NotNull Email email) {
        try {

            File logFile = new File ("E:\\Atlassian\\BAMBOO\\tools\\logs\\" + 
                plan.getPlanKey () + 
                "\\health_" + 
                resultsSummary.getBuildNumber() + 
                ".txt");
            ...
        }
    }
}

А plan и resultSummary устанавливаются в MyNotificationEventListener, когда я создаю собственное уведомление — MyNotification:

public class MyNotificationEventListener {
    ...
    @EventListener
    @HibernateEventListenerAspect
    public void handleEvent (@NotNull Object event) {
        if (event instanceof ChainCompletedEvent) { // for example
            ... 
            MyNotification myNotification = (MyNotification) BambooNotificationUtils.createNotification (MyNotification.class);
            ...
            myNotification.setResultsSummary (this.resultsSummaryManager.getResultsSummary (chainCompletedEvent.getPlanResultKey ()));
            ImmutablePlan immutablePlan = this.planManager.getPlanByKey (chainCompletedEvent.getPlanKey ());
            myNotification.setPlan (immutablePlan);
            ...
        }
    }
}
person R13mus    schedule 25.10.2018