我不了解file.gitlab-ci.yml中关键字image
和services
的机制。我们什么时候知道在哪个图像上执行关键字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总是运行在跑步者身上,而不是我的高山...
$ 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
部分中的该映像中执行命令?答案 0 :(得分:0)
Docker使用主机的内核。正如您在uname -a
输出中所看到的,它提供了跑步者的机器信息。这就是为什么不管容器如何您都得到相同输出的原因。您甚至可以在计算机上尝试。
https://stackoverflow.com/a/31012367/4551937
关于Gitlab Runner,您的service
是独立的。它将附加并提供给您的作业调用它,就像它在它旁边运行一样。
您的工作将使用您用image
标签指定的图像来运行script
中列出的命令(您可以将它们链接在一起)。如果未指定映像,它将采用运行程序配置(可能是Ubuntu)中定义的默认映像。