Jenkins构建使用变量$ {GIT_BRANCH}作为sonarqube参数而没有"origin /"

Jon*_*nas 6 git jenkins sonarqube

庞大的团队,每个团队都有独立的git分支,声纳作为代码质量检查员.

scm工具设置为拾取与此名称对应的每个分支:'feature-branch-*'对于maven构建,它完美地工作.
我想设置sonarqube所以它会为每个实际的git分支使用不同的分支,但是sonarqube不允许使用通配符.但它确实允许变量,所以我试过${GIT_BRANCH},但是这个变量保持:'origin/feature-branch-214',哪个sonarqube不能识别为有效的分支名称.Sonarqube期待'feature-branch-214'

所以我需要把东西放在那里(在sonarqube分支中),它做一个子串${GIT_BRANCH}来排除'origin/'部分.

Apo*_*dis 6

您可以创建一个新变量并分配值:

`echo ${GIT_BRANCH} | cut -d'/' -f 2-`
Run Code Online (Sandbox Code Playgroud)

之后,您将能够通过以下步骤在Jenkins Git Branch SonarQube参数中使用新变量.

脚步

在构建部分中添加一个Execute Shell步骤command:

echo NEW_VAR=`echo ${GIT_BRANCH} | cut -d'/' -f 2-` > newfile
Run Code Online (Sandbox Code Playgroud)

然后添加一个Inject an environment variable步骤Properties File Path:

newfile
Run Code Online (Sandbox Code Playgroud)

在SonarQube配置中,离开该branch字段empty并在以下内容中添加以下内容Additional properties field:

-Dsonar.branch=${NEW_VAR}
Run Code Online (Sandbox Code Playgroud)

上面的解决方案不是很干净,但我已经证实它有效

  • 小心这种`cut`的用法.例如:`echo origin/bran/ch | cut -d/-f 2`输出`bran`,而不是`bran/ch`.我不确定这是多么便携,但`cut -d -f 2 -`使得它可以根据需要输出`bran/ch`. (2认同)

Duš*_*šan 6

或者你可以:

echo NEW_VAR=${GIT_BRANCH#*/} > newfile
Run Code Online (Sandbox Code Playgroud)