По некоторым просьбам, публикую очень короткую выжимку моей предыдущей статьи о настройке 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 и дайте ему доступ к вашему репозиторию. Залейте изменения на сервер.
Удачный билд:
А у меня локально все работает Не удачный билд:
Добавьте тестовый проект
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:
Все, 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 проектов.
Полезные ссылки
- Travis documentation
- Codecov documentation
- Coverlet documentation
- Очень расширенная версия этой статьи
Если вы знаете другие альтернативные и бесплатные решения для CI — пишите, добавлю в статью.
Всем спасибо. Надеюсь получилось коротко и по сути.
Комментарии (6)
TimeCoder
24.05.2018 09:01Подскажите, а как в Azure настроить? Ну, это уже не бесплатеый вариант, понятно. Пока ещё есть подписка BizSpark — хотел бы воспользоваться.
Drag13 Автор
24.05.2018 09:32С Azure все очень просто особенно если у вас просто .NET проект. Если вы уже настроили свой сайт (Web Site) найдите вкладку deployments и просто дайте доступ к своему репозиторию и нужной ветке (например master) Дальше оно все само.
Если нужно что то посложнее — посмотрите тут
Но, если что, там тоже не сложно, просто cmd скрипт
danzalux
24.05.2018 09:25Я могу ошибаться, но GitLab ведь тоже похож?
В новых версиях добавили CI и деплой средствами самого ГитЛаба.
А Дженкинс?Drag13 Автор
24.05.2018 09:27За GitLab не скажу, к своему стыду еще не пробывал.
А вот с Jenkins разница принципиальная. Jenkins требует своего сервера (что в перспективе может и плюс), а вот вся братия Travis и Co уже развернуты и вам не нужны свои мощности.
pankraty
Спасибо за статью.
У нас используется AppVeyor — бесплатен для OpenSource. Довольно гибко настраивается, есть веб-морда для настройки. С другими системами не сравнивал, поэтому, к сожалению, плюсы-минусы обозначить не могу.
Drag13 Автор
Добавлю, спасибо!