经过大量的努力,我们终于得到了一个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
答案 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)
我找到了两种方法:
此解决方案有效并且非常不错。这迫使我更改test_helper.exs
,但这总体上给您带来了不便。很好,但是它只提供最基本的报告,对我而言,这是失败的地方。
我决定使用的选项。是的,使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
'''
}
}
}
}