Был ли опыт создания пайплайнов с нуля

Ответ

Да, опыт создания CI/CD пайплайнов с нуля есть. Использовал Jenkins, GitLab CI и GitHub Actions.

Пример Jenkinsfile для сборки и тестов:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
                junit 'target/surefire-reports/*.xml'
            }
        }
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sh 'scp target/app.war user@server:/deploy'
            }
        }
    }
}

Настраивал триггеры, артефакты, уведомления и интеграцию с инструментами (Docker, SonarQube).

Ответ 18+ 🔞

А, про CI/CD? Ну, опыт есть, да, с нуля собирал эту всю движуху. Работал и с этим старичком Jenkins, который как дедушка упрямый — и мощный, а иногда так доверия ебать ноль, что хочется его впендюрить. И с GitLab CI, и с этими новомодными GitHub Actions, которые вроде как попроще, но иногда такая мартышлюшка выходит с их синтаксисом, что волнение ебать.

Вот смотри, простой пример, как на Jenkins это выглядит. Тут вроде всё логично, но пока настроишь этот ёперный театр...

    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
                junit 'target/surefire-reports/*.xml'
            }
        }
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sh 'scp target/app.war user@server:/deploy'
            }
        }
    }
}

Выглядит-то коротко, а под капотом овердохуища работы было. Это ж надо триггеры накрутить, чтобы пайплайн запускался не просто когда в репу что-то прилетело, а ещё и по расписанию, или от конкретного коммита. Потом артефакты эти собирать — чтобы не просто собралось, а ещё и сохранилось куда надо, и версионировалось правильно, а то потом ищешь сборку недельной давности, а её уже съели.

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

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