2017-07-27 81 views
7

mam setup Jenkins do wysyłania wiadomości e-mail tylko dla użytkowników, którzy złamali zbudować używając wtyczki e-EXT, ale ja dostaję ten błąd:Jenkins plugin e-mail nie wysyła e-mail do użytkownika, który złamał build

Not sending mail to unregistered user [email protected] because your SCM claimed this was associated with a user ID ‘John Smith' which your security realm does not recognize; you may need changes in your SCM plugin

Naprawdę nie rozumiem, co ten błąd oznacza, czy jest to problem w naszym SCM, czy w wtyczce e-mail? E-maile pochodzą z historii commitów, czy powinienem je gdzieś zarejestrować, żeby Jenkins zaczął działać?

Dla porównania, this is the code around the error message w kod źródłowy pluginu:

    } catch (UsernameNotFoundException x) { 
         if (SEND_TO_UNKNOWN_USERS) { 
          listener.getLogger().printf("Warning: %s is not a recognized user, but sending mail anyway%n", userAddress); 
         } else { 
          listener.getLogger().printf("Not sending mail to unregistered user %s because your SCM" 
        ........ 

Jak włączyć SEND_TO_UNKNOWN_USERS?

Ten komunikat o błędzie jest również wymieniony w tym bug report.

+0

'static/* not final */boolean SEND_TO_UNKNOWN_USERS = Boolean.getBoolean (MailSender.class.getName() +" .SEND_TO_UNKNOWN_USERS "); ' Więc ... po prostu wymyśl, jak ustawić tę wartość boolean, ponieważ masz kod źródłowy? – Shark

+0

@Shark Mam go w celach informacyjnych, nie kompiluję go ze źródła. Muszę jakoś ustawić go z konfiguracji. – sashoalm

+1

'-Dhudson.tasks.MailSender.SEND_TO_UNKNOWN_USERS = true' może? jako przeczytane [tutaj] (https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin) na wiki "email-ext" wiki – Shark

Odpowiedz

6

OK, po kilku eksperymentach to co się dowiedziałem:

Jenkins bierze udział w committer mail (nie autora). Na przykład dla wiadomości popełnienia który wygląda tak:

Author: John Smith <[email protected]> 2017-07-27 17:15:39 
Committer: John Doe <[email protected]> 2017-07-27 17:15:39 
Parent: 9c3ff18dda8ca6f7b7ac4ebab4c76d3c85891a33 (commit) 
Branch: master 

Jenkins weźmie „committer1” i utworzyć nowy użytkownik pod Osób ID użytkownika „committer1” i e-mail „”. Chyba że użytkownik ma hasło będzie jednak uznać niezarejestrowany więc trzeba przejść do konfiguracji dla tego użytkownika i dodać pole hasło do niego:

enter image description here

Więc to jest jeden sposób, aby naprawić błąd, ale musisz zrobić to dla każdego użytkownika, a w dużym zespole może być nudny.

+0

Powinna być zaakceptowaną odpowiedzią, ponieważ jest lepsza niż wyłączanie zabezpieczeń. –

+1

Nie jest to możliwe podczas używania ldap i zakładam aktywny katalog – aflat

5

Umieścić mieszek linii w skrypcie startowym Jenkins

-Dhudson.tasks.MailSender.SEND_TO_UNKNOWN_USERS=true 

Ostatnio dyrektywa bezpieczeństwa Jenkins pozwalają jedynie do wysyłania poczty zarejestrowanego użytkownika. Powyższa linia omija tę konfigurację.

+1

W jaki sposób Jenkins decyduje, czy użytkownik jest zarejestrowany? Czy sprawdza, czy nazwa autora z SCM jest taka sama jak nazwa użytkownika (w przeciwieństwie do nazwy użytkownika) istniejącego użytkownika? – sashoalm

+0

Tak. Jeśli nazwa zleceniodawcy to joao.vitorino i jest użytkownik z loginem joao.vitorino i skonfigurowany adres e-mail, jenkins zrobi mecz i wyśle ​​wiadomość e-mail. Możesz rozwiązać, dodając konfigurowany przeze mnie wpis lub konfigurując użytkownika w jenkins –

+0

Możesz także użyć configure Jenkins, aby użyć ActiveDirectory lub LDAP w celu identyfikacji użytkowników twoich programów, więc nie musisz konfigurować każdego pojedynczego użytkownika w Jenkins. –