为开发和生产环境管理软件依赖关系的最佳实践
Best practice to take manage software dependencies for the development and prod environments
对于使用 golang、python 并在 ubuntu linux 上运行的项目,我正在寻找管理软件依赖项的最佳方法。对于 Go,我们使用 go modules,对于 python pip 和 anaconda。该项目的许多部分也 docker 化(数据库、mlflow 服务器等)。
我想要一个自动安装所有要求的系统:
- 去语言
- python
- docker
- docker撰写
- 用于 kubernetes 的 minikube
- linux jq、psql客户端等程序
并且在任何时候当依赖项有新的添加时,系统应该执行所需的更新。比如我们更新go版本或者添加helm,避免开发者在运行项目时遇到错误。
我正在考虑甚至在 Docker 容器内开发,它安装了所有依赖项。但似乎 GoLang 与 docker 容器内部开发的集成并不是开箱即用的体验。另外,我不想对团队过于专横。所以,理想情况下,应该有一个工具可以在本地机器上安装所有东西。而且,如果我们中的一些人确实决定在容器内部开发,我可以在 docker 内部使用相同的工具。
有很多工具和方法可以完成您所说的事情,所以没有一个答案。在较高级别,您需要选择要如何分发更新:
- OS 图像 - 使用像 Hashicorp 的加壳器这样的工具来创建具有所有先决条件的自定义 OS 图像。
- Container - 使用像 docker 这样的工具来创建包含所有依赖项的容器。
- 包级别 - 使用像 ansible 或 chef 或 salt 这样的工具来安装你需要的依赖项。
大多数人最终会结合使用上述方法。
无论如何,如果我处在你的位置,我会从 ansible 开始,然后从那里开始。这是一个很好的工具,您可以根据需要迭代更复杂的东西。
ansible playbook 是一个 yaml 文件。例如:
- hosts: localhost
tasks:
- name: install required packages
apt:
pkg:
- golang
- python3
- docker
- docker-compose
- unattended-upgrades
update_cache: yes
像这样执行:
ansible-playbook playbook.yml
将其签入源代码管理并分发给您的开发人员等
对于使用 golang、python 并在 ubuntu linux 上运行的项目,我正在寻找管理软件依赖项的最佳方法。对于 Go,我们使用 go modules,对于 python pip 和 anaconda。该项目的许多部分也 docker 化(数据库、mlflow 服务器等)。
我想要一个自动安装所有要求的系统:
- 去语言
- python
- docker
- docker撰写
- 用于 kubernetes 的 minikube
- linux jq、psql客户端等程序
并且在任何时候当依赖项有新的添加时,系统应该执行所需的更新。比如我们更新go版本或者添加helm,避免开发者在运行项目时遇到错误。
我正在考虑甚至在 Docker 容器内开发,它安装了所有依赖项。但似乎 GoLang 与 docker 容器内部开发的集成并不是开箱即用的体验。另外,我不想对团队过于专横。所以,理想情况下,应该有一个工具可以在本地机器上安装所有东西。而且,如果我们中的一些人确实决定在容器内部开发,我可以在 docker 内部使用相同的工具。
有很多工具和方法可以完成您所说的事情,所以没有一个答案。在较高级别,您需要选择要如何分发更新:
- OS 图像 - 使用像 Hashicorp 的加壳器这样的工具来创建具有所有先决条件的自定义 OS 图像。
- Container - 使用像 docker 这样的工具来创建包含所有依赖项的容器。
- 包级别 - 使用像 ansible 或 chef 或 salt 这样的工具来安装你需要的依赖项。
大多数人最终会结合使用上述方法。
无论如何,如果我处在你的位置,我会从 ansible 开始,然后从那里开始。这是一个很好的工具,您可以根据需要迭代更复杂的东西。
ansible playbook 是一个 yaml 文件。例如:
- hosts: localhost
tasks:
- name: install required packages
apt:
pkg:
- golang
- python3
- docker
- docker-compose
- unattended-upgrades
update_cache: yes
像这样执行:
ansible-playbook playbook.yml
将其签入源代码管理并分发给您的开发人员等