Как Приготовить Торт, Используя Только Глазурь

Так, Торт .

Многие слышали, многие хотели попробовать, но откладывали.

Конечно, если вы все время работаете TeamCity или в Дженкинс а вы продолжаете, то зачем изобретать то, что и так отлично работает? Любите свою жизнь и будьте счастливы.

Но допустим, в вашей любимой жизни появился новый проект, новый дедлайн, минимум сюжетных очков до релиза, а опыта работы с новым строителем у вас нет? В данном случае мне пригодилось Торт .

Сразу оговорюсь, что данная статья не будет сразу побуждать вас к использованию Торт , как и меня, и многих моих коллег, не вдохновили опубликованные ранее статьи.

В основном потому, что нет смысла переходить на него в проекте, который не причиняет боли и работает стабильно.

Собери в свой любимый Дженкинс и все идет нормально.

Но после этой статьи пусть в вашей голове запомнится, что Торт существует. Повторюсь, он никуда не делся, он уже многое может и с ним становится легче работать.

Гораздо проще, чем было раньше.

Какой торт? Наверное любой разработчик, не погрязший в мире .

Сеть , найдёт ему аналогию: gradle, gulp, golang make .

Сделать системы – не открытие в 2020 году.

Это всегда было удобно, а значит, нужно и правильно.

Мир .

Сеть долгое время был лишен таких средств.

На самом деле так было и есть MSBuild , но у него много, много недостатков.

Главный из них — кто среди рядовых разработчиков вообще умеет этим пользоваться? И какова целесообразность его разработки? Очевидно, что на сервере сборки проще делать некоторые базовые вещи, которые нужны всем.

Возможно, для кого-то это удобно, но я уверен, что значительная часть сообщества предпочтет MSBuild Я изучаю новый сервер сборки.

Напишите конфиг один раз и забудьте его как страшный сон.

Что, если бы существовала система make с DSL на C#, автозаполнением и другими возможностями типизированного языка? Да, я говорю о Торт .

В частности, сейчас речь пойдет о библиотеке Торт.Глазурь , который является одним из бегунов make-системы.

Подробнее о доступных бегунах можно прочитать здесь: Торт-бегуны С Иней все знакомо — самодокументируемый API, с которым почти сразу находишь общий язык.

Методы расширения, загруженные из Нугет - на любой случай структура проекта, похожая на смесь тестов или бенчмарков и хоста Асп .

Все решения угадываются сразу, все как дома.

Иней от других бегунов Торт отличается тем, что существует не как инструмент, а как отдельный проект, который можно добавить в решение и хранить вместе с ним в репозитории.

Это делает работу с системой невероятно простой.

По сути, вам просто нужно создать новый проект и прикрепить к нему зависимость.

Торт.Глазурь , настройте хост сборки, и вы сможете запустить этот проект с помощью команды.

  
  
   

dotnet run

Чтобы нам было еще проще, есть шаблон проекта.

Он даже поставляется со сценариями оболочки для Мак Операционные системы , Линукс И Окна , загрузка SDK, если его нет в среде.

Вместо этого стоит вызвать сборку через них интерфейс командной строки дотнет , если необходимо.

Вы можете прочитать больше об этом здесь: Замораживание начальной загрузки После создания проекта можно приступить к настройке процесса сборки.

Из основных мест нашего кода сразу уделяем внимание прогреву и очистке системы перед сборкой — это соответствующие методы класса.

Продолжительность жизни : Настраивать И Срывать .

У них принято чистить артефакты до и после сборки.



Как приготовить торт, используя только глазурь

Вторая часть проекта, которая нас интересует, это папка Задания .

Все этапы сборки хранятся здесь в виде классов, являющихся потомками ЗаморозкаЗадача .



Как приготовить торт, используя только глазурь

Задачи автоматически регистрируются в IoC-контейнере, как мы привыкли в Асп .

Более того, Иней реализует точно такой же шаблон с DI через IServiceCollection , к которому мы все привыкли.



Как приготовить торт, используя только глазурь

Порядок выполнения шагов сборки определяется их зависимостями.

Анализ зависимостей начинается с корня графа, это задача по умолчанию.

По умолчанию .

Чтобы уведомить систему о том, что эта задача зависит от другой, можно установить атрибут

[Dependency(typeof(MyPreviousTask))]

Где МояПредыдущаяЗадача — это задача, которую необходимо выполнить, отмеченную ранее.

Список задач может быть любым, в том числе и обычным:

  1. Восстановление пакета.

  2. Строить.

  3. Запуск модульных тестов.

  4. Публиковать.

  5. Поставка артефактов.

Для поставки артефактов мы можем сделать как обычное архивирование и отправку в среду выполнения приложения, так и упаковать приложение в образ.

докер Короче говоря, все, что мы можем написать на C#.

Как уже говорилось выше, на данный момент существует множество пакетов с расширениями контекста выполнения, которые благодаря им понимают многие команды сборки.

Копирование файлов, удаление, журналирование и т. д. Единственный минус такого похода – захламленность.

IntelliSense windows с чудовищным количеством методов, но когда это нас останавливало? По этому поводу хотелось бы напомнить об относительно недавней особенности.

Чистое ядро автономный Приложения.

В этом методе публикации необходимо явно указать рантайм-версию, в результате чего формируется не исполняющаяся в контексте библиотека.

дотнет , а запускаемое приложение, содержащее рантайм, находится, так сказать, «само по себе».

Это может быть полезно при упаковке в образ без установленной среды выполнения, если последняя по каким-то причинам не может быть установлена.

Нет причин не делать этого в Торт .

Когда все готово, настроено и загружено в репозиторий, делаем Т.

С.

или Дженкинс всего одна команда

dotnet run .

/Build/Build.csproj

У вас будет свой путь к проекту (Ваша Кепка) и вы будете наблюдать, как происходит процесс медитативной сборки.

Иней записывает события сборки в стандартный вывод, который считывается сервером сборки, чтобы данные не были потеряны.

Конечно, это минимальный и самый простой сценарий использования системы.

Сервер сборки может отправлять дотнет аргументы при вызове сборки Иней .

Например, чтобы потом задать версию сборки или образа или тип среды выполнения или папку назначения — для публикации.

В общем, здесь полный простор для фантазии.

Мотивация

  1. Этот комфортный .

    Вы пишете на своем основном языке и не зависите от выразительности скриптов и настроек/плагинов сервера сборки;

  2. Этот мобильный .

    Вы загружаете код в репозиторий, и он универсально работает на любом сервере сборки.

    И нет блокировки продавца.

  3. Этот версированный .

    Код сборки хранится в репозитории.

    Вместе с самим релизом.

  4. Это позволяет сохранять .

    Если тарифный план билд-сервера не позволяет создавать множество конфигов сборки, вам нужен только тот, который запускает разные проекты.

    Тот же результат без дополнительных затрат.

  5. Этот легко .

    IntelliSense , автополный, разберётся даже ленивый старший.

Проблема может заключаться в отсутствии Торт необходимые интеграции с линтерами, сонарами и т.п.

Этот вопрос необходимо уточнить перед использованием системы.

Или добавьте свои собственные расширения, загрузите их на Нугет и быть очень, очень хорошим человеком.

Бонус — пример использования Торт.Глазурь на github .

Для начала скажите следующее: Связь Ссылка на сайт проекта Торт Теги: #разработка Linux #разработка #DevOps #C++ #.

NET #ci/cd #jenkins #automation #teamcity #ASP #ASP #make #cake #dotnetbook

Вместе с данным постом часто просматривают: