GitLab CI/CD作业执行后工件被清除,多作业流程故障排查
问题诊断与解决
核心问题原因
你的project_analysis_phase_1和project_analysis_phase_2属于同一个阶段,GitLab CI默认会并行运行同一阶段的所有作业。这意味着project_analysis_phase_2可能在project_analysis_phase_1还未完成工件上传时就已启动,自然无法找到my_application/目录。
另外,你在project_analysis_phase_2中仅指定了依赖project_analysis_phase_1,所以build/工件不会被下载(这是预期行为,因为未声明依赖project_build)。
解决方案
方案1:用needs强制串行执行同一阶段的作业
在project_analysis_phase_2中添加needs配置,让GitLab先完成project_analysis_phase_1再启动后续作业,确保工件已生成并可下载:
project_analysis_phase_2: stage: project_analysis tags: - myapp script: - dir # Windows环境建议用dir替代ls,更直观 - cd my_application dependencies: - project_analysis_phase_1 needs: - project_analysis_phase_1
方案2:拆分阶段,利用阶段的串行特性
将project_analysis_phase_2放到一个新的后续阶段,GitLab会自动等待前一阶段所有作业完成后再执行,且默认会下载前序阶段的所有工件(若未指定dependencies):
stages: - project_build - project_analysis - project_analysis_final # 新增阶段 # ... 保留其他作业配置 ... project_analysis_phase_2: stage: project_analysis_final tags: - myapp script: - dir - cd my_application dependencies: - project_analysis_phase_1
额外检查项
- 查看
project_analysis_phase_2的作业日志,确认是否存在Downloading artifacts步骤,验证工件是否被正确下载。 - 确保
project_analysis_phase_1的artifacts路径my_application/是正确的(相对于项目根目录),且作业执行过程中确实生成了该目录下的文件。
内容的提问来源于stack exchange,提问作者Skanda
相关产品推荐
相关产品推荐

