Был ли опыт написания Bash-скриптов в Jenkins

Ответ

Да, опыт есть. Писал скрипты для настройки окружения, запуска тестов и обработки результатов в Jenkins. Часто использовал Groovy для pipeline и Bash для исполнительных шагов.

Пример простого скрипта в Jenkins pipeline:

pipeline {
    agent any
    stages {
        stage('Run tests') {
            steps {
                sh '''
                    #!/bin/bash
                    echo "Setting up environment..."
                    export ENV=test
                    python -m pytest tests/ --junitxml=results.xml
                '''
            }
        }
    }
}

Также работал с параметризованными сборками, обработкой артефактов и интеграцией с другими инструментами через Bash.

Ответ 18+ 🔞

А, ну так ты, значит, в теме, да? Опыт есть — это хорошо, а то тут некоторые такие теоретики, ебушки-воробушки, на собеседовании про Agile рассказывают, а как скрипт написать, чтобы сервак не упал, так у них глаза стекленеют.

Jenkins — это, конечно, ёперный театр иногда. Старый, добрый, местами кривой, но свой. Как та старая «девятка» в гараже: скрипит, дымит, но заводится всегда и дотащит до финиша, хоть и с бензина овердохуища жрёт. Писать для него — это как сварганить запчасть на коленке: нужно и с Groovy разобраться, и в Bash не лажать.

Вот твой пример — классика жанра, прям ностальгия накатила. agent any — это как «ну, где-нибудь запустится, да похуй». Главное, чтобы этап тестов отработал.

pipeline {
    agent any
    stages {
        stage('Run tests') {
            steps {
                sh '''
                    #!/bin/bash
                    echo "Setting up environment..."
                    export ENV=test
                    python -m pytest tests/ --junitxml=results.xml
                '''
            }
        }
    }
}

Смотри, тут вся соль в этом sh блоке. Bash-скрипт внутри. Казалось бы, ерунда. Но если не выставить ENV=test, а какой-нибудь долбоёб в коде на прод-переменные завязался, то все твои тесты на реальную базу пойдут и наебнутся. Доверия ебать ноль ко всему, поэтому экспорты всякие — это святое.

Параметризованные сборки — это вообще отдельная песня. Ты запускаешь билд, а тебе вылазит форма: «Выбери ветку, выбери конфиг». А потом сидишь и подозрение ебать чувствую, что тот скрипт, который ты написал три месяца назад, сейчас, когда Вася из тестирования выберет опцию «Nuke_Database=true», сделает ровно то, что написано. И хорошо, если только в тестовой среде. Так что там всегда надо проверки вставлять, на всякий случай, чтоб не было хиросимы и нигасраки.

Обработка артефактов — это обычно вот это вот: «забери оттуда файл, положи сюда, переименуй, заархивируй». Сначала делаешь это в три команды, потом понимаешь, что половина падает из-за прав доступа, и дописываешь sudo или chmod. А потом смотришь на свой скрипт и думаешь: «Ну и манда с ушами получилась, но работает же».

Интеграция с другими инструментами — это когда ты через curl дергаешь API какого-нибудь Jira или Slack, чтобы отправить уведомление. И главная проблема — поймать тот момент, когда Jenkins тебе говорит «всё ок», а на самом деле curl заглох по таймауту и ничего никуда не ушло. И все сидят и не знают, что билд завершился. Волнение ебать начинается, когда релиз вроде как должен быть, а тишина.

Короче, опыт знатный. Главное в этом деле — терпения ноль ебать не терять, потому что Jenkins он такой: сегодня работает, а завтра после обновления плагина смотрит на тебя пустыми глазами и говорит «не, не, я такое не умею». Приходится искать, какой костыль на этот раз срастётся.