Start Debugging

ModularPipelines V3: пишите CI-пайплайны на C#, отлаживайте локально и перестаньте нянчить YAML

ModularPipelines V3 позволяет писать CI-пайплайны на C# вместо YAML. Запускайте их локально через dotnet run, получайте безопасность времени компиляции и отлаживайте с точками останова.

На этой неделе мне снова напомнили, что CI не обязан быть слепым циклом push-and-pray: ModularPipelines V3 активно выпускается (последний тег v3.0.86 был опубликован 2026-01-18), и он опирается на простую идею: ваш пайплайн - это просто .NET-приложение.

Источник: ModularPipelines repo и релиз v3.0.86.

Часть, которая меняет ваш цикл обратной связи

Если вы выпускаете сервисы на .NET 10, шаги вашего пайплайна уже имеют “форму кода”: сборка, тесты, публикация, упаковка, сканирование, развёртывание. Проблема обычно в обёртке: YAML, переменные с типизацией через строки и 5-10-минутный цикл обратной связи только ради опечаток.

ModularPipelines переворачивает это:

Вот основной вид прямо из README проекта, очищенный до минимального примера, который можно вставить:

// Program.cs
await PipelineHostBuilder.Create()
    .AddModule<BuildModule>()
    .AddModule<TestModule>()
    .AddModule<PublishModule>()
    .ExecutePipelineAsync();

public class BuildModule : Module<CommandResult>
{
    protected override Task<CommandResult?> ExecuteAsync(IPipelineContext context, CancellationToken ct) =>
        context.DotNet().Build(new DotNetBuildOptions
        {
            Project = "MySolution.sln",
            Configuration = Configuration.Release
        }, ct);
}

[DependsOn<BuildModule>]
public class TestModule : Module<CommandResult>
{
    protected override Task<CommandResult?> ExecuteAsync(IPipelineContext context, CancellationToken ct) =>
        context.DotNet().Test(new DotNetTestOptions
        {
            Project = "MySolution.sln",
            Configuration = Configuration.Release
        }, ct);
}

Это скучно в самом хорошем смысле: это обычный C#. Точки останова работают. Ваша IDE помогает. “Переименовать модуль” - это не страшный глобальный поиск.

Обёртки инструментов, идущие в ногу с экосистемой

Релиз v3.0.86 намеренно “маленький”: он обновляет опции CLI для таких инструментов, как pnpm, grype и vault. Это именно тот тип сопровождения, который вы хотите переложить на фреймворк пайплайнов. Когда CLI добавляет или меняет флаг, вы хотите, чтобы двигалась типизированная обёртка, а не гнили десятки YAML-фрагментов.

Почему мне нравится модульная модель для реальных репозиториев

В крупных кодовых базах скрытая цена YAML - не синтаксис. Это управление изменениями:

Если вы уже живёте в .NET 9 или .NET 10, относиться к пайплайну как к небольшому C#-приложению - это не “переинженерия”. Это более короткий цикл обратной связи и меньше сюрпризов в продакшене.

Если хотите углубиться, начните с “Quick Start” и документации проекта: Full Documentation.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад