詹金斯CI的工作服插件?

时间:2018-12-18 13:53:25

标签: jenkins continuous-integration erlang elixir coveralls

背景

经过大量的努力,我们终于得到了一个Jenkins CI,它从GitHub存储库中提取了代码,现在正在进行持续集成和部署。

我们照例获得了代码,并且仅在所有测试通过后才部署它。

现在,我检查了是否有许多Java插件,除了运行测试外,还进行了测试覆盖率,例如Cobertura

但是我们不使用Java。我们使用长生不老药。

在Elixir世界中,我们有excoveralls,它是工作服API的外观。 Coveralls API supports jenkins因此,我有理由为Jenkins找到Coveralls插件。

我错了。什么都没有。

问题

所以现在我有了一个测试覆盖率指标,该指标基本上没有用,因为我无法将其与Jenkins集成。

Jenkins是否可以使用任何Erlang / Elixir插件进行代码覆盖?

我还在项目中创建了一个Issue(似乎被废弃了……)https://github.com/parroty/excoveralls/issues/167

3 个答案:

答案 0 :(得分:1)

我有一个阶段可以将覆盖范围发布到我的Jenkinsfile上。我不确定这是否是您想要的指标,但是...

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

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

答案 1 :(得分:0)

我找到了两种方法:

  1. 将十六进制软件包JUnit formatter与junit post pipeline step一起使用
  2. 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,但我不知道第一个解决方案是否具有相同的潜力。至少我没看到。

希望这篇文章对您有所帮助!

原始线程:

答案 2 :(得分:0)

从 Jenkins 发布 Elixir 项目报道的另一种方法是使用 ExCoveralls 选项 mix coveralls.post。这允许您从任何主机发布覆盖范围,包括您的 Jenkins 服务器。根据 this Jenkins tutorial page 上的示例,您可以在 Jenkinsfile 中这样编写:

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
              '''
          }
      }
   }
}
相关问题