gitlab-ci.yml、before_script 和 artifact

Posted

技术标签:

【中文标题】gitlab-ci.yml、before_script 和 artifact【英文标题】:gitlab-ci.yml, before_script and artifact 【发布时间】:2019-03-14 19:34:55 【问题描述】:

在gitlab-ci.yml documentation 中,它说

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

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

但是artifact documentation 这么说

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

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

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

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

【问题讨论】:

【参考方案1】:

工件可以由一个阶段的构建作业生成,并由下一阶段的构建作业消耗。所以 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"

将给出以下输出:

# 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

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

【讨论】:

以上是关于gitlab-ci.yml、before_script 和 artifact的主要内容,如果未能解决你的问题,请参考以下文章

如何排除 gitlab-ci.yml 更改触发作业

使用 gitlab-ci.yml 的 Docker 内部的 Docker

将脚本附加到一个阶段 .gitlab-ci.yml

使用“:”的脚本命令导致 .gitlab-ci.yml 执行错误

gitlab-ci.yml 仅在 master 分支上

无法从 gitlab-ci.yml 推送