Gitlab CI:是否可以访问以前将它们存储在同一路径中的作业中的工件?

9il*_*0lo 3 gitlab gitlab-ci

如果有 2 个作业在同一路径中包含工件,并且这两个作业都是同一作业的依赖项,Gitlab CI 会如何表现?

job1:
 stage: stage1
 artifacts:
  paths: 
  - samedir
  
job2:
 stage: stage1
 artifacts:
  paths: 
  - samedir

job3:
 stage: stage2
 dependencies:
 - job1
 - job2
Run Code Online (Sandbox Code Playgroud)

我在 gitlab 文档中找不到示例或预期的行为。

行为是确定性的吗?如果 job1 和 job2 将相同的文件放在相同的目录中,那么 job2 的工件是否会因为它们在依赖项中定义的顺序而覆盖 job1 中的文件?

Mig*_*ejo 5

根据文档

在最近成功的管道中为特定引用创建的作业工件被视为最新工件。如果您为同一引用运行两种类型的管道,则时间决定哪些工件是最新的。

为了证明这个说法让我们考虑以下.gitlab-ci.yml文件

image: python:3.6

stages: 
    - stage1
    - stage2
    - stage3


job1:
  stage: stage1
  script:
    - echo "artifact from stage 1" > test.txt
  artifacts:
    paths: 
      - test.txt

  
job2:
  stage: stage1
  script:
    - echo "artifact from stage 2" > test.txt
  artifacts:
    paths: 
      - test.txt

job3:
  stage: stage3
  script:
    - cat test.txt
  dependencies:
    - job1
    - job2
Run Code Online (Sandbox Code Playgroud)

我们注意到 和job1job2为文件提供了相同的引用test.txt

现在,如果我同时运行这两个作业,最近成功的作业将存储最新的工件,可在job3. 在此示例中,job1花费了 87 秒,而job2花费了 90 秒。的输出job3确认了这一点

在此输入图像描述

在 UI 上,CI/CD --> Pipelines您仍然可以下载每个作业工件

在此输入图像描述