You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Jenkins基于参数在远程服务器执行Shell部署脚本?

Jenkins跨服务器War包部署方案详解

根据你描述的架构,我来拆解这套部署流程的核心逻辑、配置步骤以及优化建议:

整体架构说明

  • 服务器A:作为Jenkins主节点,存放3个核心脚本:
    • JenkinsMainScript.sh:主调度脚本,负责接收Jenkins传递的目标服务器参数,完成对应部署脚本的分发
    • serverB.sh:专门用于服务器B的War包部署脚本
    • serverC.sh:专门用于服务器C的War包部署脚本
  • 服务器B/C:部署目标节点,接收从A复制过来的部署脚本,执行War包部署操作

Jenkins任务配置步骤

在Jenkins任务的「执行Shell」环节,你需要通过带参数的命令调用主脚本,示例命令如下:

/root/Pictures/JenkinsTesting/JenkinsBuildMain.sh B

这里的B就是目标服务器的标识,主脚本会根据这个参数匹配对应的serverB.sh脚本并处理

主脚本核心实现示例

为了让主脚本能正确识别参数并完成脚本复制,你可以参考以下逻辑编写JenkinsMainScript.sh:

#!/bin/bash
# 接收Jenkins传递的目标服务器参数
TARGET=$1

# 定义本地脚本存放的根路径
LOCAL_SCRIPT_PATH="/root/Pictures/JenkinsTesting"

# 根据参数匹配对应的部署脚本和目标服务器地址
case $TARGET in
    B)
        DEPLOY_SCRIPT="serverB.sh"
        REMOTE_HOST="服务器B的IP或主机名"
        ;;
    C)
        DEPLOY_SCRIPT="serverC.sh"
        REMOTE_HOST="服务器C的IP或主机名"
        ;;
    *)
        echo "错误:无效的目标服务器参数,请传入B或C"
        exit 1
        ;;
esac

# 使用scp将部署脚本复制到目标服务器的临时目录
# 前提:服务器A已与目标服务器配置SSH免密登录
scp "${LOCAL_SCRIPT_PATH}/${DEPLOY_SCRIPT}" root@${REMOTE_HOST}:/tmp/

# 可选:如果需要直接触发目标服务器的部署操作,可添加以下命令
# ssh root@${REMOTE_HOST} "chmod +x /tmp/${DEPLOY_SCRIPT} && /tmp/${DEPLOY_SCRIPT}"

✅ 关键注意事项:一定要确保服务器A和B/C之间配置了SSH免密登录,否则scp或ssh命令会弹出密码输入框,导致Jenkins任务阻塞失败

实用优化建议

  • 给所有脚本添加可执行权限:执行chmod +x JenkinsMainScript.sh serverB.sh serverC.sh确保脚本能正常运行
  • 改用Jenkins参数化构建:添加一个选择参数(选项为B、C),让用户触发构建时自主选择目标服务器,避免硬编码参数的局限性
  • 增加日志输出:在主脚本中添加echo语句记录关键步骤,方便Jenkins任务执行后排查问题
  • 清理临时文件:在目标服务器的部署脚本执行完成后,添加rm /tmp/${DEPLOY_SCRIPT}命令清理临时脚本,避免冗余文件堆积

内容的提问来源于stack exchange,提问作者prasanta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:04