Travis-CI 및 Codecov와 Elixir Phoenix의 지속적인 통합

12021 단어 elixirphoenixci
travis-ci가 테스트 슈트를 실행하고 커버리지 보고서를 codecov에 업로드하는 방법을 보여드리겠습니다. 이 모든 것은 github 풀 리퀘스트에 표시되어 참조용으로 확인됩니다.

최근에 내가 더 광범위하게 하고 있는 것은 단위 테스트입니다. 반드시 TDD를 수행하는 것이 아니라 단위 테스트 그 자체입니다. 당신이 그것을 즐기기 시작하면 그것은 도전처럼 되고 또한 중독이 됩니다. 당신의 프로젝트에서 커버리지 보고 도구가 100% 커버리지 배지를 보여주는 것은 큰 기쁨입니다. 단위 테스트는 또한 더 나은 코드를 생성하고 더 안전하다고 느끼므로 개발 프로세스에 추가하는 것이 긍정적입니다.

손에



먼저 travis-ci.orgcodecov.io에 등록해야 하며 둘 다 공용 리포지토리에 대한 무료 계획이 있습니다. (github를 사용하여 가입)

위와 같이 두 서비스 모두에 통합하려는 리포지토리를 선택합니다.



보고 도구의 경우 패키지ExCoveralls를 사용하고 Phoenix 프로젝트의 mix.exs 파일에 다음을 추가합니다.

defmodule Yourapp.MixProject do
  use Mix.Project

  def project do
    [
      app: :yourapp,
      version: "0.1.0",
      elixir: "~> 1.5",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps(),
      test_coverage: [tool: ExCoveralls] # ADD THIS LINE
    ]
  end

  ...

  defp deps do
    [
      {:phoenix, "~> 1.4.9"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 4.0"},
      {:ecto_sql, "~> 3.1"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.11"},
      {:excoveralls, "~> 0.11.1"}, # ADD THIS LINE
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"}
    ]
  end

  ...

end


또한 다음과 같이 프로젝트의 루트 폴더에 .travis.yml 파일을 만듭니다.

language: elixir

elixir:
  - '1.9.1'
otp_release:
  - '22.0.7'

env:
  - MIX_ENV=test

addons:
  postgresql: '9.6'

services:
  - postgresql

before_script:
  - cp config/travis.exs config/test.exs
  - mix do ecto.create, ecto.migrate

script:
  - mix do compile --warnings-as-errors, coveralls.json

after_success:
  - bash <(curl -s https://codecov.io/bash)

cache:
  directories:
    - _build
    - deps


before_script는 test.exs에 대한 travis.exs 파일을 대체하므로 travis가 제대로 작동하도록 특정 환경을 실행합니다.

따라서 travis.exs 폴더 아래에 이 config를 생성해야 합니다.

use Mix.Config

# Configure your database
config :yourapp, yourapp.Repo,
  username: "postgres",
  password: "",
  database: "yourapp_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox

# We don't run a server during test. If one is required,
# you can enable the server option below.
config :yourapp, yourappWeb.Endpoint,
  http: [port: 4002],
  server: false

# Print only warnings and errors during test
config :logger, level: :warn


또한 테스트하지 않거나 적용 범위 메트릭을 고려하지 않을 일부 파일을 제외하도록 적용 범위 보고 도구를 구성할 수 있습니다.

프로젝트의 루트 폴더에 coveralls.json 파일 생성

{
  "coverage_options": {
    "minimum_coverage": 100
  },
  "skip_files": [
    "test/",
    "lib/yourapp_web.ex",
    "lib/yourapp.ex",
    "lib/yourapp/application.ex",
    "lib/yourapp/repo.ex",
    "lib/yourapp_web/endpoint.ex",
    "lib/yourapp_web/gettext.ex",
    "lib/yourapp_web/views/error_helpers.ex"
  ]
}


이 minimum_coverage 구성은 실제 프로젝트에서 달성하기 어렵지만 불가능하지는 않은 100% 적용 범위가 없는 빌드를 실패로 표시합니다.

다음과 같이 빌드 통과 및 적용 범위 비율의 배지를 표시합니다.



이것을 추가하여 yourgithub를 github 사용자 이름으로 바꾸고 yourrepo를 리포지토리 이름으로 바꿉니다.

[![codecov](https://codecov.io/gh/yourgithub/yourrepo/branch/master/graph/badge.svg)](https://codecov.io/gh/yourgithub/yourrepo)
[![Build Status](https://travis-ci.org/yourgithub/yourrepo.svg?branch=master)](https://travis-ci.org/yourgithub/yourrepo)


이 모든 구성을 사용하면 풀 요청을 생성할 때마다 다음과 같은 내용이 표시됩니다.



PR 목록은 확인 상태에 따라 확인 또는 십자가를 표시합니다.

좋은 웹페이지 즐겨찾기