jenkins CI 的 Coveralls 插件?
Coveralls plugin for jenkins CI?
背景
经过大量的努力,我们终于得到了一个 Jenkins CI 从 GitHub 存储库中提取代码,现在正在进行持续集成和部署。
我们获取代码,只有在所有测试都通过后才会像往常一样部署它。
现在我检查了 Java 有很多插件,除了 运行 测试之外,还进行 测试覆盖率 ,例如 Cobertura.
但我们不使用 Java。我们使用 Elixir。
在 Elixir 世界中,我们有 excoveralls, which is a facade for the coveralls API. The coveralls API supports jenkins,因此我有理由为 Jenkins 找到一个 Coveralls 插件。
我错了。什么都没有。
问题
所以现在我有一个基本上没用的测试覆盖率指标,因为我无法将它与 Jenkins 集成。
是否有任何 Erlang/Elixir 插件可以与 Jenkins 一起用于代码覆盖?
我也在项目中创建了一个Issue(好像被放弃了...)https://github.com/parroty/excoveralls/issues/167
我有一个平台可以在我的 Jenkinsfile 上发布报道。我不确定这是否是您想要的指标,但是...
stage('Publish Coverage') {
when{
branch 'master'
}
steps {
publishHTML target: [
allowMissing: true,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: 'cover',
reportFiles: 'excoveralls.html',
reportName: 'Coverage Report'
]
}
}
我找到了两种方法:
- 使用十六进制包JUnit formatter together with junit post pipeline step
- 将 covertool 与 Cobertura Jenkins 合用
选项 1
这个解决方案有效而且非常好。它迫使我更改 test_helper.exs
但这总体上是一个小小的不便。这很好,但它只提供最基本的报告,对我来说这是失败的地方。
选项 2
我决定采用的选项。是的,让 Jenkinsfile
为 Cobertura 工作是一场噩梦,特别是因为在以前的版本中这甚至是不可能的,而且到处都是相互矛盾的信息。
但是,一旦您开始 Jenkinsfile
,您就可以从 Cobertura 那里获得那些甜蜜的报告。 Cobertura 是在考虑 Java 的情况下创建的,没有两种解决方法。在报告中,您会看到诸如 Class 覆盖范围之类的内容,但您可以轻松地翻译这些模块。该界面提供了更多信息并随着时间的推移跟踪覆盖范围,这正是我真正想要的。
为了将来通知,这是我的 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。您可以进一步将其配置为 not 破坏整个管道,因为您 错过了 文件末尾的新行,但正如我所说,我是我的代码很纳粹。
2. Deploy 阶段仅在推送的分支为 Master 时运行。还有其他方法可以做到这一点,但我发现用这种方法来做一个小项目就足够了。
总的来说,我现在喜欢 covertools,但我不知道第一个解决方案是否具有相同的潜力。至少我没看到。
希望post对您有所帮助!
原帖:
另一种 post 从 Jenkins 覆盖 Elixir 项目的方法是使用 ExCoveralls 选项 mix coveralls.post. This allows you to post the coverage from any host, including your Jenkins server. Based on the example on 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
'''
}
}
}
}
背景
经过大量的努力,我们终于得到了一个 Jenkins CI 从 GitHub 存储库中提取代码,现在正在进行持续集成和部署。
我们获取代码,只有在所有测试都通过后才会像往常一样部署它。
现在我检查了 Java 有很多插件,除了 运行 测试之外,还进行 测试覆盖率 ,例如 Cobertura.
但我们不使用 Java。我们使用 Elixir。
在 Elixir 世界中,我们有 excoveralls, which is a facade for the coveralls API. The coveralls API supports jenkins,因此我有理由为 Jenkins 找到一个 Coveralls 插件。
我错了。什么都没有。
问题
所以现在我有一个基本上没用的测试覆盖率指标,因为我无法将它与 Jenkins 集成。
是否有任何 Erlang/Elixir 插件可以与 Jenkins 一起用于代码覆盖?
我也在项目中创建了一个Issue(好像被放弃了...)https://github.com/parroty/excoveralls/issues/167
我有一个平台可以在我的 Jenkinsfile 上发布报道。我不确定这是否是您想要的指标,但是...
stage('Publish Coverage') {
when{
branch 'master'
}
steps {
publishHTML target: [
allowMissing: true,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: 'cover',
reportFiles: 'excoveralls.html',
reportName: 'Coverage Report'
]
}
}
我找到了两种方法:
- 使用十六进制包JUnit formatter together with junit post pipeline step
- 将 covertool 与 Cobertura Jenkins 合用
选项 1
这个解决方案有效而且非常好。它迫使我更改 test_helper.exs
但这总体上是一个小小的不便。这很好,但它只提供最基本的报告,对我来说这是失败的地方。
选项 2
我决定采用的选项。是的,让 Jenkinsfile
为 Cobertura 工作是一场噩梦,特别是因为在以前的版本中这甚至是不可能的,而且到处都是相互矛盾的信息。
但是,一旦您开始 Jenkinsfile
,您就可以从 Cobertura 那里获得那些甜蜜的报告。 Cobertura 是在考虑 Java 的情况下创建的,没有两种解决方法。在报告中,您会看到诸如 Class 覆盖范围之类的内容,但您可以轻松地翻译这些模块。该界面提供了更多信息并随着时间的推移跟踪覆盖范围,这正是我真正想要的。
为了将来通知,这是我的 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。您可以进一步将其配置为 not 破坏整个管道,因为您 错过了 文件末尾的新行,但正如我所说,我是我的代码很纳粹。 2. Deploy 阶段仅在推送的分支为 Master 时运行。还有其他方法可以做到这一点,但我发现用这种方法来做一个小项目就足够了。
总的来说,我现在喜欢 covertools,但我不知道第一个解决方案是否具有相同的潜力。至少我没看到。
希望post对您有所帮助!
原帖:
另一种 post 从 Jenkins 覆盖 Elixir 项目的方法是使用 ExCoveralls 选项 mix coveralls.post. This allows you to post the coverage from any host, including your Jenkins server. Based on the example on 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
'''
}
}
}
}