Мій перший 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, перш ніж став зеленим?