问题:gitlab ci yml 镜像和服务机制?

不明白file.gitlab-ci.yml中关键字imageservices的作用机制。我们何时知道关键字script的命令在哪个图像上执行?

当我阅读 gitlabci 文档时,我很好地理解了关键字“图像”和“服务”的理论,所以我已经完成了测试并设法通过 wget 与httpd服务进行交互,但是,实际上我不能了解图像的用途吗?

让我解释 :)

首先,我通过不声明任何图像创建了一个具有“uname -a”的作业的结构:

job_scriptWithDefaultImage:
  stage: gitlabtest1
  script:
    - uname -a

然后结果显示在跑步者上运行的“uname -a”:

$ uname -a
Linux runner-b41b332f-project-9060-concurrent-0 4.4.0-104-generic #127-Ubuntu SMP Mon Dec 11 12:16:42 UTC 2017 x86_64 Linux

然后我只需在我的工作中添加一个图像,指定我想使用高山:

job_scriptWithAlpineImage:
  internship: gitlabtest2
  image: registry.hub.docker.com/library/alpine:latest
  script:
    - uname -a

结果完全一样,uname总是跑在runner上,而不是我的alpine...

$ uname -a
Linux runner-9cade5e3-project-9060-concurrent-0 4.4.0-130-generic #156-Ubuntu SMP Thu Jun 14 08:53:28 UTC 2018 x86_64 GNU/Linux

所以我完全不明白:

  • 我的图片是干什么用的?

  • 如何在我的管道作业script部分中执行该图像中的命令?

解答

Docker 使用主机的内核。从uname -a输出中可以看出,它提供了跑步者的机器信息。这就是为什么无论容器如何,您都会获得相同的输出。你甚至可以在你的机器上试一试。

https://stackoverflow.com/a/31012367/4551937

关于 Gitlab Runner,你的service是独立的。它将附加并提供给您调用它的工作,就好像它在它旁边运行一样。

您的作业将使用您指定的带有image标签的图像来运行script中列出的命令(您可以将它们链接起来)。如果未指定图像,它将采用运行器配置中定义的默认图像(可能是 Ubuntu)。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐