Ada*_*ips 9 gitlab-ci gitlab-ci-runner
在过去的几周里,我一直在使用 GitLab.com 上的公共共享运行器为私有存储库中的 php 项目设置我的第一个管道。此时管道非常简单,定义了两个阶段:
stages:
- test
- deploy
Run Code Online (Sandbox Code Playgroud)
在测试阶段运行composer update -o构建项目的依赖,连接到远程数据库服务器,并运行CodeCeption测试框架来测试构建和生成代码覆盖率报告。
在部署阶段运行composer update --no-dev -o重建项目,只生产依赖和利用rsync将文件推到生产网络服务器。
现在一切正常,但是对于每个阶段,它都会运行拉取 docker 镜像、安装依赖项以及从 git 中提取项目的整个过程。似乎只加载一次 docker 镜像和项目会更有效率,然后运行测试并使用相同的持久构建实例一个接一个地部署阶段。
我意识到很多时候您确实希望为每个阶段创建一个新实例,但是对于我的项目,我觉得这对于时间和服务器资源来说效率很低。
我可以将所有内容配置为在同一阶段运行,这将消除冗余的 docker 映像进程,但我会失去 GitLab 中的管道功能,您可以在其中查看哪些阶段失败,并使后续阶段依赖于前一个阶段的成功。
从我对文档和几个相关问题的审查来看,这似乎与此过程如何工作的架构有关,其中作业彼此独立(甚至可以由不同的运行者处理)并组织成管道上的阶段。
我所拥有的当然是可行的(如果有点慢)但我想我会在这里问这个问题,以防万一我遗漏了什么会使这个过程更有效,同时仍然保留 CI 管道功能。
我知道这是一个老问题,但想为有同样问题的人提供答案。
Gitlab Runner 应用程序本身有一个配置选项,用于控制运行程序何时使用图像的本地副本。如果您管理和使用自己的运行器(即使使用 gitlab.com),您可以完全控制这些选项,但如果您使用 Gitlab 提供的共享运行器,则不能。
以下是您可以使用的三种“拉动策略”:
Never。拉never取策略将指示运行器永远不要从 Docker 云或其他存储库拉取图像,而只会使用已拉取到 Docker 主机的图像。这允许完全控制 Gitlab 使用的图像和版本。If Not Present。该if not present策略指示运行器首先检查图像是否在本地可用,如果是则使用它。否则,它将从其存储库中提取图像。Always。该always策略指示运行程序忽略任何本地图像,并在每次作业运行时从存储库中提取图像。对于 gitlab.com 上的共享运行器,拉取策略设置always为满足大多数用户的需求。此问题的解决方案是为您的项目注册您自己的运行程序(您可以在 AWS EC2、笔记本电脑/工作站等中运行该运行程序)。
以下是有关运行您自己的 Gitlab Runner 时可用配置选项的信息。
以下是有关可用拉取策略以及何时使用(或不使用)的具体详细信息。
以下是如何将运行器注册到您的项目(或者如果使用自托管的 Gitlab,则注册到整个实例)。
| 归档时间: |
|
| 查看次数: |
2346 次 |
| 最近记录: |