gpt4 book ai didi

java - Jenkins - 如何将覆盖率报告发布到 github

转载 作者:行者123 更新时间:2023-12-02 12:15:34 25 4
gpt4 key购买 nike

我正在尝试使用github-pr-coverage-status-plugin ,文档说我需要在我的主分支上运行以下命令:

step([$class: 'MasterCoverageAction'])

但是当我将其添加到管道中时,出现以下错误:

java.lang.UnsupportedOperationException: Can't find GIT_URL or CHANGE_URL in envs: {BRANCH_NAME=master, BUILD_DISPLAY_NAME=#41, BUILD_ID=41, BUILD_NUMBER=41, BUILD_TAG=jenkins-testci-master-41, BUILD_URL=https://jnkns-ci.myserver.com/job/testci/job/master/41/, CLASSPATH=, HUDSON_HOME=/var/jenkins_home, HUDSON_SERVER_COOKIE=01f6aedeea333d1f, HUDSON_URL=https://jnkns-ci.myserver.com/, JENKINS_HOME=/var/jenkins_home, JENKINS_SERVER_COOKIE=01f6aedeea333d1f, JENKINS_URL=https://jnkns-ci.myserver.com/, JOB_BASE_NAME=master, JOB_DISPLAY_URL=https://jnkns-ci.myserver.com/job/testci/job/master/display/redirect, JOB_NAME=testci/master, JOB_URL=https://jnkns-ci.myserver.com/job/testci/job/master/, RUN_CHANGES_DISPLAY_URL=https://jnkns-ci.myserver.com/job/testci/job/master/41/display/redirect?page=changes, RUN_DISPLAY_URL=https://jnkns-ci.myserver.com/job/testci/job/master/41/display/redirect}
at com.github.terma.jenkins.githubprcoveragestatus.PrIdAndUrlUtils.getGitUrl(PrIdAndUrlUtils.java:85)
at com.github.terma.jenkins.githubprcoveragestatus.MasterCoverageAction.perform(MasterCoverageAction.java:71)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:49)
at hudson.security.ACL.impersonate(ACL.java:260)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:46)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

我尝试了多种方法来注入(inject)这些变量。在我最近的尝试中,我什至查看了 source code for this class ,所以我将管道更改为:

pipeline {

agent any

options {
skipDefaultCheckout()
}
environment {
// calling credentials() actually sets 3 environment variables
// GIT_HUB with <username>:<password>
// GIT_HUB_USER with <username>
// GIT_HUB_PSW with <password>

GIT_HUB = credentials('tmhjenkins')
DOCKER_REPO = 'mobilityhouse'
DOCKER_HUB = credentials('tmhitadmin')
GIT_URL_PROPERTY = "https://$GIT_HUB@github.com/mobilityhouse/testci.git"
}

stages{
...
...
stage('Coverage & Tests') {
steps {
sh 'pip3 install -e .'
sh 'make coverage-xml'
script {
currentBuild.result = 'SUCCESS'
sh(script: 'export GIT_URL_PROPERTY="https://$GIT_HUB@github.com/mobilityhouse/testci.git"')
env.GIT_URL_PROPERTY = "https://$GIT_HUB@github.com/mobilityhouse/testci.git"
step([$class: 'MasterCoverageAction'])
}
}
}

...

}

唉,这也失败了。那么我应该如何在管道内正确使用这个插件呢?任何帮助将不胜感激。

最佳答案

绕了一段时间后,我决定更深入地了解这个 Jenkins 插件的作用(issue report in github 并没有产生太多结果......)

事实证明,主覆盖率报告已正确存储,例如正确设置了环境变量:

  step([$class: 'MasterCoverageAction',
scmVars:
[GIT_URL:
"https://github.com/xxx/testci.git",]
])

这会在 JENKINS_HOME 的 XML 日志文件中添加一个条目,但是插件会提示:

Can't find master coverage repository: https://github.com/xxx/testci/pull/8 in stored: {https://github.com/myorga/testci/pull/5=0.6923, https://github.com/xxx/testci/pull/6=0.6923, https://****@github.com/myorga/testci.git=0.5385, https://github.com/xxx/testci/pull/7=0.5385}

这亮起了红灯,所以我深入研究代码并发现了问题。即 PR 被插件检测为: https://github.com/xxx/testci/pull/6 但是主覆盖操作应该只保存 https://github .com/xxx/testci 因此在配置文件(解析为 HashMap )中找不到该 key 。读完代码后,修复代码非常容易。

githubprcoveragestatus/CompareCoverageAction.java中我替换了:

final float masterCoverage = masterCoverageRepository.get(gitUrl);

使用以下行

float masterCoverage;
if (gitUrl.contains("pull/")) {
final String myCorrectURL = "https://github.com/" + GitUtils.getUserRepo(gitUrl);
// Using masterCoverageRepository.get(myCorrectURL); is failing because URL is
// https://github.com/USER/REPO/pull/PR_ID
buildLog.println(BUILD_LOG_PREFIX + "myCorrectURL:" + myCorrectURL);
masterCoverage = masterCoverageRepository.get(myCorrectURL);
} else {
masterCoverage = masterCoverageRepository.get(gitUrl);
}

这解决了我的问题,本着开源的良好精神,我向fix how a URL for Pull Request is detected提出了 pull 请求,以便其他人可以从此修复中受益。

关于java - Jenkins - 如何将覆盖率报告发布到 github,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com