GitLab CI 能否访问同路径前序作业制品?多依赖行为解析
GitLab CI 多依赖作业同路径制品运行规则
同路径制品的访问权限
只要下游作业通过dependencies字段显式声明了对应前序作业,就可以正常访问该作业产出的所有制品,哪怕多个前序作业的制品存储路径完全重合,也不会出现访问被拦截的情况。
多依赖同路径制品的核心运行逻辑
GitLab CI 下游作业拉取依赖制品的流程为严格按dependencies数组的声明顺序,逐次拉取并解压对应作业的制品到当前工作目录,具体规则如下:
- 各依赖作业的制品解压动作完全独立,不做跨作业的文件内容合并、冲突校验
- 解压过程中如果遇到目标路径已存在同名目录、同名文件,后完成解压的内容会直接覆盖原有内容
- 同stage并行的两个前序作业,谁先执行完成、谁的制品先上传到制品存储,都不会打乱下游的解压顺序,顺序完全由
dependencies的定义顺序决定
场景行为的确定性说明
该类场景下的运行行为完全确定,不存在随机波动的情况:
- 在给定的配置示例中,
dependencies的声明顺序为job1在前、job2在后,对应执行流程为:- 拉取job1的制品,将其产出的
samedir目录解压到job3的工作目录 - 拉取job2的制品,将其产出的
samedir目录解压到同一工作路径 - 最终job3看到的
samedir目录下,所有与job2产出重名的文件,都会被job2的版本替换,job1产出的同名文件会被完全覆盖
- 拉取job1的制品,将其产出的
- 不存在"按作业完成时间排序覆盖"的随机逻辑,只要配置固定,最终文件状态就固定
注意事项
- 如果下游作业没有显式配置
dependencies,默认会拉取上一stage所有作业的制品,此时的拉取解压顺序为作业名称的字典序,容易出现覆盖结果不符合预期的问题,多依赖同路径场景下建议显式声明dependencies并明确顺序 - 若需要保留两个作业产出的同名文件,建议在各前序作业产出制品时,在路径下增加专属标识(比如
/samedir/job1/、/samedir/job2/),避免解压覆盖
内容的提问来源于stack exchange,提问作者user5479362
相关产品推荐
相关产品推荐

