【问题标题】:Best practice to take manage software dependencies for the development and prod environments为开发和生产环境管理软件依赖项的最佳实践
【发布时间】:2021-05-05 18:47:23
【问题描述】:

对于使用 golang、python 并在 ubuntu linux 上运行的项目,我正在寻找一种管理软件依赖项的最佳方法。对于 Go,我们使用 go 模块,对于 python pip 和 anaconda。项目的许多部分也是 dockerized(数据库、mlflow 服务器等)。

我想要一个自动安装所有需求的系统:

  • 去语言
  • 蟒蛇
  • 码头工人
  • 码头工人撰写
  • 用于 Kubernetes 的 minikube
  • jq、psql客户端等linux程序

并且在依赖项有新添加的任何时候,系统都应该执行所需的更新。比如我们更新go版本或者添加helm,避免开发者在运行项目时遇到错误。

我正在考虑甚至可能在安装所有依赖项的 Docker 容器中进行开发。但似乎 GoLang 与 docker 容器内部开发的集成并不是开箱即用的体验。另外,我不想对团队过于独断。所以,理想情况下,应该有一个工具可以在本地机器上安装所有东西。而且,如果我们中的一些人确实决定在容器内部开发,我可以在 docker 内部使用相同的工具。

【问题讨论】:

    标签: docker dependencies dependency-management


    【解决方案1】:

    有很多工具和方法可以做你所说的,所以没有一个答案。概括地说,您需要选择分发更新的方式:

    1. 操作系统映像 - 使用 Hashicorp 的打包程序等工具来创建具有所有先决条件的自定义操作系统映像。
    2. Container - 使用 docker 之类的工具来创建包含所有依赖项的容器。
    3. 包级别 - 使用 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
    

    将其签入源代码管理并分发给您的开发人员等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 2022-08-09
      • 2010-09-06
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多