目前在我的项目中,组织存储库上的每个pull-Request都是由Jenkins
自动构建的,如jenkins文件中所指定的。
当构建结束时,Jenkins
向github发送一条消息,其中包含该项目构建的状态。
我想向拉取请求的对话发送Sonar
分析,但仅针对已通过拉取请求更新的文件/代码。
赏金信息:
答案 0 :(得分:1)
由于你在10个月内没有收到答案,我将帮助我可以帮助我这里是GitLab的工作示例,但你应该能够改变它,因为插件类似(https://wiki.jenkins.io/display/JENKINS/GitHub+Plugin#GitHubPlugin-Settingcommitstatus):
#!groovy
pipeline {
options {
buildDiscarder(
logRotator(artifactDaysToKeepStr: '21', artifactNumToKeepStr: '4', daysToKeepStr: '21', numToKeepStr: '4')
)
gitLabConnection('GitLab')
}
agent any
tools {
maven 'Default Maven'
jdk 'DefaultJDK'
}
stages {
stage('Build') {
steps {
sh "mvn clean install -U"
}
}
stage('Source Code Analysis') {
steps {
withMaven() {
sh "mvn " +
"-Dsonar.branch='${env.BRANCH_NAME}' " +
"-Dsonar.analysis.mode=preview " +
"-Dsonar.gitlab.commit_sha=\$(git log --pretty=format:%H origin/master..'${env.BRANCH_NAME}' | tr '\\n' ',') " +
"-Dsonar.gitlab.ref_name='${env.BRANCH_NAME}' " +
"sonar:sonar"
}
withMaven() {
sh "mvn -Dsonar.branch='${env.BRANCH_NAME}' sonar:sonar"
}
}
}
}
post {
success {
echo 'posting success to GitLab'
updateGitlabCommitStatus(name: 'jenkins-build', state: 'success')
}
failure {
echo 'posting failure to GitLab'
updateGitlabCommitStatus(name: 'jenkins-build', state: 'failed')
}
always {
deleteDir()
}
}
}
这包括各种各样的内容,但涵盖了你要做的事情,声纳分析发生在两部分预览中(对提交的评论和这些评论在打开时转移到合并请求)然后进行正常分析后
在项目中,我也定义了:
<sonar.gitlab.project_id>${gitlab.project_id}</sonar.gitlab.project_id>
<sonar.gitlab.unique_issue_per_inline>true</sonar.gitlab.unique_issue_per_inline>
<sonar.gitlab.user_token>GITLAB_USER_TOKEN</sonar.gitlab.user_token>
<sonar.gitlab.url>${git.hostname.url}</sonar.gitlab.url>
如果您添加这些并替换丢失的位,我相信这将解决您的问题。
编辑: 我相信你需要github而不是GitLab的以下选项:
-Dsonar.analysis.mode=preview \
-Dsonar.github.pullRequest=$PULL_REQUEST_ID \
-Dsonar.github.repository=myOrganisation/myProject \
-Dsonar.github.oauth=$GITHUB_ACCESS_TOKEN \
-Dsonar.host.url=https://server/sonarqube \
-Dsonar.login=$SONARQUBE_ACCESS_TOKEN
答案 1 :(得分:-1)
看起来您的mvn sonar命令缺少GitHub oauth令牌参数,如sonar documentation中所述。此GitHub article将引导您完成如何生成此令牌。生成后,您可以将其添加到您的命令中(即-Dsonar.github.oauth = 您的令牌)。