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"
关键修改说明
- 修正依赖源:把
deploy-dev-2的needs指向build-dev,这样作业会自动下载build阶段生成的WAR文件artifacts,解决文件找不到的问题。 - 可选的顺序控制:如果必须让
deploy-dev-1执行成功后才运行deploy-dev-2,只需要在needs里额外添加- job: deploy-dev-1即可——不需要加artifacts: true,因为这里只是等待前一个部署作业完成,不需要它的artifacts。
内容的提问来源于stack exchange,提问作者pbuchheit
相关产品推荐
相关产品推荐

