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快照环境上下文,取消设置所有环境变量以创建纯净的执行环境,或还原到执行的时间点