UPcmd 现代化的配置管理,构建和自动化工具

Ultimate Provisioner:现代化的配置管理,构建和自动化工具

如果您在考虑一个系统最少依赖的工具,能在现代化的云端实现完美自动化,并且帮助你的团队提高Ci/CD的效率,请一定考虑使用这个工具

相关性:
shell cli golang jenkins ansible devops task automation flexible gradle ant terraform configuration-management build-tool make gocd cicd cloud-environments automation-framework drone-ci

大家好,我是这个项目的开发者, 详情参考官网: https://github.com/upcmd/up

文档: https://upcmd.netlify.app/

以下是自动翻译,如有不恰当之处,请见谅,我会抽空完善

  • 厌倦了使用Makefile,Ansible,Ant,Gradle,Rake和其他框架…?
  • 厌倦了修补Shell脚本,将各种工具优雅地集成在一起?
  • 缺少可以很好地集成到云环境中的自动化的整体简单解决方案?
  • 感觉到您的DevOps的痛苦,Ci / CD最佳实践?
  • 需要具有互操作性才能与流行的工具进行协作:terraform,packer,vagrant,docker,kubectl,helm …?
  • 不用担心替换您已经设置的任何内容,UPcmd并不要求和专门与其他工具一起使用,而是与其他工具结合并协作,但是它可以作为框架,以备您需要时使用。

UPcmd
UP的设计和实现使其可作为以下方面的现代工具:

  • 配置管理
  • 构建,持续交付,与CI / CD集成
  • 全面的工作流程编排:全面支持几乎所有类型的条件,循环(递归),中断,直到
  • 灵活的配置组织
  • 没有依赖地狱的问题
  • 精确建模,数据就是对象,对象就是数据
  • 组成,单独的功能类型,数据和实现的设计
  • 使用界面(调用函数)抽象意图,数据输入和实现
  • 许多内置功能:空运行,断言,暂停,用户提示,输入验证,调试/跟踪/检查,对开发人员友好
  • …还有更多让您发现的内容,请查看文档

它是一个类似于Ansible,Make,Rake,Ant,Gradle,Puppet,Taskfile等的构建工具,但是尝试使事情变得更简单则更聪明。

UP的目标是提供一种快速(我认为是最快的)解决方案,以实现连续集成和连续部署(CI / CD)。它易于使用,但功能强大,可以应对当今在云环境中开发团队所面临的许多常见挑战。

它的设计考虑了与Kubernetes中的自动化协作,舵图,API调用的注意事项。

它遵循与通用CI / CD工具(例如GOCD,Jenkins,Drone,Gitlab CI等)集成的最佳实践,并且是所有类型的CLI工具的优秀公司。

它带来了一个有趣的DSL编程接口,一种在CLI中进行建模和工程设计的方法。它支持OO设计,快速的测试驱动开发(TDD)和较短的软件交付周期。

可能的应用

鉴于您的自动化解决方案由Unix Shell支持,UPcmd是一种通用的自动化工具。但是,您不需要Shell可执行文件,因为它具有默认的内置GOSH,以防万一您需要使用它。

可能有以下应用,但不限于:

  • 在本地计算机中为所有不同类型的应用程序构建,打包,发布,测试,部署,或与CI / CD工具/管道集成

  • UPcmd可用作工具/平台/管道不可知的抽象层,将大多数配置留给UPcmd作为执行配置文件进行管理,仅公开要与该工具链接的profileid,例如:jenkins / gitlab ci,以便您实现所有自动化是便携式的。如果您需要从一个切换到另一个,则无需重写所有自动化操作。在这种情况下,可以将UPcmd的已配置任务视为代码管道

  • 例如,用于本地计算机自动化的util的集合(工具箱),

  • 使用所有升级的软件包引导整个Macbook,设置所有dotfile

  • 引导整个Linux机器/虚拟机/无用机器/ docker容器

  • 创建CLI程序,提示用户输入,加密/解密机密

  • Web服务/ REST API调用和消息转换

  • 云服务供应,例如,驱动复杂的工作流以管理以在AWS或k8s集群中创建完整的应用程序堆栈,利用并与其他CLI命令(例如,打包程序,aws cli,kubectl,helm,terraform)集成

  • 重用/使用或共享模块以处理特定的用例。

  • 通过简单地调用相关CLI / docker运行的不同版本来解决依赖性问题

  • UPcmd任务本身的编排可以看作是原型设计工具和设计工具,或者可以使用定义的工作流作为框架来指导不同部分的实施

为什么还有另一个构建工具

  • Make最初是设计并用于构建C程序的,尽管它可以被用于其他目的,但琐碎难学的事情通常会带来问题,而不是为团队带来好处,并且正在燃烧大脑。很难将自动化任务扩展到更高的水平,可读性迅速下降,并且使用Make实施关键逻辑是有风险的。对于现代业务需求,Make有点老了。 (对不起,也许这只是一个不擅长使用Makefile的人)

  • 耙子聪明而强大。如果您不介意学习Ruby,那么它是构建工具的不错选择。同样,Ant和Gradle都绑定到特定于语言的语言,当您要在云环境中自动执行操作时,这是不正确的。在大多数情况下,当它需要在云环境中实现自动化时,在给定的向上旋转的AWS EC2实例,shell会话,kubernete pod中,您希望某些东西在没有任何依赖的情况下就可以正常工作。您只是不想在多个环境中为所有语言包维护升级路径链的一致性。在这些情况下,Rake,Gradle,Ant不是最佳选择。由于历史原因,开发团队可能会采用它们并在早期阶段获得优势。从长期来看,要逐步进行改进和升级,升级整个生态系统的工作量和成本实在太大了,并且常常采用错误的解决方案来保持生态系统的运转,直到它开始下沉。

  • Ansible,Puppet和Chef是配置管理工具。它们功能强大,可以使用许多内置的经过良好测试的模块。但是,Ansible可能太大而无法完成任何工作。在大多数情况下,它趋于过度杀灭,也遭受着相同的python / python包依赖关系问题。使用它意味着将整个难以维护的软件包森林,os库全部带入您的执行上下文。

Ansible在许多团队中的常见用法是将本地ssh执行与组/主机var一起使用以进行模板和工作流自动化,这是不正确的。 vars管理的方式不是很细致。作为可重用模块的ansible角色对于执行更复杂的任务并不灵活。具体来说,它不支持叶级合并;对命令行输入进行简单的验证非常困难,几乎是不可能的。它的控制器和角色的单向通信不灵活…

  • 受一些轻量级工具的启发,它是使构建和自动化变得更轻松,更优雅的微型工具,但是在CI / CD,devops自动化的实际云环境中缺少某些功能。

考虑到以上所有因素,UP被设计为在云环境中的通用,占地面积小(零缺陷),有效的自动化工具。

特征

  • 替代Makefile,但功能更强大。它使用组成模型而不是依赖模型来实现灵活性/可组合性
  • 在golang中实现,因此没有依赖地狱,无需维护运行时,并确保多个/许多执行上下文之间的版本一致性
  • 使用范围来管理一组执行上下文,即与范围相关联的变量。细粒度范围模型支持可变自动覆盖/合并
  • 与Ansible全局/组var相似,宿主vars,但更强大以支持叶级对象自动合并
  • 使用dvar-动态var,这是一种特殊设计,可以实现许多令人难以置信的功能,例如:
    • 管理安全性:内置的加密/解密(如ansible-vault)
    • 动态上的动态:它允许您指定要动态显示变量的扩展层数
    • 内置模板功能
    • 使用golang模板,支持所有(220+)(builtin | sprig | gtf)函数/管道,以便可以使用对象在模板中很好地控制您的配置
    • yaml | json结果与内部使用的对象之间的自动消息转换
    • 符合用于var合并到叶级的分层作用域模型
    • 在相同的范围模型中管理设置/读取环境变量,这样您就可以与CD / CI工具中的最小暴露要求苛刻的环境变量进行无缝集成
    • 自动验证强制变量
  • 彩色打印和可调整的详细级别
  • 灵活的编程模型,可让您通过接口分离实现,以便可以通过调用函数重用通用代码。允许放置空框架以测试驱动过程或作为伪代码进行指导,但逐步填充细节和实现
  • 流量控制:
    • ignoreError
    • 空运行
    • 如果条件支持
    • 循环支持以遍历项目列表
    • 多层循环,中断直到条件
    • 执行的代码块和嵌入式代码块
    • 最终/救援以确保清理
  • 灵活的配置样式可从外部yaml加载dvar,范围和流,从而使编程代码更简洁,更有条理。您的代码可以从简单开始,然后将详细的实现外部化为文件。
  • 支持无限的yml对象,因此var中的yml config是文本并且也是对象。它可以自动合并到范围中,可以使用go模板进行处理
  • 内置电池可用于常见的内置命令:print,reg,deReg,模板,readFile,writeFile
  • 内置yml升和对象查询,修改
  • 调用func确实是可以使用的强大功能:
    • 组成代码块的顺序执行
    • 使用堆栈设计,因此它将所有本地变量隔离开来,以便其实现中使用的变量不会污染调用方的变量
    • 它就像一个接口,用于分离目标和实现,并使代码可重用
  • Shell执行二进制文件是可配置的,内置了对GOSH(mvdan.cc/sh)的支持。这意味着您不需要安装本地shell / bash / zsh即可执行任务,可以从Windows计算机运行任务。
  • 它提供了一种模块机制来鼓励社区共享模块化代码,这样您就无需重新发明轮子来再次开发相同的功能
    使用执行配置文件可在命令行中使用零参数来简化Ci / CD管道集成,但是所有这些都以一种可配置的很好的方式进行管理。
  • 使用virtualEnv cmd快照环境上下文,取消设置所有环境变量以创建纯净的执行环境,或还原到执行的时间点

你可能感兴趣的:(devops,运维,ci/cd,kubernetes,makefile)