Ответ
Да, постоянно использую Bash-скрипты в Jenkins для автоматизации этапов сборки, тестирования и деплоя. Работаю как с Declarative, так и с Scripted Pipeline.
Основные практики и примеры:
- Встраивание в
shsteps: Для коротких операций скрипт пишется прямо в пайплайне. - Вынос в отдельные файлы: Для сложной логики создаю отдельные
.shфайлы в репозитории и вызываю их. Это улучшает читаемость и позволяет переиспользовать код.
Пример Declarative Pipeline с встроенным Bash:
pipeline {
agent any
environment {
ARTIFACT_NAME = "app-${env.BUILD_ID}.tar.gz"
}
stages {
stage('Build & Test') {
steps {
sh '''
#!/bin/bash
set -xeo pipefail # Включаем строгий режим: трассировка, выход при ошибке, ошибки в пайпах
echo "Building artifact: $ARTIFACT_NAME"
./build.sh --output "$ARTIFACT_NAME"
# Проверка существования артефакта
if [[ ! -f "$ARTIFACT_NAME" ]]; then
echo "ERROR: Artifact not created!"
exit 1
fi
# Пример обработки JSON (например, из конфига)
VERSION=$(jq -r '.version' package.json)
echo "Project version is: $VERSION"
'''
}
}
stage('Deploy to Staging') {
steps {
sh './deploy.sh staging' # Вызов внешнего скрипта
}
}
}
}
Ключевые моменты: Всегда проверяю коды возврата команд, использую set -e для немедленного выхода при ошибке, активно применяю jq и yq для работы с конфигурационными файлами, а переменные Jenkins передаю в скрипт через окружение.