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

如何自动将Jenkins作业制品复制到指定网络驱动器?是否有插件或脚本方案?

把Jenkins制品/脚本文件自动同步到本地网络目录的实操方案

我来给你整理几种实用的方案,帮你轻松把Jenkins生成的制品和脚本输出文件自动同步到本地网络指定目录——不管你偏好插件的便捷还是脚本的灵活,都能找到合适的方法:

方法一:用Jenkins插件实现(省心首选)

插件的好处是不用自己写太多代码,图形化配置就能搞定,适合大多数常规场景。

1. File Operations Plugin(通用文件操作插件)

这个插件支持复制、移动、删除等多种文件操作,适配各种网络目录类型(SMB/NFS/本地挂载目录):

  • 第一步:安装插件:Jenkins后台→「插件管理」→搜索「File Operations」安装并重启Jenkins
  • 自由风格项目配置
    • 进入项目配置页,在「构建后操作」里添加「File Operations」
    • 选择「Copy files」操作,按需设置:
      • 源文件路径:比如**/*.jar(匹配你的制品文件)或scripts/output/*.txt(脚本生成的文件),支持通配符
      • 目标路径:如果是Windows共享,填//192.168.1.100/shared-folder/;如果是挂载到Jenkins服务器的NFS目录,直接写/mnt/network-share/
      • 可选勾选「Overwrite existing files」覆盖旧文件
  • 流水线项目示例
stage('同步到网络目录') {
    steps {
        fileOperations([
            copyFileOperation(
                includes: '**/*.war, scripts/logs/*.log',
                targetLocation: '//192.168.1.50/jenkins-builds/'
            )
        ])
    }
}

2. Publish Over SMB Plugin(针对Windows共享优化)

如果你的目标目录是Windows的SMB共享文件夹,这个插件专门做这个场景,配置更细致:

  • 第一步:全局配置SMB服务器:Jenkins后台→「系统管理」→「系统配置」→找到「Publish over SMB」,添加你的SMB服务器信息(IP/域名、共享名、登录账号密码,若需要验证)
  • 项目配置
    • 在「构建后操作」添加「Publish files over SMB」
    • 选择刚才配置的SMB服务器,设置:
      • 源文件:比如target/*.jar
      • 远程目录:可以用Jenkins变量区分构建版本,比如/builds/${BUILD_NUMBER}
      • 可选勾选「Delete remote files before transfer」清理旧文件

方法二:用脚本实现(灵活可控)

要是你需要自定义复制逻辑(比如加校验、分批次复制),直接用Shell或PowerShell脚本会更灵活,分两种环境给你示例:

1. Linux Jenkins服务器→NFS/SMB共享

针对NFS共享:

先把网络共享挂载到Jenkins服务器(建议配置开机自动挂载,避免重启后失效):

# 临时挂载(重启后失效,用于测试)
mount -t nfs 192.168.1.100:/shared /mnt/network-share

# 永久挂载,编辑/etc/fstab添加一行
echo "192.168.1.100:/shared /mnt/network-share nfs defaults 0 0" >> /etc/fstab

然后在Jenkins的「构建步骤」里添加Shell命令复制:

# 复制制品到网络目录的指定版本文件夹
mkdir -p /mnt/network-share/builds/${BUILD_NUMBER}
cp -r target/*.jar /mnt/network-share/builds/${BUILD_NUMBER}/

# 复制脚本生成的日志文件
cp scripts/output/*.log /mnt/network-share/logs/

# 校验复制是否成功,失败则终止构建
if [ $? -ne 0 ]; then
    echo "文件复制失败,终止构建"
    exit 1
fi

针对SMB共享:

smbclient命令直接操作(需要先在Jenkins服务器安装smbclient):

# 复制单个文件
smbclient //192.168.1.100/shared -U username%password -c "put target/*.jar /builds/${BUILD_NUMBER}/"

# 批量复制目录
smbclient //192.168.1.100/shared -U username%password -c "recurse on; cd /logs/; lcd scripts/output/; mput *"

2. Windows Jenkins服务器→SMB共享

用PowerShell脚本适配Windows环境,直接在Jenkins的「构建步骤」里添加PowerShell命令:

# 创建对应构建版本的目录
$targetDir = "\\192.168.1.50\jenkins-artifacts\$env:BUILD_NUMBER"
New-Item -Path $targetDir -ItemType Directory -Force | Out-Null

# 复制制品和脚本文件
Copy-Item -Path "target\*.war" -Destination $targetDir -Recurse -Force
Copy-Item -Path "scripts\output\*.log" -Destination "\\192.168.1.50\jenkins-artifacts\logs" -Force

# 校验复制结果
if (-not $?) {
    Write-Error "文件复制失败,终止构建"
    exit 1
}

关键注意事项

  • 权限问题:Jenkins运行的用户(Linux的jenkins用户、Windows的「Local System」账户)必须拥有目标网络目录的读写权限,否则会复制失败,建议先手动在Jenkins服务器上测试复制命令验证权限
  • 版本区分:建议用Jenkins内置变量(比如${BUILD_NUMBER}${JOB_NAME})给每个构建的制品创建独立目录,避免覆盖旧文件
  • 失败通知:不管用插件还是脚本,最好添加构建失败后的通知(比如邮件、Slack),及时发现问题
  • 测试先行:先手动在Jenkins服务器上执行复制命令,确保能正常访问目标目录后,再配置到Jenkins项目里

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

火山引擎 最新活动