2013-08-29 10 views
21

Sono in un processo di scrittura di un plug-in Bamboo, la maggior parte dei quali è completa.Bamboo: Come eseguire una logica se il lavoro viene annullato o fallisce

Il plug-in funziona avviando un processo remoto da una richiesta di posta a un server e quindi eseguendo il polling dello stesso server finché non riceve un messaggio che indica che il processo è stato completato o si è verificato un errore - questa parte funziona.

Vorrei aggiungere qualche logica in più in cui posso notificare questo server se l'utente annulla il lavoro, tuttavia non sono sicuro su come procedere.

Ho giocato con la creazione di un'altra attività che viene eseguita come attività finale, tuttavia non so come rilevare se una delle attività precedenti ha avuto esito negativo o è stata annullata.

Ho provato a utilizzare List<TaskResult> taskResults = taskContext.getBuildContext().getBuildResult().getTaskResults(); per ottenere un elenco dei risultati dell'attività precedente, tuttavia questo sembra sempre restituire 0 Risultati attività.

Ho anche provato a utilizzare un modulo di azione completato post-compilazione, tuttavia non sono sicuro di come aggiungerlo a un lavoro e la documentazione su questo mi ha un po 'disorientato.

Se qualcuno potesse aiutarmi nella giusta direzione lo apprezzerei.

+2

penso che si dovrebbe guardare solo la creazione di un listener di eventi: https://developer.atlassian.com/display/BAMBOODEV/Bamboo+Event+Listeners C'è già un evento lì si può ascoltare https://docs.atlassian.com/atlassian-bamboo/2.7/com/atlassian/bamboo/event/BuildCanceledEvent.html – fogedi

+0

@bScutt: probabilmente troverai più risposte su https://answers.atlassian.com/ invece di postare qui, ma fogedi è corretto. Registrare un listener e ascoltare BuildCanceledEvent e inviare la richiesta appropriata ai servizi che l'utente ha annullato. – Chii

+0

@bScutt Le risposte di Atlassian sono un posto migliore per le domande relative ad Atlassian: http://answers.atlassian.com (Nota: poiché attualmente migrano su un'altra piattaforma, potresti non essere in grado di postare lì) – Adrian

risposta

7

Dalla lettura di ciò che hai scritto, penso che l'utilizzo di un listener di eventi sia sicuramente il modo corretto di affrontare il problema. Di seguito ho fornito un'immagine della mia creazione che sembra descrivere ciò che hai costruito e che mostra dove potrebbe essere meglio posizionare il listener di eventi.

In sostanza, il client invierà una notifica di annullamento al server tramite il meccanismo del controller di rete. Il server riceverà quindi la notifica di annullamento tramite il suo controller di rete che è già collegato al client tramite un protocollo di rete (sto assumendo TCP). Quando la notifica di annullamento dal controller di rete del client raggiunge il controller di rete del server, il listener di eventi nel controller di rete del server segnalerà quindi al gestore di build del server di terminare la build remota.

Schema del programma enter image description here

Spero che questo aiuta.

Problemi correlati