来自 CC防护 2022-06-09 03:10 的文章

香港高防服务器_防御ddos价格_超高防御

香港高防服务器_防御ddos价格_超高防御

gödel:Go编程语言的构建系统Palantirfollownov 22017·6分钟阅读

gödel是Go编程语言的构建工具。Godstrap和Pala100目录下的Godstrap(GodGrad.r)和Godstrap(GodGrad.r)是类似的开发工具。一旦gödel被添加到项目中,典型的开发周期是:

。/godelw idea gogland生成一个gogland项目。/godelw verify运行检查和测试。/godelw publish生成和发布二进制文件

gödel是用Go编写的,当然是自己构建的。它委托标准的Go命令和工具来执行其任务。gödel简化了构建系统设置,确保了一致和可预测的开发体验,并允许组织和社区通过将构建逻辑与构建配置分离来标准化其构建工作流。

动机

当我们在Palantir开始使用Go进行一些项目时,我们努力为开发、测试、构建和发布提供一致的经验。开发人员将手动对代码运行一组静态检查和测试,然后将代码提交到运行持续集成的版本控制系统。然后,CI系统将运行同一组静态检查和测试,为各种目标平台构建可执行文件,创建分发档案,并上传以供分发。维护不同开发环境和CI系统之间的一致性被证明是一项挑战,尤其是在团队开始成长的时候。我们开始采用执行静态检查的工具(如errcheck),但由于它们是使用go-get安装的(go-get在运行时安装最新版本),因此结果可能会因开发人员设置环境的时间而异。随着项目复杂性的增加,我们引入了脚本对验证和发布工作流进行编码,java防御ddos,然后很快就遇到了脚本带来的经典问题:脚本逻辑变得越来越复杂,每个项目的配置都与构建逻辑本身交织在一起。当团队开始新项目时,他们会从其他项目复制脚本并进行轻微修改。这个过程很容易出错,使得以后很难在全球范围内推出更新。这些问题对我们的发展速度产生了影响,因此我们决定解决我们认为问题的根本。我们想要一个具有以下属性的构建系统:

稳定:每个项目声明在项目级别运行的一组精确的检查和操作,并与项目源代码模块一起进行版本控制:项目维护构建系统配置,不可维护构建逻辑:构建逻辑由一个中心团队维护,可以在项目间轻松更新。考虑:开发环境和构建行为在项目间是一致的

我们查看了各种开源Go存储库,但没有看到令人满意的解决方案。许多较小的项目都有CI脚本,这些脚本将得到检查,并依赖go-get作为其分发机制。大型项目通常使用makefile和脚本。Gradle是JVM生态系统的一个优秀构建系统,高防cdn3元一月,但看起来我们必须构建多个插件来支持Go,而要求JVM构建我们的Go项目也没有吸引力。

gödel作为声明性构建的工具

使用上述列表作为指导,我们在2016年帕兰蒂尔两年一次的黑客周期间开始使用哥德尔。从那时起,它已经成熟成为帕兰蒂尔所有Go项目的标准构建系统。它的设计借鉴了Gradle:gödel二进制文件封装了用于执行一组构建任务(如语法检查、编译、测试执行、打包、发布等)的逻辑,而启用gödel的项目为构建指定了所需的gödel版本和特定于项目的配置。gödel保证在项目的给定Git提交上执行./godel verify执行完全相同的一组验证任务,而不管该命令在哪里执行,无论是开发人员笔记本电脑还是CI系统。通过将godelw脚本和godel配置目录添加到项目中,可以为项目启用哥德尔。调用./godelw脚本会导致本地下载并安装正确版本的godel二进制文件。一旦gödel被添加到项目中,典型的开发周期如下:

运行./godelw idea gogland生成一个gogland项目(配置为保存时运行./godelw格式)写入代码运行./godelw verify验证项目是否通过了所有检查(静态代码分析,测试)并强制执行许可证标题和go generate Tasks等内容的正确状态配置CI系统以运行。/godelw publish为项目构建和发布发行版

哥德尔教程提供了哥德尔的完整介绍,包括设置项目和使用哥德尔的所有功能。从我们迄今为止所做的项目中,我们观察到以下主要好处:

新项目的速度加快。开发人员可以建立新项目,更快地构建和发布工件。在过去,他们必须手动复制和编辑来自其他项目的脚本,这是一个容易出错且冗长的过程。更快、更广泛地采用构建逻辑更新。现在可以通过检查项目的godel/godel.properties文件中的版本来确定项目使用的构建逻辑。更好的是,我们可以自动将构建系统升级推送到所有项目。在gödel出现之前,跨项目推出构建逻辑的更新是一个痛苦而耗时的过程,因此,许多脚本都过时了。随着时间的推移,免费dd和cc防御,在CI中重新运行构建时会更加一致。CI构建随着时间的推移并不稳定,因为我们的构建脚本用于安装检查逻辑。使用gödel锁定正在运行的检查和逻辑的版本,随着时间的推移,我们的构建增加了可复制性。由于我们的项目已经在哥德尔上标准化,开发人员可以更轻松地快速查看和贡献不同的项目,从而增加跨产品协作的数量,减少贡献和拉动请求。知识和价值的复合。有了gödel,构建系统的改进可以很容易地与我们的Go社区共享。例如,当我们想要创建一个允许项目构建其产品的Docker映像的任务时,开发人员很容易将此功能添加到gödel中,因为它已经有了产品及其发行版的概念。所有特定于构建的配置都集中在godel/config目录中的方式也使得团队可以轻松地检查彼此的配置,以确定如何执行某些操作。在过去,这种配置常常与脚本逻辑交织在一起,难以阅读和应用于其他项目。

结论