Мой первый Jenkins pipeline упал 17 раз, прежде чем наконец стал зелёным. Не два. Не пять. Семнадцать красных кружков подряд, за один вечер. Если ты прямо сейчас учишь DevOps и твой первый pipeline упал так же — хочу сказать тебе то, чего мне никто не сказал: этот крутящийся красный кружок не доказывает, что ты бездарь. Это и есть программа обучения. Весь курс целиком — и единственная его версия, которая у меня реально уложилась в голове.

Вот как это было и чему меня научили те семнадцать падений — тому, чему не научит ни один сертификат.

Схема, которая на бумаге выглядела проще некуда

План был почти оскорбительно простым. Jenkins в Docker-контейнере. Jenkinsfile в репозитории. Build agent, чтобы всё это запускать. Пушишь код, смотришь, как он собирается, забираешь артефакт. Вся ментальная модель на этом и заканчивалась.

Jenkins я поставил, написал вроде бы валидный Jenkinsfile и при этом абсолютно не понимал, что происходит под капотом. Ровно в таком состоянии стартует большинство — и ровно это состояние туториалы деликатно пропускают.

Семнадцать способов ошибиться

Падения были на любой вкус. Не одна причина, повторённая семнадцать раз, — семнадцать по-настоящему разных ошибок, одна за другой:

  • Не тот Docker-образ. Нужных build-инструментов в нём просто не было. В голове зелено, на экране красно.
  • Переменная окружения, которая так и не доехала до контейнера. Приложение не упало с громкой ошибкой — оно тихо умерло, а это хуже.
  • Permission denied на build agent. Классика. С кодом всё в порядке, проблема в том, кому разрешено его запускать.
  • Слишком большой build context, потому что я забыл .dockerignore и отправил в сборку пол своей машины.
  • Синтаксис Jenkinsfile, который выглядел абсолютно правильным — ровно до момента, пока Jenkins в своей прямолинейной манере не объяснил, что нет.

Все ошибки, которые может совершить новичок, я совершил за одну сессию. Подряд.

Перелом случился на 12-м падении

Где-то на двенадцатом красном кружке что-то поменялось. Я перестал просто вставлять текст ошибки в гугл и надеяться. Открыл блокнот и начал записывать каждое падение: ошибку, рабочее решение и то, что проверю первым в следующий раз.

Эта маленькая привычка изменила всё. К пятнадцатому падению я уже не реагировал — я предугадывал. Я читал Jenkinsfile и видел проблему ещё до того, как нажать build. Ошибки перестали быть случайным шумом и стали языком, который я научился читать.

Build 18 стал зелёным

И вот оно. Пуш кода, pipeline отрабатывает, артефакт собирается сам — зелёный кружок. Я смотрел на него целую минуту, почти ожидая, что он вот-вот снова покраснеет.

Не покраснел. И за эту минуту у меня в голове что-то перепаялось в понимании того, как вообще доставляется софт. Больше никаких «у меня на машине работает». Теперь решает машина. Ты пушишь, pipeline судит, и суд для всех одинаковый. Это не бюрократия — это свобода от целого класса споров.

Дело было вообще не в инструменте

Спустя десять лет я строил pipeline в GitLab, GitHub Actions и в куче штук, которые к Jenkins не имели никакого отношения. И честная правда в том, что инструмент почти не важен. Важен образ мышления, и он — суть всего:

  • Автоматизируй всё, что человек иначе сделает руками и обязательно запорет в шесть вечера в пятницу.
  • Доверяй pipeline. Зелёный — значит едет в прод. Красный — не споришь с ним, а чинишь причину.
  • Отдай машине скучную работу, чтобы голова осталась свободной для задач, где реально нужен человек.

Семнадцать падений научили меня этому лучше любого курса, потому что они не давали шагов для повторения. Они научили думать. Курс выдаёт готовый рабочий ответ. Семнадцать красных кружков выдают инстинкт отладки — а этот инстинкт и есть настоящая работа.

Твой первый pipeline упадёт. Пусть падает.

Расстояние между «я вообще не понимаю, что делаю» и «я это собрал, и оно работает» оказалось равно ровно семнадцати падениям и упрямому нежеланию закрыть ноутбук.

У каждого сеньора, на которого ты смотришь снизу вверх, за спиной кладбище упавших сборок. У каждого. Просто они об этом не говорят, и со стороны кажется, будто они всегда всё знали. Не знали. Они просто продолжали пушить сквозь красное.

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

Сколько раз упал твой первый pipeline, прежде чем стал зелёным?