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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:27:23