我正在將我現有的構建作業轉換爲由Jenkins Job DSL生成。Jenkins Job DSL返回腳本結果
這些工作主要是基於Maven的,並調用Sonar。現有的作業執行一些shell命令,用於調用Sonar服務器以測試Sonar運行是否已通過Sonar質量門。如果它通過質量門,作業繼續,否則失敗。代碼塊爲:
#!/bin/bash
# Query the Sonar Quality Gate for this project; if good, proceed with the job
APP_GROUPID=$(cat pom.xml | xpath /project/groupId/text\(\) 2>/dev/null)
APP_ARTIFACTID=$(cat pom.xml | xpath /project/artifactId/text\(\) 2>/dev/null)
export SONAR_RESULT=$(curl --silent -H "Accept: application/xml" "http://<sonar-server>/api/resources/index?includealerts=true&metrics=alert_status&resource=${APP_GROUPID}:${APP_ARTIFACTID}" | xpath '/resources/resource/msr/alert/text()' 2>/dev/null)
echo $SONAR_RESULT
if [ "$SONAR_RESULT" == "OK" ]; then
echo "*** SONAR_RESULT = [$SONAR_RESULT] Proceeding with deployment."
else
echo "*** SONAR_RESULT = [$SONAR_RESULT] Halting deployment attempt!"
exit -1
fi
我想在Jenkins Job DSL中複製這個功能。要做到這一點,我需要獲得Maven Group &工件ID信息,構建查詢Sonar服務器的命令,然後返回查詢結果。
在Job DSL文檔中,我沒有看到關於如何返回shell步驟狀態的任何信息。到目前爲止,我看到要做到這一點的唯一方法是運行1個或更多DSL外殼步驟來獲取Group + Artifact ID信息,制定結果作爲Jenkins環境變量&將它們寫入臨時文件;然後我將這些變量注入構建作業中;一旦完成,我就打電話給Sonar服務器,並將結果寫入另一個臨時文件並檢查。顯然這非常糟糕。
有沒有更好的方法來做到這一點,而不必使用shell步驟? 在此先感謝。
非常感謝Rob,我的確看過Sonar DSL方法。在我的場景中,我已經使用之前的maven調用運行了Sonar分析(可以轉而使用Job DSL。我現在要做的是基本上向Jenkins工作返回合格/不合格已經完成的Sonar運行,我看不到DSL方法如何實現。 – DaveR