2012-07-06 30 views
15

Tôi đang cố gắng thiết lập Jenkins để sử dụng máy chủ SMTP của công ty chúng tôi để gửi thông báo qua email. Chúng tôi đang sử dụng TLS làm phương thức mã hóa trên cổng 587. Tôi có vẻ không nhận được thông báo qua email để hoạt động bình thường.Jenkins SMTP TLS

Đây là tập tin Hudson.Tasks.Mailer.xml của tôi vì vậy bạn có thể thấy cấu hình của tôi (Tôi đã gỡ bỏ người dùng auth SMTP và mật khẩu và thay đổi smtpHost hơi chỉ trong trường hợp)

<hudson.tasks.Mailer_-DescriptorImpl> 
    <helpRedirect/> 
    <defaultSuffix></defaultSuffix> 
    <hudsonUrl>http://localhost:8080/</hudsonUrl> 
    <smtpAuthUsername></smtpAuthUsername> 
    <smtpAuthPassword></smtpAuthPassw$ 
    <adminAddress></adminAddress> 
    <smtpHost>pod#####.outlook.com</smtpHost> 
    <useSsl>true</useSsl> 
    <smtpPort>587</smtpPort> 
    <charset>UTF-8</charset> 
</hudson.tasks.Mailer_-DescriptorImpl> 

Có vẻ như đây là sự cố đã biết, từ http://issues.hudson-ci.org/browse/HUDSON-2206

Tôi không quen thuộc với Apple OS (máy chạy Jenkins) nhưng tôi nghĩ tôi có thể giải quyết vấn đề bằng cách giải quyết được đề cập. Tôi không chắc chắn chính xác nơi để đặt workaround rằng mặc dù, vì vậy tôi cố gắng đặt nó ở đây: /Library/Application Support/Jenkins/jenkins-runner.sh

defaults="defaults read /Library/Preferences/org.jenkins-ci" 

war=`$defaults war` || war="/Applications/Jenkins/jenkins.war" 

javaArgs="-Dmail.smtp.starttls.enable=\"true\"" 
heapSize=`$defaults heapSize` && javaArgs="$javaArgs -Xmx${heapSize}" 
permGen=`$defaults permGen` && javaArgs="$javaArgs -XX:MaxPermSize=${permGen}" 

home=`$defaults JENKINS_HOME` && export JENKINS_HOME="$home" 

add_to_args() { 
    val=`$defaults $1` && args="$args --${1}=${val}" 
} 

args="" 
add_to_args prefix 
add_to_args httpPort 
add_to_args httpListenAddress 
add_to_args httpsPort 
add_to_args httpsListenAddress 
add_to_args ajp13Port 
add_to_args ajp13ListenAddress 

echo "JENKINS_HOME=$JENKINS_HOME" 
echo "Jenkins command line for execution" 
echo /usr/bin/java $javaArgs -jar "$war" $args 
exec /usr/bin/java $javaArgs -jar "$war" $args 

đó không xuất hiện để giải quyết nó. Tôi có thể thấy cuộc gọi đó trong bảng điều khiển khi Jenkins khởi động, nhưng khi tôi thử một email cấu hình thử nghiệm, tôi nhận được lỗi sau:

Failed to send out e-mail 

javax.mail.MessagingException: Could not connect to SMTP host: pod#####.outlook.com, port: 587; 
nested exception is: 
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934) 
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) 
at javax.mail.Service.connect(Service.java:317) 
at javax.mail.Service.connect(Service.java:176) 
at javax.mail.Service.connect(Service.java:125) 
at javax.mail.Transport.send0(Transport.java:194) 

Bất kỳ ý tưởng nào khác có thể thử? Tôi đã thử chuyển đổi tài khoản email để sử dụng máy chủ SMTP của gmail và hoạt động tốt, nhưng tôi muốn có nó bằng cách sử dụng máy chủ SMTP của chúng tôi nếu tôi có thể.

Trả lời

1

Hãy thử những cách giải quyết khác được đề cập trong lỗi bản thân:

http://issues.hudson-ci.org/browse/HUDSON-2206

Trong Java:

props.put("mail.smtp.starttls.enable","true"); 

Trong Tomcat:

Thêm JAVA_OPTS=-Dmail.smtp.starttls.enable="true" để tập tin cấu hình tomcat.

15

Tôi gặp vấn đề tương tự với Jenkins nhưng được cài đặt trên CentOS thay vì Apple OS. Tôi vẫn nghĩ để đăng giải pháp ở đây vì A) bạn có thể thực hiện các điều chỉnh cần thiết cho giải pháp và B) Linux & Người dùng Jenkins có thể hưởng lợi từ việc này.

Nhưng dù sao, tìm tập tin cấu hình Jenkins (trong CentOS trong của nó/etc/sysconfig/Jenkins)

Trong đó xác định vị trí các biến JENKINS_JAVA_OPTIONS và thêm tùy chọn sau "-Dmail.smtp.starttls.enable = true" Trong trường hợp của tôi, đây là những gì tôi đã có trước đây:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true" 

Và điều này là sau; Jenkins máy chủ

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true" 

khởi động lại (trong Linux)

/etc/init.d/jenkins restart 
+5

trong Ubuntu, các tập tin cấu hình Jenkins là trong/etc/default/Jenkins – bruThaler

+2

tôi đã cố gắng mà tôi đang nhận được lỗi sau tại . - Không thể gửi e-mail com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Khách hàng không có quyền gửi như người gửi này tại com.sun.mail.smtp.SMTPTransport.issueSendCommand (SMTPTransport.java:2057) tại com.sun.mail.smtp.SMTPTransport.finishData (SMTPTransport.java:1862) atcom.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:1100) tại javax.mail.Transport.send0 (Transport. java: 195) tại javax.mail.Transport.send (Transport.java:124) tại hudson.tasks.Mailer $ DescriptorImpl.doSendTestMail (Mailer.java:499) –

+5

"Khách hàng không có quyền gửi là" làm phiền tôi cho đến khi tôi nhận ra rằng tôi đã không đặt "địa chỉ e-mail quản trị hệ thống" – espenalb

8

Đối Jenkins trên Windows

mở Jenkins.xml và sửa đổi các đối số nút

-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -jar "%BASE%\jenkins.war" --httpPort=8080

Đối smtp.live.com:

Set the SMTP port to 587 and uncheck Use SSL

14

enter image description here

Thay đổi cổng SMTP 587-465 giải quyết vấn đề này cho tôi:

SMTP server:    smtp.mandrill.com 
Use SMTP Authentication: true 
Use SSL:     true 
SMTP Port:     465 

Từ những gì tôi có thể nói (tuyên bố từ chối trách nhiệm: Tôi không có nghĩa là một Hud chuyên gia về con trai/Jenkins) plugin email của Hudson/Jenkins hỗ trợ giao tiếp SMTP mã hóa SSL - tuy nhiên việc triển khai này yêu cầu thông tin liên lạc phải được mã hóa từ khi bắt đầu.

Khi kết nối trên cổng 587, máy chủ ở đầu kia có thể mong đợi lệnh STARTTLS (xem bài viết SSL vs TLS vs STARTTLS) này. Lệnh này được gửi bằng cách sử dụng văn bản thuần để 'nâng cấp' kết nối để sử dụng SSL/TLS.

Hudson/Jenkins thay vì cố gắng để bắt đầu đàm phán SSL trên cổng 587, mà là nhanh chóng bị từ chối, dẫn đến các lỗi sau:

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

Tôi đã thử thêm các tùy chọn JAVA gợi ý "-Dmail.smtp.starttls. enable = true "để bật TLS:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true" 

Thật không may điều này đã không giải quyết được vấn đề cho tôi.

Sau khi thay đổi cổng thành 465, thỏa thuận SSL diễn ra chính xác và giao tiếp thành công.

Hy vọng điều đó sẽ hữu ích.

Lưu ý: Plugin email Jenkins luôn cần thông tin đăng nhập SMTP thường là tùy chọn "Sử dụng xác thực SMTP" cho bất kỳ cấu hình "SSL - cổng 465" hoặc "không SSL - cổng 587" nào.

+2

tks Man! Điều này giải quyết vấn đề của tôi! –

+0

Tôi không biết làm thế nào, nhưng điều này hoạt động. –

+0

Tôi rất tiếc vì tôi chỉ có một ưu tiên để đưa ra. Thật là một lỗi ngớ ngẩn – Cfreak

0

Thêm -Dmail.smtp.starttls.enable = true như các đối số của JAVA_OPTS giải quyết vấn đề của tôi

Nếu Jenkins bạn đang chạy trong độc lập JAVA_OPTS chế độ cập nhật trong/etc/sysconfig/Jenkins Nếu Jenkins của bạn đang chạy trong bản cập nhật tomcat JAVA_OPTS

  • catalina.sh cho unix
  • catalina.bat cho các cửa sổ
3

Ngay cả phía sau er thiết lập -Dmail.smtp.starttls.enable=true như đã đề cập trong câu trả lời của @ nsof trong tệp /etc/default/jenkins (debian/ubuntu), nó không hoạt động đối với tôi.

Bí quyết là để thiết lập các cổng SMTP để và bỏ chọnUse SSL như hiển thị bên dưới, sau đó các email đã được gửi thành công.

enter image description here

+0

Vì lý do nào đó, đó là cách duy nhất nó làm việc cho tôi. Jenkins 2,28 + OpenJDK 8 –

0

Đối Jenkins trên Ubuntu 16,04:

1 - Chỉnh sửa tập tin cấu hình:

sudo nano /etc/default/jenkins 

2 - Thảo luận ra JAVA_ARGS hiện có, thêm cái mới hiển thị dưới đây:

#JAVA_ARGS="-Djava.awt.headless=true" 
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true" 

3 - Khởi động lại Jenkins

sudo service jenkins restart 

enter image description here

0

Đối Jenkins trên Red Hat Enterprise Linux Server phát hành 7.4 (Maipo) chỉnh sửa/etc/sysconfig/Jenkins thêm

enter image description here

Các Tệp cấu hình dịch vụ Jenkins yêu cầu quyền truy cập root vào máy. Trong CloudBees Jenkins Enterprise, bạn có thể tìm thấy tệp này trong:

  • /etc/default/jenkins: vị trí cho hầu hết các bản phân phối Linux.
  • /etc/sysconfig/jenkins: vị trí để phân phối RedHat/CentOS.
  • C: \ Program Files \ Jenkins \ jenkins.xml: vị trí mặc định cho Windows