Ответ
Да, опыт создания 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, чтобы код-квалити проверял, а он потом такие вещи напишет, что сам от себя охуеешь — мол, тут у тебя запах кода, а тут потенциальная уязвимость. В общем, не просто скрипт написал, а целое хозяйство развернул, чтобы всё само бегало, как швейцарские часы. Ну, или почти само.