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

GitLab CI多部署作业共享WAR制品失败,如何排查解决?

GitLab CI流水线部署问题排查与修复

问题根源

你的deploy-dev-2作业找不到WAR文件,核心原因是依赖配置错误:

  • 你给deploy-dev-2的needs指向了deploy-dev-1,但deploy-dev-1并没有生成或上传任何artifacts——它只是把文件复制到远程服务器,CI作业本身没有保留WAR文件的副本。
  • WAR文件是由build-dev作业生成并上传为artifacts的,所有需要使用这个文件的部署作业,都应该直接依赖build-dev的artifacts,而不是前一个部署作业。

修复后的配置

stages:
  - build
  - deploy

build-dev:
  stage: build
  tags:
    - development
  artifacts:
      paths:
        - target/myapp-$VERSION.war
  script:
    - mvn clean package -Dbuild_version=$VERSION -Ddb_pwd=$db_pwd_$PROFILE -Demail_key=$email_key_$PROFILE -Dmodo_api_token=$modo_api_token_$PROFILE -Dmodo_auth_shared=$modo_auth_shared_$PROFILE
  when: manual
  allow_failure: false

deploy-dev-1:
  stage: deploy
  tags:
    - development
  script:
    - scp -i ~/.ssh/${KEY_NAME} -P $NODE1 target/myapp-$VERSION.war ${mcUser}@$HOST:/var/lib/tomcat9/webapps/myapp.war
  variables:
    NODE1: "99008"
    HOST: "myserver-$PROFILE"

deploy-dev-2:
  stage: deploy
  tags:
    - development
  # 直接依赖build-dev获取WAR文件artifacts
  needs:
    - job: build-dev
      artifacts: true
    # 若需要确保deploy-dev-1执行完成后再跑deploy-dev-2,添加下面这行
    # - job: deploy-dev-1
  script:
    - scp -i ~/.ssh/${KEY_NAME} -P $NODE1 target/myapp-$VERSION.war ${mcUser}@$HOST:/var/lib/tomcat9/webapps/myapp.war
  variables:
    NODE1: "99009"
    HOST: "myserver-$PROFILE"

关键修改说明

  1. 修正依赖源:把deploy-dev-2的needs指向build-dev,这样作业会自动下载build阶段生成的WAR文件artifacts,解决文件找不到的问题。
  2. 可选的顺序控制:如果必须让deploy-dev-1执行成功后才运行deploy-dev-2,只需要在needs里额外添加- job: deploy-dev-1即可——不需要加artifacts: true,因为这里只是等待前一个部署作业完成,不需要它的artifacts。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:43:34