【问题标题】:Is it possible to have multiple gitlab-runners all execute the same jobs?是否可以让多个 gitlab-runners 都执行相同的作业?
【发布时间】:2020-04-09 12:15:22
【问题描述】:

我希望利用 GitLab CI/CD / gitlab-runner 使自定义代码在一组服务器上保持最新。

期望的效果是,当在 GitLab 中对某个项目进行提交时,几台服务器会自动拉下这些更改。

是否可以通过这种方式利用 gitlab-runner,让每个注册到项目中的 runner 都执行.gitlab-ci.yml 文件的内容?或者有没有更好的工具来实现这一点?

我可以使用 Ansible 将更新文件推送到每个服务器,但我正在寻找更容易解决的问题 - GitLab 中固有的东西。

编辑:替代解决方案

我决定在我的存储库中使用钩子前和钩子后文件的路径,如下所述:

https://gist.github.com/noelboss/3fe13927025b89757f8fb12e9066f2fa

基本上,我将主服务器表示为代码推送到主存储库的主要源,并将我的整个舰队定义为 .git/config 中的远程存储库。在我所有服务器上的裸仓库中使用 post-hooks,然后我可以将我的代码复制到正确的执行路径中。

【问题讨论】:

  • 我认为最好有一个跑步者并触发从跑步者那里拉入服务器
  • 不可能让所有注册到一个项目的跑步者都处理管道吗?
  • 是的,例如,您可以使用shell,但您需要在 X 服务器上管理 X 运行器。你想这样做吗?
  • 是的。我可以轻松地自动化部署和注册运行器的过程,以便在我的舰队中的每台服务器上都有一个运行器。然后这个想法是每个跑步者的工作都是一样的——从 git 中提取并将我的代码复制到该服务器上的正确目录中。查看 shell 执行器和一般的 gitlab-runner 文档,我看不到任何控制参数会强制项目中的多个(所有)运行器全部执行 - 似乎第一个抓住工作的运行器运行它,然后管道就完成了。
  • 也许您的问题可以在客户端解决?定期提取代码或使用来自this post 的一些想法。如果您在 gitlab 之外处理它,则不必担心更新管道,您只需生成您的服务器并让它们处理从存储库中提取更改。

标签: gitlab gitlab-ci-runner


【解决方案1】:

@ahxn81 Runners 并不是真的打算以您描述的方式使用。您提出的 Ansible 推送方法更符合典型的部署流程。我明白为什么您可能更喜欢 pull 方法的简单性而不是通过脚本推送。我想这些天的一组服务器是通过 kubernetes 或 docker swarm 来实现的,这可以在初始设置头痛之后简化部署。

【讨论】:

  • 感谢您的澄清。这就是我最终得出的结论。我花了几个小时阅读 GitLab CI/CD 以及如何设置跑步者。作为一名运维人员,我从来没有看到任何关于这通常如何工作的基本原理的澄清。可能是因为具有开发背景的人已经有了基本的理解。
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
相关资源
最近更新 更多