Help us understand the problem. What is going on with this article?

GitLab CI で Elixir プロジェクトのカバレッジを取得する

More than 1 year has passed since last update.

Elixir プロジェクトに対し ExCoveralls を使って、GitLab CI でカバレッジ取得し結果を HTML で見れるようにします。サンプルコードをこちらに用意してみました。
https://github.com/ma2gedev/gitlab_ci_example

ExCoveralls の設定

設定は ExCoveralls の README.md 通りにします。

mix.exs projecttest_coverage: [tool: ExCoveralls] を追加。

mix.exs
def project do
  [
    ...省略...
    test_coverage: [tool: ExCoveralls]
  ]
end

deps に excoveralls を追加。

mix.exs
defp deps do
  [
    ...省略...
    {:excoveralls, "~> 0.7", only: :test}
  ]
end

参考コミット

mix deps.get を実行で設定は完了。

ここまでできれば MIX_ENV=test mix coveralls コマンドが実行できます。

$ MIX_ENV=test mix coveralls
..

Finished in 0.04 seconds
2 tests, 0 failures

Randomized with seed 663727
----------------
COV    FILE                                        LINES RELEVANT   MISSED
 75.0% lib/gitlab_ci_example.ex                       11        4        1
[TOTAL]  75.0%
----------------

GitLab CI 用の設定

HTML の出力結果がいい感じなので、これを取得できるように設定します。

ExCoveralls で出力される HTML 結果

HTML を取得するために MIX_ENV=test mix coveralls.html を実行すると、./cover/excoveralls.html が生成されるので、これを artifacts として登録します。
以下が設定ファイルの例です。

.gitlab-ci.yml
...省略...
test:
  coverage: /\[TOTAL\]\s+(\d+\.\d+)%/
  script:
    - mix local.hex --force
    - mix local.rebar --force
    - mix deps.get
    - MIX_ENV=test mix coveralls.html
  artifacts:
    expire_in: 2 week
    when: always
    paths:
      - cover

参考コミット

coverage: /\[TOTAL\]\s+(\d+\.\d+)%/カバレッジのバッジとかできて便利なので設定しています。

これができたら GitLab へ Push して CI の実行を待ちます。
以下のように結果が表示されたら設定、動作確認まで完了です。

$ MIX_ENV=test mix coveralls.html
...省略...
Generated gitlab_ci_example app
..

Finished in 0.09 seconds
2 tests, 0 failures

Randomized with seed 972758
----------------
COV    FILE                                        LINES RELEVANT   MISSED
 75.0% lib/gitlab_ci_example.ex                       11        4        1
[TOTAL]  75.0%
----------------
Generating report...
Uploading artifacts...
cover: found 2 matching files
Uploading artifacts to coordinator...
...省略...

所感

社内の Elixir プロジェクト向けに書こうと思ったのですが、外向けでも良いと思ったので公開しました(ちょっと雑だけど)。
GitLab いつの間にかとても便利になってきていて毎日感謝しながら開発しています :pray:
GitLab をすぐに最新に上げてくれて、GitLab CI もガンガン動くようにしてくれているインフラチームの皆さんにも感謝 :pray:

Resources

m3dev
インターネット、最新IT技術を活用し日本・世界の医療を改善することを目指します
https://m3.recruitment.jp/engineer/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした