web-dev-qa-db-ja.com

gitlab-ci.ymlファイルを使用したコードカバレッジレポート

GitlabのJava mavenプロジェクトのコードカバレッジレポートを見る必要があります。 thisthis およびその他のソースによると:

  1. jacocopom.xmlのプラグインのリストに追加しました。
  2. .gitlab-ci.ymlファイルにページジョブを追加しました。
  3. プロジェクト設定のコードカバレッジ解析にTotal.*?([0-9]{1,3})%を追加しました。

カバレッジレポートがないか、少なくとも表示できません。カバレッジ率やカバレッジレポートページはありません。

.gitlab-ci.ymlファイルの内容:

image: maven:latest

variables:
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.Apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"

cache:
  paths:
    - .m2/repository/

build:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS compile

test:
  stage: test
  script:
    - mvn $MAVEN_CLI_OPTS test
  artifacts:
    paths:
      - target/site/jacoco/
pages:
  stage: deploy
  dependencies:
    - test
  script:
   - mkdir public
   - mv target/site/jacoco/index.html public
  artifacts:
    paths:
      - public

deploy:
  stage: deploy
  script:
    - mvn $MAVEN_CLI_OPTS verify
  only:
    - master

pom.xmljacocoプラグイン:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <executions>
        <execution>
            <id>pre-unit-test</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>post-unit-test</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

私のプロジェクトは、gitlab.comのプライベートプロジェクトです。

パイプラインとその4つのすべてのジョブが正常に渡されました。

カバレッジレポートを表示するにはどうすればよいですか?

28
AshKan

.gitlab-ci.ymlファイルにcatへの呼び出しを追加するのを忘れたようです。

次のようなものが必要です。

script:
    - mvn $MAVEN_CLI_OPTS test
    - cat target/site/jacoco/index.html

そうは言っても、希望するカバレッジ値を取得するには生のHTMLで出力を汚染する必要があるため、これがこれを行う最適な方法だとは思いません。

代わりに、このプルリクエストで説明されている方法を使用することをお勧めします。 https://github.com/jacoco/jacoco/pull/488

  • build.xmlにjacocoパーツを保管します
  • このawk命令を使用して、正しいコードカバレッジの合計を出力します。

    awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/", 
    instructions, "instructions covered"; print 100*covered/instructions, "% 
    covered" }' target/site/jacoco/jacoco.csv
    
  • Gitlab CI正規表現を命令が返すものに置き換えます:\d+.\d+ \% covered

編集:

Gitlab 8.17の時点で、 documentation に記載されているように、.gitlab-ci.ymlファイル内で正規表現を直接定義できます。

余分なように見えるかもしれませんが、この正規表現がリポジトリ履歴の一部になっている場合は、計算に使用される他のツールと一緒に変更できます。

24
SKBo

GitLabの従業員はこちら。

管理者がGitLabページをセットアップしている場合、(プロジェクトで)Settings-> Pagesに移動することで、アーティファクトがデプロイされたURLを確認できます。

そこに表示されるはずです:

おめでとうございます!ページは次の場所で提供されます:https://your-namespace.example.com/your-project

そのリンクをクリックしてください。また、HTMLアーティファクトのサポートを拡大しています。 この問題 および関連する問題は、ここで作成したものを拡張する可能性のある既存および今後の機能について説明します。

10
user9113436

@SKBoが言ったことに加えて、小さなTweakを追加したいと思います。

持っている

cat target/site/jacoco/index.html

重要なものを読みにくくして、あなたが作成した出力を汚染します。

私はそれをお勧めします:

cat your/path/to/jacoco/report/index.html | grep -o '<tfoot>.*</tfoot>'

それは素晴らしい方法でノイズを減らすでしょう

3
Maciej

目標準備エージェントの構成を追加します

 <configuration>
 <!-- Sets the path to the file which contains the execution data. -->
 <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
 <!--Sets the name of the property containing the settings
                            for JaCoCo runtime agent.-->
 <propertyName>surefireArgLine</propertyName>
 </configuration>

また、プラグインmaven-surefire-plugin内で、以下の構成を以下の構成に追加します。

<argLine>surefireArgLine</argLine>

テスト目標の実行について。レポートが生成されます。生成されたjacoco-ut.execは、IDEを使用してのみ表示できます。

サンプルプロジェクト https://github.com/r-sreesaran/http-patch-jax-rs

詳細については、 https://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin/を参照してください

セクション「アーティファクト」の下の.gitlab-ci.ymlファイルで、pom.xmlのパス構成に従ってそれを調整します。

artifacts:
   paths:
     - target/coverage-reports/
1
Sree