Jenkins自动化流水线可可靠执行数据库定时备份,关键在于将备份封装为独立、可监控的Pipeline步骤:定义backup-database阶段,用sh调用mysqldump/pg_dump并捕获错误,通过Credentials Binding安全注入凭证,配合cron触发、archiveArtifacts归档、旧文件清理及完整性校验与告警机制。
Jenkins 自动化流水线可以可靠地执行数据库定时备份,关键在于把备份操作封装为可重复、可监控、可追溯的 Pipeline 步骤,而不是简单调用脚本。
在 Jenkinsfile 的 stages 中定义明确的 backup-database 阶段,避免把备份逻辑混在构建或部署里。使用 sh 步骤调用数据库导出命令,并通过 returnStdout: true 或 catchError 捕获失败:
sh 'mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > /backup/${BUILD_ID}_${BUILD_TIMESTAMP}.sql'
sh 'pg_dump -h $DB_HOST -U $DB_USER -d $DB_NAME -f /backup/${BUILD_ID}_$(date +%Y%m%d_%H%M%S).sql'
mysqladmin ping 或 pg_isready),失败则中止流程archiveArtifacts 保存生成的 SQL 文件,便于归档与回溯禁止在 Jenkinsfile 或 Shell 脚本中硬编码密码。优先使用 Jenkins Credentials Binding 插件注入敏感信息:
Username with password 类型条目(ID 如 db-credentials)withCredentials([usernamePassword(credentialsId: 'db-credentials', usernameVariable: 'DB_USER', passwordVariable: 'DB_PASS')]) 包裹备份步骤备份任务必须按需调度,并控制存储膨胀:
triggers { cron('0 2 * * *') } 实现每日凌晨 2 点执行(时区以 Jenkins 主节点为准)sh 中加入 find /backup -name "*.sql" -mtime +7 -delete 删除超过 7 天的备份gzip 再 scp 或 aws s3 cp 到远程存储,避免占用 Jenkins 主机磁盘仅生成文件不等于备份成功,需验证完整性并及时告警:
test -s file.sql)、包含 CREATE TABLE 关键字(grep -q "CREATE TABLE" file.sql)emailext 或企业微信/钉钉 Webhook 发送通知,附上日志片段和构建 URLmysql ... 并查表行数,作为周期性健康检查