English version: 《Hello, World》Author: @Tiexin Guo(郭铁心)
中文版:《你好,世界》作者:@胡涛(Daniel Hu)

不用尝试切换中英文版本看下我翻译的好不好,我就不是从英文版翻译过来的。
我们的文章如果是双语发布,那就一定是两次原创。虽然表达的主题一样,可能也只有主题一样了。

(如果你愿意深入阅读本文,请点击文末“阅读原文”跳到网页版继续。毕竟我懒得排版)

本文不算短,但是我知道你会读完。如果没读完,,不可能,绝对不可能!

在第一篇博文里,我要讲些啥呢?好像我也没有想好。但是他们喊我写,那我就写了。
好,让我们荡起双桨,不是,让我们开始吧!

别别别划走,给我三分钟,还你一天好心情!

别急,相信我,下文不会让你看着"心力憔悴",你可以笑着看完全文,并且毫不费力地学到新姿势,不是,新知识,新知识!

很多时候,我像一个"小白"用户。(虽然我是,但是我知道你们不信。)我怎么个"小白"法呢?

比如我喜欢用开源软件(白嫖谁不喜欢?),但是我绝对懒得在遇到问题的时候上 GitHub 给对应的开源项目开一个 issue 来反馈我遇到的问题,更别提开一个 pr 来修复我遇到的问题了。

或许有一天我心情大好,我会给一些"反馈",也许是在用户群里,也许是在其他地方。当然一般用着爽了,不可能开一个 issue 表示感谢。但是用着很不爽,或许我会忍不住开个 issue 问一句:

啥破玩意?就这?好意思开源?WTFFF!!!

我做着朝九晚五的工作,我不加班,我下班后不工作。

但是如果我遇到一个好玩的开源软件,或许下班后你会看到我还在参与某个开源项目,不管是写代码,还是参与社区例会。这不是我的工作,这是我的爱好,我的生活。

后来我就没那么"小白"了!而一个"大白"用户的修养,就是学会了提提 issue,提一些小的 pr,参与一些社区活动,知道开源项目的最新动态,逐渐融入了开源社区。

说个笑话:我下班了不工作。我不觉得玩开源社区是工作。我喜欢没日没夜倒腾开源社区。然后老板给我的工作就是玩"开源社区"!!!WTF!!!
老板催我写正文了。好吧,本文还是要介绍 DevStream 的,不能全文胡扯。

在这篇"创世"博文里,我准备:

  • 向你介绍 DevStream 的工作原理(不要担心,不会涉及到复杂的原理,复杂的我也不会);
  • 带你走读我们的代码库(不要担心,不会涉及到复杂的源码,复杂的我也不会);
  • 告诉你如何开发自定义插件(不要担心,看完了你只会知道一个大概,真想上手还是得看我们的官方文档)。

如果你没有听过 DevStream,不着急,请先花半分钟时间浏览下 DevStream 的 README。

我想听到你的骂声

我们在三月初发布了 v0.1 版本,总有人质疑我们是不是太早 release 了。
其实不早。我们肯定也不是不小心 release。

我们是故意的。没错,故意的。我们其实可以躲着偷偷再开发几个月,实现更多的功能,支持更多的插件,把 DevStream 做的更完美再 release。

但是我们担心的是 “我们认为好的功能” != “你真正需要的功能”

我们有很多的想法,我们有很多想做的功能,但我们不是最终的用户。我们现在做的很多事情其实是在"假设",在猜用户想要什么功能。

既然是想要知道"用户"想要什么功能,为什么不早点 release 出去,让用户来告诉我们还缺什么,让用户告诉我们哪里做的不好呢?

那就发出去吧,先 release,听听用户的骂声。我们要做的,就是不给用户第二次骂的机会,以最快的速度反馈用户的反馈,解决用户的问题。

行,废话了这么多,如果你对 DevStream 有一些兴趣,欢迎打开我们的 GitHub repo,看下 README 和 quickstart,体验一下 DevStream 的功能。

我相信你在第一次使用 dtm 命令的时候,肯定心中会多次燃起骂人的欲望:

什么破玩意!!!

没关系,打开我们的 Issues 页面,畅所欲言!只要 GitHub 不"和谐"你,我们肯定不"和谐"你。

你愿意骂我,就说明你心里还是有我,哈哈,谢谢!我心里也有你!

当然,提 Issues 是一种社区贡献行为,没错,不只是 pr,Issues 也算。对于"社区贡献者"我们会提供无比热情的帮助(绝对超过你的想象)。

你可以不信,那么你提一个 pr 试试。当然也许你会说提不来,那你就提个 issue 告诉我你想提 pr,然后,你就有了被我感动的机会了!

至于给社区贡献者的"精神"上或者"物质"上的奖励,当然有,不过我暂时不想透露。如果你愿意尝试成为一个"社区贡献者",那么相信我,你不会失望。

好奇心来了?

Good!让我们丢掉双桨,屏住呼吸,跳下去吧。深入看下 DevStream!

架构

一张好图胜千言啊

(如果你觉得这个图不够好,请移步英文版,英文版作者绘制的这个图,和我没关系)

我们用了 Go plugin. 这或许有很多值得讨论的点,但是这里我们简单先聊几句:

  • 首先,我们需要支持很多的 DevOps 工具,然后一种工具对应一个插件,听起来很自然;
  • 接着,好像有很多可选的 “core-plugin” 可选架构,我们发现 Golang 的 Plugins 机制满足需求;
  • 然后,最后,这里好像还有些点需要列,但是,不好意思,我想不起来了。

状态

我们把 DevStream (CLI 工具名字叫 dtm,别问我为啥,这是一个很长的故事,如果你感兴趣,可以看这里)
当作一个 “状态机”。

给一个输入,结合当前的状态,DevStream 会接着计算接下来该干什么。如果你对此感兴趣,那就跳到这里再看几眼。

目录结构

我们的一个主要依据是 standard project layout。但是别去点这个链接,里面的内容太长了,或许不是你想看到的。看我的总结就行:

  • /cmd: 入口包,别放太多东西在里面。
  • /pkg: 或许其他项目能用得到的一些代码,主要是一些 util。
  • /internal: 项目内的主要逻辑,不能被其他项目 import。
  • /hack: 一些主要的工具脚本等。
  • /build: 打包相关的一些脚本等。
  • /docs: 这个不需要解释了。
  • /examples: 这里主要用来保存示例配置。

解释不动了,大家可以看看英文版怎么描述的。我说过我是"小白",我不懂的。不过这个目录结构应该 Gopher 看起来很容易理解,大家望文生义吧。

Core / Plugin

  • Core 代码: https://github.com/merico-dev/stream/tree/main/internal/pkg/pluginengine
  • Plugins 代码: https://github.com/merico-dev/stream/tree/main/internal/pkg/plugin

dtm apply 命令背后的逻辑是啥?

  1. 从这里开始: /cmd/devstream/main.go.
  2. 接着 apply 命令在 /cmd/devstream/apply.go.
  3. 然后 引擎 /internal/pkg/pluginengine 运行所有的 apply 逻辑,
    在这里:/internal/pkg/pluginengine/cmd_apply.go.

然后,靠你自己去挖掘其他细节了!

DevStream 发版太慢了!!!能不能快点???就问你能不能???

能,当然能!

首先装个 Go,如果你没有装好,可以参考官方文档。

git clone https://github.com/merico-dev/stream.git && cd streamgo install golang.org/x/tools/cmd/goimports@latest#make sure your GOPATH/bin is in your PATH#for example, run this:export PATH=``go env GOPATH``/bin:$PATHmake build#after you run "make build", you DO NOT need to run "dtm init" anymore#run "dtm apply", "dtm delete" directly#because "init" will try to download plugins from the internet,#instead of using what you just builtdtm apply -f path_to_your_config.yaml

没看够?

恭喜你已经走到这步了,要不要玩一点刺激的?比如尝试开发一个新插件?

每个插件都需要实现一些接口,定义在这些地方:

  • Create
  • Read
  • Update
  • Delete

可以参考一个已经存在的插件,比如这个。

好好好,在你抱怨之前我想告诉你一个秘密武器!开发一个新插件时需要复制粘贴很多的代码,创建重复的目录结构,这种事情让人感觉很不爽!

你觉得我会容忍这种不爽存在超过一天???

没错,不会,绝对不会!

我们开发了一个小工具,让你能够快速生成一个新插件的骨架:

dtm develop create-plugin --name=my-pluing-name-here

好了。打完收工。也许你还没看爽,但是我写累了。我要休息了,I need a cup of coffee! now! bye!

最后,记得去看一下英文版,你会看到不一样的风景!
我不骗你哈,我是来搞笑的,你要严谨的知识,得去英文版看。

DevStream 概览——开源 DevOps 工具链管理工具相关推荐

  1. SimpleRemote -开源的远程连接管理工具

    SimpleRemote官网 软件介绍 我们在使用 mstsc (微软远程桌面).Putty 等对服务器或远程主机进行连接控制的时候,经常需要进行重复操作,比如填写IP.端口.用户名.密码等等,非常不 ...

  2. 推荐一个开源的区块链开发者工具网站

    开源区块链开发者工具箱 https://ChainTool.tech 今天可以正式上线了.ChainTool 使用完全开源的方式编写一些开发者日常经常使用的工具. 关于 ChainToolDAO 大约 ...

  3. Github 星标 8K+ 这款国人开源的 Redis 可视化管理工具

    做程序员就少不了与一些工具打交道,比如:监控工具.管理工具等,有些工具是命令行界面,有些工具是可视化界面,反正都是可以能够满足日常使用的功能需求. 对于redis管理工具来说,也有不少可能的产品,比如 ...

  4. sql2005 安装完成后只有配置工具,没有管理工具和性能分析工具

    安装完成后只有配置工具,没有管理工具和性能分析工具等. (1)版本问题,Express 版本的安装包中是没有管理工具.需要额外下载.   Microsoft SQL Server Management ...

  5. 5 个最值得注意的开源集中式日志管理工具

    集中式日志记录与安全性一样,是 IT 基础结构(包括 Web 应用程序和硬件设备)中核心资源监控和健全管理的一个基本方面.有能力的运维团队能够搭建一个日志监控和管理系统,来应对系统故障或应用程序的怪异 ...

  6. 推荐一款国人开源的 Redis 可视化管理工具

    大家可能用过 redis-cli .Redis Desktop Manager 等工具管理 redis. 今天我给大家介绍一款国人开源.免费.功能强大的 Redis 可视化管理工具:QuickRedi ...

  7. 【PC工具】开源绿色windows右键管理工具软件

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 电脑用时间长了,装的软件多了,不免会装很多影响鼠标右键菜单的软件,比如我这台电脑,装的 ...

  8. linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...

    Linux工具链for TKStudio是一款支持TKStudio IDE集成开发环境的辅助LINUX交叉编译工具链软件,交叉编译就是跨架构编译,编译出来的程序不能在本机执行(当然有例外情况).所以这 ...

  9. 菜单栏管理工具菜单栏管理工具当选Bartender4 Mac

    Bartender for Mac是一款Mac上的菜单栏应用图标管理工具,能够帮助我们解决系统菜单栏图标越来越多,导致打开某些应用后被隐藏的问题,还你一个干净的Mac菜单栏,Bartender 4能够 ...

最新文章

  1. spring面试重点
  2. linux 网卡配置详情
  3. 一起谈.NET技术,浅析购物车的实现
  4. ubuntu下安装Thinkpad指纹识别系统
  5. LINUX下直接使用ISO文件
  6. 初识RabbitMQ,附RabbitMQ+PHP演示实例(亲测通过)
  7. zookeeper的名词复盘-集群角色
  8. IDEA 2021.3 重磅发布!远程开发 (Beta) 、机器学习、故障自检、体验优化......
  9. 03-redis数据持久化
  10. nyoj--58--最少步数
  11. 进行 HTML、JavaScript 和 Ajax 开发和调试的必用工具
  12. 解决Glide 4.8.0 圆角与CenterCrop 的冲突问题
  13. Java批量下载有道单词发音+与Anki卡片整合
  14. 嵌入式软件工程师待遇怎么样
  15. 上位机控制PWM占空比
  16. 525、Java工程师的进阶之路 -【 RocketMQ (二)】 2022.01.06
  17. 关于android接入微信分享(以及app签名 the apk for your currently selected variant(app-release)
  18. Android开发学习持续更新中
  19. 通过kubeadm部署高可用的k8s集群
  20. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-030(red_green)

热门文章

  1. emis相关的一些备忘
  2. 通过Opencv打开指定摄像头的方法
  3. 云计算课程设计基于hadoop的词频统计设计
  4. Windows使用任务计划执行批处理定时重启IIS部署的网站
  5. 电池pack结构_详解锂电池pack基础知识,18650锂电池pack工艺技巧总结分析
  6. 软件测试需要的证书认证
  7. 天载股票开户大宗商品价格上涨引关注
  8. 快手2017校园招聘_笔试_面试
  9. Autodesk Maya软件介绍
  10. php做mes系统,mes系统的七大功能是什么