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 的 Docker 内部的 Docker