gitlab-ci.yml、before_script 和 artifact

Hen*_*ang 7 artifact gitlab

gitlab-ci.yml 文档中,它说

before_script 用于定义应该在所有作业(包括部署作业)之前、但在工件恢复之后运行的命令。

这告诉我工件是在作业开始运行之前生成的

但是工件文档

工件是作业成功完成后附加到作业的文件和目录列表

这告诉我工件是在作业完成运行后产生的。

这是一个矛盾。有人可以解释一下这不是矛盾吗?

我想他们在谈论以前工作中的神器?但我不知道 artifact 和 job 是如何工作的,并且可能是错误的。

rns*_*tlr 9

工件可以由一个阶段的构建作业产生,并由下一阶段的构建作业消耗。因此,在为当前阶段恢复前一阶段产生的工件之后,运行 before_script。

所以下面的 .gitlab-ci.yml

stages:
  - build
  - test

before_script:
  - echo "before_script"
  - ls

build_artifacts:
  stage: build
  tags:
    - docker
  script:
    - echo "build_artifacts"
    - touch build_output
  artifacts:
    paths:
      - build_output

test_artifacts:
  stage: test
  tags:
    - docker
  script:
    - echo "test_artifacts"
Run Code Online (Sandbox Code Playgroud)

将给出以下输出:

# build_artifacts job
$ echo "before_script"
before_script
$ ls
README.md
$ echo "build_artifacts"
build_artifacts
$ touch build_output
Uploading artifacts...
build_output: found 1 matching files               
Uploading artifacts to coordinator... ok            id=56026 responseStatus=201 Created token=xxxxzzzz
Job succeeded



# test_artifacts job
Downloading artifacts for build_artifacts (56026)...
Downloading artifacts from coordinator... ok        id=56026 responseStatus=200 OK token=xxxxzzzz
$ echo "before_script"
before_script
$ ls
README.md
build_output
$ echo "test_artifacts"
test_artifacts
Job succeeded
Run Code Online (Sandbox Code Playgroud)

如您所见, test_artifacts 作业在before_script运行之前下载工件。