kdpv


По некоторым просьбам, публикую очень короткую выжимку моей предыдущей статьи о настройке Continuous Integration, но "как чеклист и для C#". Заодно добавил несколько альтернатив Travis-у.


Чтение займет не больше 3 минут, кому интересно — прошу под кат.


Установите .NET Core SDK. Создайте новый репозиторий и проект.


dotnet new sln --name CIDemo
dotnet new web --name web
dotnet sln CIDemo.sln add web/web.csproj

Добавьте .travis.yml файл в корневую папку проекта.


language: csharp

dotnet: 2.1.4
sudo: false

env:
    global:
        - DOTNET_CLI_TELEMETRY_OPTOUT: 1

script:
    - dotnet build CIDemo.sln -c Release

.travis.yml — служебный файл Travis, содержит настройки окружения, переменные и команды. Документация тут

Залогиньтесь в Travis и дайте ему доступ к вашему репозиторию. Залейте изменения на сервер.


Удачный билд:
Travis ok image


А у меня локально все работает Не удачный билд:
Travis failed image


Добавьте тестовый проект


dotnet new xunit --name test
dotnet add test/test.csproj package coverlet.msbuild -v 1.2.0
dotnet sln CIDemo.sln add test/test.csproj

xunit — фреймоврк для тестирования, а coverlet.msbuild — инструмент для создания отчетов покрытия кода

Добавьте какой-то класс и напишите для него какой-нибудь тест.


Например:

```c#
using System;


namespace web
{
public class IdProvider
{
public Guid NewId()
{
return Guid.NewGuid();
}
}
}


```c#
using web;
using Xunit;

namespace test
{
    public class IdProviderTest
    {
        [Fact]
        public void NewIdShouldReturnUniqueValues()
        {
            var idProvider = new IdProvider();
            var id1 = idProvider.NewId();
            var id2 = idProvider.NewId();

            Assert.NotEqual(id1, id2);
        }
    }
}

Добавьте в script секцию команду для запуска тестов


 - dotnet test -c Release --no-build test/test.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

Минимальный уровень покрытия кода задается с помощью флага /p:Threshold=TRESHOLD_LVL

Добавьте в .travis.yml новую секцию


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

Команда отправляет результаты тестов на codecov. Документация тут.

Залогиньтесь в https://codecov.io и дайте ему доступ к вашему репозиторию.


Результат работы codecov:
Codecov report image


Все, CI настроен.


Финальная версия .travis.yml


language: csharp

dotnet: 2.1.4
sudo: false

env:
    global:
        - DOTNET_CLI_TELEMETRY_OPTOUT: 1

script:
    - dotnet build CIDemo.sln -c Release
    - dotnet test -c Release --no-build test/test.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

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

Аналоги Travis


  • Codeship (Бесплатно для OpenSource)
  • Circleci (Бесплатно 1,500 минут билда — +- 300 билдов если что)
  • Buddy (Бесплатно 120 билдов но для OpenSource обещают повышать если написать в техподдержку)
  • AppVeyor — бесплатен для OpenSource — спасибо pankraty за наводку.

Вместо Codecov для работы с тестами можно использовать https://coveralls.io/. Тоже бесплатен для Open Source проектов.


Полезные ссылки



Если вы знаете другие альтернативные и бесплатные решения для CI — пишите, добавлю в статью.


Всем спасибо. Надеюсь получилось коротко и по сути.

Комментарии (6)


  1. pankraty
    23.05.2018 21:39

    Спасибо за статью.
    У нас используется AppVeyor — бесплатен для OpenSource. Довольно гибко настраивается, есть веб-морда для настройки. С другими системами не сравнивал, поэтому, к сожалению, плюсы-минусы обозначить не могу.


    1. Drag13 Автор
      24.05.2018 09:25

      Добавлю, спасибо!


  1. TimeCoder
    24.05.2018 09:01

    Подскажите, а как в Azure настроить? Ну, это уже не бесплатеый вариант, понятно. Пока ещё есть подписка BizSpark — хотел бы воспользоваться.


    1. Drag13 Автор
      24.05.2018 09:32

      С Azure все очень просто особенно если у вас просто .NET проект. Если вы уже настроили свой сайт (Web Site) найдите вкладку deployments и просто дайте доступ к своему репозиторию и нужной ветке (например master) Дальше оно все само.
      Если нужно что то посложнее — посмотрите тут
      Но, если что, там тоже не сложно, просто cmd скрипт


  1. danzalux
    24.05.2018 09:25

    Я могу ошибаться, но GitLab ведь тоже похож?
    В новых версиях добавили CI и деплой средствами самого ГитЛаба.
    А Дженкинс?


    1. Drag13 Автор
      24.05.2018 09:27

      За GitLab не скажу, к своему стыду еще не пробывал.
      А вот с Jenkins разница принципиальная. Jenkins требует своего сервера (что в перспективе может и плюс), а вот вся братия Travis и Co уже развернуты и вам не нужны свои мощности.