erlang Jenkins CI的工作服插件?

pn9klfpd  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(161)

背景
经过大量的艰苦工作,我们终于得到了一个Jenkins CI从GitHub仓库中提取代码,现在正在进行持续集成和部署。
我们获取代码,并像往常一样,仅在所有测试都通过的情况下才部署它。
现在我已经检查了一些Java插件,它们除了运行测试之外,还做测试覆盖,比如Cobertura
但我们不用Java我们用Elixir
在Elixir的世界里,我们有excoveralls,这是工作服API的一个外观。工作服API supports jenkins,所以我有理由为Jenkins找到一个工作服插件。
我错了。什么都没有。

个问题

所以现在我有一个基本上无用的测试覆盖度量,因为我不能将它与Jenkins集成。
有没有任何Erlang/Elixir插件可以与Jenkins一起使用以实现代码覆盖?
我还在项目中创建了一个问题(似乎已被放弃...)https://github.com/parroty/excoveralls/issues/167

sdnqo3pr

sdnqo3pr1#

我有一个阶段,以发布我的Jenkins文件的覆盖面。我不知道如果这是你想要的指标,但...

stage('Publish Coverage') {
  when{
    branch 'master'
  }

  steps {
    publishHTML target: [
      allowMissing: true,
      alwaysLinkToLastBuild: true,
      keepAll: true,
      reportDir: 'cover',
      reportFiles: 'excoveralls.html',
      reportName: 'Coverage Report'
    ]
  }
}
oymdgrw7

oymdgrw72#

我发现了两种方法:
1.将十六进制包JUnit formatter与junit post pipeline step一起使用
1.将covertool与Cobertura Jenkins插件一起使用

选项1

这个解决方案很好用,也很不错。它迫使我改变test_helper.exs,但总体来说这是一个小的不便。它很不错,但它只提供了最基本的报告,对我来说这就是它失败的地方。

选项2

我决定采用的选项。是的,让Jenkinsfile为Cobertura工作是一场噩梦,特别是因为在以前的版本中这甚至是不可能的,而且因为到处都是相互矛盾的信息。
然而,一旦你开始使用Jenkinsfile,你就可以从Cobertura中获取那些漂亮的报告。Cobertura是用Java开发的,没有第二种方法。在报告中你可以看到类覆盖率之类的东西,但是你可以很容易地将其转换为模块。界面提供了更多的信息,并随着时间的推移跟踪覆盖率,这正是我真正想要的。
为了便于将来通知,下面是我的Jenkinsfile

pipeline {
  agent any

  environment { 
    SOME_VAR = "/home/deployer"
  }

  stages {
    stage("Build") {
      steps {
        sh "MIX_ENV=test mix do deps.get, deps.compile"
      }
    }

    stage("Test") {
      steps {
        sh "mix test --cover"
      }
    }

    stage("Credo"){
      steps{
        sh "mix credo --strict"
      }
    }

    stage("Deploy"){
      when{
        expression{
          env.BRANCH_NAME == "master"
        }
      }
      steps{
        sh '''
         echo "Deploy with AWS or GCP or whatever"                                                         
        '''
      }
    }

  }

  post{
    always{
      cobertura coberturaReportFile: "coverage.xml"
    }
  }
}

注意:1.我对我的代码非常纳粹,所以我也使用Credo。你可以进一步配置它,使其因为你 * 错过了 * 文件末尾的一个新行而破坏整个管道,但正如我所说的,我对我的代码非常纳粹。2.部署阶段只在推送的分支是Master时运行。还有其他方法可以做到这一点,但是我发现对于一个小项目来说有这样的方式已经足够好了。
总的来说,我现在喜欢covertools,但我不知道第一个解决方案是否有同样的潜力。至少我没有看到它。
希望这篇文章能有所帮助!
原始线程:

pnwntuvh

pnwntuvh3#

另一种发布Jenkins for Elixir项目报道的方法是使用ExCoveralls选项mix coveralls.post。这允许您从任何主机发布报道,包括您的Jenkins服务器。基于Jenkins教程页面上的示例,您可以在Jenkins文件中编写如下内容:

pipeline {
  agent any
  stages {
      // Assuming all environment variables are set beforehand
      stage('run unit test') {
          steps {
              sh 'echo "Run Unit Test and Post coverage"'
              sh '''
                MIX_ENV=test mix coveralls.post --token $COVERALLS_REPO_TOKEN --sha $GIT_COMMIT --branch $GIT_BRANCH --name "jenkins" --message $GIT_COMMIT_MSG
              '''
          }
      }
   }
}

相关问题