K8S异常 sonar status is ‘PENDING’
1.添加K8S 自动补全命令yum install -y bash-completionsource /usr/share/bash-completion/bash_completionsource <(kubectl completion bash)echo "source <(kubectl completion bash)" >> ~/.bashrc2. flanne
·
1. jenkins在代码扫描时sonar status is ‘PENDING’
如下报错,Checking status of SonarQube task 'XXXXXXX' on server 'sonar' SonarQube task 'XXXXXXXXX' status is 'PENDING'
sonar一直在pending状态,直到超时。原因是代码还在质量检测中,pipline就执行了waitForQualityGate()
没有在sonar中添加jenkins webhook来反馈结果,所以有卡住的线性。有3种解决办法,第一种就是添加webhook反馈结果,这里不讲,也不是我的解决方案,其他2种。
1. 查看后台的运行时间,让waitForQualityGate()
在这个时间后执行,缺点:等待时间不确定。
pipline代码如下:
withSonarQubeEnv('sonarqube') {
sh "sonar-scanner -X;"
sleep 5
}
if (this.waitScan) {
// 就这这里添加延时,保证sonar后台执行完毕后在执行 waitForQualityGate()
sleep 120
timeout(time: 3, unit: 'MINUTES') {
def qg = waitForQualityGate()
String stage = "${env.stage_name}"
if (qg.status != 'OK') {
this.msg.updateBuildMessage(env.BUILD_TASKS, "${stage} Failed... **×**")
updateGitlabCommitStatus(name: "${stage}", state: 'failed')
error "Pipeline aborted due to quality gate failure: ${qg.status}"
} else {
this.msg.updateBuildMessage(env.BUILD_RESULT, "${stage} OK... **√**")
updateGitlabCommitStatus(name: "${stage}", state: 'success')
}
}
} else {
echo "skip waitScan"
}
2. 获取sonar扫描的报告,查看是否通过 (我的解决方案)。
withSonarQubeEnv('sonarqube') {
sh "sonar-scanner -X;"
sleep 5
}
if (this.waitScan) {
// sleep 120
timeout(time: 10, unit: 'MINUTES') {
//新增
String authString = "${this.userName}:${this.passWord}"
def reportFilePath = "target/sonar/report-task.txt"
def reportTaskFileExists = fileExists "${reportFilePath}"
if (reportTaskFileExists) {
echo "Found report task file"
def taskProps = readProperties file: "${reportFilePath}"
echo "taskId[${taskProps['ceTaskId']}]"
while (true) {
sleep 20
def taskStatusResult =
sh(returnStdout: true,
script: "curl -s -X GET -u ${authString} \'sonarqube:9000/api/ce/task?id=${taskProps['ceTaskId']}\'")
echo "taskStatusResult[${taskStatusResult}]"
def taskStatus = new JsonSlurper().parseText(taskStatusResult).task.status
// Status can be SUCCESS, ERROR, PENDING, or IN_PROGRESS. The last two indicate it's
if (taskStatus != "IN_PROGRESS" && taskStatus != "PENDING" && taskStatus != "") {
break;
}
}
}
String stage = "${env.stage_name}"
this.msg.updateBuildMessage(env.BUILD_RESULT, "${stage} OK... **√**")
updateGitlabCommitStatus(name: "${stage}", state: 'success')
}
} else {
echo "skip waitScan"
}
更多推荐
已为社区贡献3条内容
所有评论(0)