Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jenkins-如何向github发布覆盖率报告_Java_Git_Github_Jenkins_Groovy - Fatal编程技术网

Java Jenkins-如何向github发布覆盖率报告

Java Jenkins-如何向github发布覆盖率报告,java,git,github,jenkins,groovy,Java,Git,Github,Jenkins,Groovy,我正在尝试使用,文档中说我需要在我的主分支上运行以下命令: 步骤[$class:'MasterCoverage动作'] 但当我将其添加到管道中时,会出现以下错误: 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=

我正在尝试使用,文档中说我需要在我的主分支上运行以下命令:

步骤[$class:'MasterCoverage动作']

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

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
我尝试了多种方法来注入这些变量。在我最近的一次尝试中,我甚至查看了,因此我将我的管道更改为:

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插件的功能,但并没有产生太大的效果

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

  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 因此,在解析为哈希映射的配置文件中找不到密钥。在通读了代码之后,修复代码非常容易

在githubprcoveragegatus/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);
}
这解决了我的问题,本着开源的良好精神,我向提出了一个请求,以便其他人可以从这个修复中受益