拯救我们的超棒工具
2017 年,我们只有 5 名开发人员,却要维护 160 个代码库。感觉技术债务不断累积,除了维护现有项目之外,我们根本无法从事任何生产性工作。
幸运的是,市面上有很多优秀的工具,让我们免于被繁重的维护工作淹没。我们选择实现每个步骤的自动化,而正是这些优秀的工具让这一切成为可能。
GitLab
GitLab 提供便捷的源代码托管服务,并与灵活强大的 CI/CD 解决方案深度集成。最棒的是什么?您可以免费使用它——至少社区版是免费的。只需运行命令即可轻松terraform apply启动您自己的 GitLab 实例。(这需要使用服务器集群搭建生产环境的 GitLab 配置,因此请注意相关成本。)
笑话
开箱即用的便捷测试功能。快照功能支持对简单用例进行快速而有效的测试。
更漂亮
代码格式化看似工作量不大,但却是每天都要做的事情。如果能把这项工作委托给像 Prettier 这样的工具,你就可以把精力集中在业务逻辑和代码结构上,而这些事情机器目前还无法帮你完成。
standard-version
发布新版本应该很简单。standard-version请确保每次发布软件包新版本时,变更日志都会自动生成并添加到代码仓库中。
commitlint
上述方法standard-version适用于提交格式正确,能够自动生成完整变更日志并进行相应结构化处理的情况。Commitlint 可以确保您不会意外忘记遵循正确的提交格式。
翻新
维护依赖项的更新并不是一件轻松愉快的事。这感觉就像是在浪费时间,而且你还得时刻关注是否有新版本可用。Renovate 可以帮你完成大部分这项工作:它能够自动更新许多依赖项,高度可配置,并且能够在依赖项更新时自动创建拉取请求。你可以在这个 gist 中看到我最喜欢的配置。
勒纳
Lerna 允许您在单个代码仓库中管理多个相关软件包。我们自定义的数据处理框架fireant由多个组件构成:运行时fireant-core、AWS SQS 和 Google PubSub 适配器(您可以阅读我们之前尝试切换的经历)、部署生成器、用于fireant在开发过程中快速本地运行和测试的工具create-fireant-worker、一个可以轻松创建新工作进程和部署的工具等等。最初,所有这些组件都有各自的代码仓库,彼此之间存在紧密的依赖关系。Lerna 使我们能够在一个代码仓库中管理这些相关软件包,同时在源代码结构和生产环境打包方面清晰地分离它们各自的功能。
懒汉
很遗憾,这不是一个公开项目,所以我无法提供链接。我们编写了一个小型 ChatOps 脚本,每当我们发布任何软件包的新版本时,它都会向我们的 Slack 频道发送一条消息。由于发布始终在 GitLab CI 中进行(见上文),并且始终包含变更日志,因此我们可以可靠地发布最新的变更日志,并让整个团队了解最新情况。
我们的定制工具包
我并不认为每个人都对所有这些工具了如指掌。幸运的是,一旦你设置好代码仓库,大多数工具就能开箱即用。为了方便用户使用这些工具设置代码仓库,我引入了我们自定义的工具包dev-scripts,其灵感来源于Kent C. Dodds 的kcd-scripts工具包。现在,就让 Kent 来解释一下自定义工具包的优势吧。