GitLab CI/CD构建后如何将JAR文件迁移至另一服务器
GitLab CI/CD 实现Windows环境下Java构建产物JAR的部署
我在GitLab中配置了CI/CD,拥有一个Java项目。项目构建完成后,我希望将构建产物中的JAR文件发送至另一服务器。
备注:Git Runner安装在同一服务器上,服务器操作系统为Windows。
原配置存在两个核心问题:一是使用了Linux环境的cp命令,Windows Runner无法识别;二是如果目标是另一台服务器,当前的本地复制逻辑不适用。以下分两种场景给出修正方案:
场景1:部署到同一服务器的其他目录
修正后的.gitlab-ci.yml配置:
image: maven:latest variables: MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode" MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" cache: key: "$CI_COMMIT_REF_NAME" paths: - .m2/repository/ stages: - test - build - deploy test: script: - mvn clean test build: stage: build script: - mvn clean install artifacts: paths: - target/Practice.jar expire_in: 1d # 可选:自动清理旧产物,节省仓库空间 deploy: stage: deploy tags: - windows # 指定用Windows环境的Runner执行该阶段 script: - copy target\Practice.jar "D:\OtherTest\" dependencies: - build # 明确关联build阶段的产物,确保能获取到JAR文件
关键修改说明:
- 将Linux的
cp命令替换为Windows原生的copy命令,路径分隔符使用Windows标准的\ - 添加
tags: - windows,避免误匹配到Linux环境的Runner - 增加
dependencies字段,确保deploy阶段仅拉取build阶段的产物,减少不必要的缓存操作 - 可选的
expire_in配置会自动删除过期的构建产物,避免仓库空间被无效文件占用
场景2:部署到另一台Windows服务器
如果需要将JAR文件发送到其他服务器,可以选用以下两种常用方案:
方案1:通过Robocopy访问共享目录
前提是Git Runner的运行账户有权限访问目标服务器的共享文件夹,修改deploy阶段配置:
deploy: stage: deploy tags: - windows script: - robocopy target "\\目标服务器IP\共享文件夹\" Practice.jar /R:3 /W:5 dependencies: - build
- 把
\\目标服务器IP\共享文件夹替换为实际的目标服务器共享路径 /R:3表示传输失败后重试3次,/W:5表示每次重试间隔5秒,提升传输稳定性
方案2:使用OpenSSH的scp命令传输
如果目标服务器开启了SSH服务,先在Windows Runner上安装OpenSSH并配置免密登录,再使用以下配置:
deploy: stage: deploy tags: - windows script: - scp target\Practice.jar 用户名@目标服务器IP:/目标路径/ dependencies: - build
注意:必须提前配置SSH免密登录,否则CI/CD流程会卡在输入密码环节。
内容的提问来源于stack exchange,提问作者MBanai
相关产品推荐
相关产品推荐

