2014-02-21 409 views
6

大型團隊,每個團隊都有獨立的git分支,聲納作爲代碼質量檢查器。

scm工具設置爲拾取與此名稱對應的每個分支:'feature-branch-*'對於maven構建而言,它完美地工作。
我想設置sonarqube,因此它會爲每個實際的git分支使用不同的分支,但是sonarqube不允許使用通配符。 然而,它確實允許變量,所以我嘗試了${GIT_BRANCH},但是這個變量成立:'origin/feature-branch-214',sonarqube不會將其識別爲有效的分支名稱。 Sonarqube預計'feature-branch-214'

所以我需要的東西放在那裏(在sonarqube分支),做一個${GIT_BRANCH}的子排除'origin/'部分。

回答

6

您可以創建一個新的變量,並賦值:

`echo ${GIT_BRANCH} | cut -d'/' -f 2-` 

之後,您就可以使用新的變量在詹金斯的Git分支SonarQube參數,請按照下面的步驟。

步驟

在構建部分添加Execute Shell步驟與command

echo NEW_VAR=`echo ${GIT_BRANCH} | cut -d'/' -f 2-` > newfile 

然後用Properties File Path添加Inject an environment variable步驟:

newfile 

在SonarQube配置離開branch音響場empty並添加在Additional properties field如下:

-Dsonar.branch=${NEW_VAR} 

的上述方案不是很乾淨,但我已經驗證了它的工作原理

+0

你好,謝謝你的回答,請你提供一些關於這個命令的解釋,因爲它似乎沒有做我想做的事。 – Jonas

+0

你說得對。現在它應該工作。該命令使用/作爲分隔符分割GIT_BRANCH變量,然後選擇第二個字段。 –

+2

請注意這種「剪切」的使用。例如:'echo origin/bran/ch | cut -d/-f 2'輸出'bran',而不是'bran/ch'。我不確定這是多麼便攜,但是'cut -d -f 2 -'使它根據需要輸出'bran/ch'。 – torek

6

,或者你可以:

echo NEW_VAR=${GIT_BRANCH#*/} > newfile 
0
git show-ref | grep $(git rev-parse HEAD) | grep remotes | grep -v HEAD | sed -e 's/.*remotes.origin.//'