You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Jenkins流水线中结合g_VersionNum使用sshPublisher参数?

我来帮你拆解一下这段Jenkins流水线里sshPublisher组件的参数用法,结合你定义的g_VersionNum变量,咱们逐个理清楚:

Jenkins流水线中sshPublisher组件参数详解(结合g_VersionNum变量)

首先先把你这段代码补全并格式化,方便理解整体结构:

sshPublisher(publishers: [
    sshPublisherDesc(
        configName: "VersionServer",
        transfers: [
            sshTransfer(
                excludes: "",
                execCommand: "pwd;echo \${g_VersionNum}",
                execTimeout: 120000,
                flatten: false,
                makeEmptyDirs: false,
                noDefaultExcludes: false,
                patternSeparator: "[, ]+",
                remoteDirectory: "alpha/${g_VersionNum}",
                remoteDirectorySDF: false,
                removePrefix: "target",
                sourceFiles: "target/abc-${g_VersionNum}.tar.gz"
            )
        ],
        usePromotionTimestamp: false,
        useWorkspaceInPromotion: false,
        verbose: false
    )
])

接下来逐个解释关键参数,结合你的版本管理场景:

核心参数说明

1. sshPublisherDesc 顶层配置

  • configName: 指定你在Jenkins全局配置中提前创建好的SSH服务器配置名称(这里是"VersionServer"),流水线会依赖这个配置完成远程服务器的连接认证。
  • usePromotionTimestamp/useWorkspaceInPromotion: 这俩是和Jenkins晋升(Promotion)功能绑定的参数,如果你不用晋升流程,直接设为false就行。
  • verbose: 是否输出SSH操作的详细日志,调试阶段可以开成true,生产环境建议关闭来减少日志冗余。

2. sshTransfer 文件传输&远程执行配置

这部分是整个组件的核心,负责文件上传和远程命令执行:

  • sourceFiles: 要上传的本地文件路径,你写的target/abc-${g_VersionNum}.tar.gz会根据g_VersionNum变量动态匹配对应版本的压缩包,这个写法完全符合版本化发布的需求。
  • removePrefix: 上传时要剔除的本地路径前缀,你设为"target",意味着远程服务器上只会保留abc-${g_VersionNum}.tar.gz,而不是带target前缀的完整路径。
  • remoteDirectory: 文件上传到远程服务器的目标目录,alpha/${g_VersionNum}会自动为每个版本创建独立的子目录,很适合做版本归档管理。
  • remoteDirectorySDF: 是否把目标目录当成系统环境变量解析,你用的是流水线自定义变量,所以设为false就对了。
  • execCommand: 上传完成后在远程服务器执行的命令,这里的\${g_VersionNum}(你原来的$${g_VersionNum}写法也生效)是Groovy的转义写法,确保Jenkins把变量解析后再传递给远程服务器执行,这样就能在远程输出当前路径和对应版本号。
  • execTimeout: 远程命令的超时时间,你设的120000毫秒等于2分钟,如果你的命令需要更长执行时间,可以按需调大。
  • flatten: 是否忽略本地目录结构,把所有上传文件放到远程同一目录下,你设为false会保留相对路径(不过你这里只有单个文件,影响不大)。
  • makeEmptyDirs: 是否自动创建空目录,这里不需要,设为false即可。
  • noDefaultExcludes: 是否禁用Jenkins默认的文件排除规则(比如.gitignore里的文件),设为false会遵循默认规则,避免上传不必要的文件。
  • patternSeparator: 多个上传文件路径之间的分隔符,默认支持逗号或空格,如果你要传多个文件,用这个分隔符分开就行。

额外注意事项

  • 确保Jenkins已经安装了SSH插件,并且VersionServer这个SSH配置已经正确填写了服务器地址、认证方式(密码或密钥)。
  • 要保证g_VersionNum变量在sshPublisher执行前已经被正确赋值,不然会出现路径或命令里的空值问题。
  • 如果远程命令需要sudo权限,要在execCommand里加上sudo,同时确保Jenkins的SSH用户有免密sudo权限(不建议在命令里明文写密码)。

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

火山引擎 最新活动