#!/usr/bin/env groovy def call(Map args = [:]) { String distName = args.distName ?: env.DIST_NAME ?: 'dist' String distPath = args.distPath ?: env.DIST_PATH ?: "${env.WORKSPACE}/dist" String remoteHost = args.remoteHost ?: env.REMOTE_HOST ?: error('REMOTE_HOST 未配置') String remotePath = args.remotePath ?: env.REMOTE_PATH ?: error('REMOTE_PATH 未配置') String remoteDist = "${remotePath}/${distName}" String backupName = "${distName}-\$(date +%Y%m%d%H%M)" PrintMes("开始发布 ${distName} 到 ${remoteHost}", 'yellow') try { /* 1. 判断远程是否存在同名目录,存在则备份 */ sh """ ssh -o StrictHostKeyChecking=no ${remoteHost} \ 'if [ -d ${remoteDist} ]; then mv ${remoteDist} ${remotePath}/${backupName} && echo "备份完成:${backupName}" fi' """ /* 2. 上传新包 */ sh """ scp -o StrictHostKeyChecking=no -r ${distPath} ${remoteHost}:${remoteDist} """ /* 3. 刷新服务 */ sh """ ssh -o StrictHostKeyChecking=no ${remoteHost} \ 'chmod -R 755 ${remoteDist} && chown -R www-data:www-data ${remoteDist} && nginx -t && nginx -s reload' """ PrintMes("发布成功 ${distName}", 'green') } catch (Exception e) { PrintMes("发布失败 ${distName} : ${e.message}", 'red') error('deployDist failed') } }