image - gitlab ci yml 图像和服务机制?
问题描述
我不明白关键字image
和services
file.gitlab-ci.yml中的机制。我们什么时候知道关键字的命令在哪个图像script
上执行?
当我阅读 gitlabci 文档时,我很好地理解了关键字“图像”和“服务”的理论,所以我已经完成了测试并设法httpd
通过 wget 与服务进行交互,但是,实际上我无法理解图片是干什么用的?
让我解释 :)
首先,我通过不声明任何图像创建了一个具有“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)。
推荐阅读
- json - 在 SQL Server 中将 BASE-64 编码的 JSON 文档转换为 JSON 字符串
- macos - 如何将 Apple 脚本的输出返回到 macOS 的状态栏?
- javascript - 在 Firefox 中长时间运行 javascript
- r - 使用 mongolite R 索引 MongoDB 不会提高速度
- swift - Swift:替换字符串中单个字符的简单方法?
- ecdsa - 使用 Google Cloud Key Management Service 签署以太坊交易
- azure - Azure Powershell DevOps Task 与 Azure 中国对话时出现问题
- php - 意外数据发现日期格式?
- r - 如何在 geom_raster 中设置一个常量“ylim”?
- flutter - 如何使用提供者更新具有多个实例的类?