2017-06-01 91 views
1

我正在將我現有的構建作業轉換爲由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步驟? 在此先感謝。

回答

0

我會考慮重新實現這部分的構建,並避免使用shell步驟。

如果你去(優秀)作業DSL API文檔,你可以看到有聲納DSL準備就緒,等待使用你...

https://jenkinsci.github.io/job-dsl-plugin/#method/javaposse.jobdsl.dsl.helpers.publisher.MavenPublisherContext.sonar

在我看來,它將更好使用作業DSL處理聲納那裏而不是通過shell腳本運行聲納測試

您的代碼將有更少的語言來解決,更清潔,更容易維護和理解。

+1

非常感謝Rob,我的確看過Sonar DSL方法。在我的場景中,我已經使用之前的maven調用運行了Sonar分析(可以轉而使用Job DSL。我現在要做的是基本上向Jenkins工作返回合格/不合格已經完成的Sonar運行,我看不到DSL方法如何實現。 – DaveR

相關問題