流程大體以下
java
獲取Jenkins的控制檯輸出git
sonarqube結果會打印在jenkins的console中,因此前期把console結果所有以文本發郵件給代碼提交者,後面再進行文本提取。shell
這一步的原理是使用Jenkins Command Line的console命令獲取控制檯輸出結果。須要使用jenkins-cli.jar文件。在Jenkins的節點上不能確保這個文件的存在,因此約定將這個文件放在/opt目錄下。安全
在Sonar分析完成以後,執行如下命令服務器
JENKINS_CLI=/opt/jenkins-cli.jar USERNAME=jenkins PASSWORD=admin echo `java -jar $JENKINS_CLI -s $JENKINS_URL console ${JOB_NAME} $BUILD_ID` --username $USERNAME --password $PASSWORD
在這裏可能出現 Failed to authenticate with your SSH keys. Proceeding as anonymous。被這個問題坑了好久,解決方法是將Jenkins節點的ssh key添加至Jenkins的配置中。配置地址爲 http://[yourjenkinsserver]/user/[username]/configuressh
生成SSH公鑰:工具
ssh-keygen -t rsa -C "youremail@example.com"
spa
而後在home目錄下看有沒有.ssh目錄,cat裏面的id_rsa.pub文件就能獲得公鑰了。code
發送郵件orm
git log -1 --pretty=format:"%ce" #獲取當前分支最新代碼提交者的郵箱
發送郵件這裏使用swaks工具,沒有安裝的使用apt-get或者yum等命令安裝。
具體用法 man swaks 裏面寫得很詳細。列幾個經常使用的
swaks --to $CE --from ldeng@example.com --server mail.example.com --tlsc -au sender@example.com -ap [yourpassword] --d "Date: %DATE%\nTo: %TO_ADDRESS%\nFrom: %FROM_ADDRESS%\nSubject: $SUBJECT\nX-Mailer: swaks v$p_version jetmore.org/john/code/swaks/\n%NEW_HEADERS%\n%BODY%\n" --body "$BODY" --header "$HEADER"
通常,配置SMTP服務器會有如下幾個參數:host:服務主機,ip服務端口:25是默認端口,465是TLS安全連接的默認端口,用戶名,密碼。
以上幾個參數
--to 收信人的郵箱
--from 發信人的郵箱,用於顯示
--server SMTP郵箱地址
--tlsc 使用TLS鏈接,默認465端口,能夠經過--port參數指定其它端口
--au 用戶名
--ap 密碼
--body 發送郵件的內容
--header 郵件頭,依然在正文中
-d -d參數比較複雜,默認是"Date: %DATE%\nTo: %TO_ADDRESS%\nFrom: %FROM_ADDRESS%\nSubject: test %DATE%\nX-Mailer: swaks v$p_version jetmore.org/john/code/swaks/\n%NEW_HEADERS%\n%BODY%\n"
這個值是幾個鍵值對以\n的形式鏈接起來的,裏面的參數都是字面意思,主要要用到的是Subject(主題)這個參數,要是不指定這個發送郵件的主題就是「test日期」。
配置Jenkins發送郵件
點擊「增長構建步驟」=>Excute Shell,便可。完整的實例以下:
CE=$(git log -1 --pretty=format:"%ce") #獲取收件人的郵箱地址 CN=$(git log -1 --pretty=format:"%cn") #收件人的姓名 SUBJECT="SonarQube Analysis Result Of Your Branch '$BRANCH_NAME' on Project Test" JENKINS_CLI=/opt/jenkins-cli.jar USERNAME=jenkins PASSWORD=admin BODY=`java -jar $JENKINS_CLI -s $JENKINS_URL console ${JOB_NAME} $BUILD_ID --username $USERNAME --password $PASSWORD` HEADER="hello,dear $CN" swaks --to $CE --from ldeng@example.com --server mail.example.com --tlsc -au sender@example.com -ap [yourpassword] --d "Date: %DATE%\nTo: %TO_ADDRESS%\nFrom: %FROM_ADDRESS%\nSubject: $SUBJECT\nX-Mailer: swaks v$p_version jetmore.org/john/code/swaks/\n%NEW_HEADERS%\n%BODY%\n" --body "$BODY" --header "$HEADER"