• <tr id='KWlDMZ'><strong id='KWlDMZ'></strong><small id='KWlDMZ'></small><button id='KWlDMZ'></button><li id='KWlDMZ'><noscript id='KWlDMZ'><big id='KWlDMZ'></big><dt id='KWlDMZ'></dt></noscript></li></tr><ol id='KWlDMZ'><option id='KWlDMZ'><table id='KWlDMZ'><blockquote id='KWlDMZ'><tbody id='KWlDMZ'></tbody></blockquote></table></option></ol><u id='KWlDMZ'></u><kbd id='KWlDMZ'><kbd id='KWlDMZ'></kbd></kbd>

    <code id='KWlDMZ'><strong id='KWlDMZ'></strong></code>

    <fieldset id='KWlDMZ'></fieldset>
          <span id='KWlDMZ'></span>

              <ins id='KWlDMZ'></ins>
              <acronym id='KWlDMZ'><em id='KWlDMZ'></em><td id='KWlDMZ'><div id='KWlDMZ'></div></td></acronym><address id='KWlDMZ'><big id='KWlDMZ'><big id='KWlDMZ'></big><legend id='KWlDMZ'></legend></big></address>

              <i id='KWlDMZ'><div id='KWlDMZ'><ins id='KWlDMZ'></ins></div></i>
              <i id='KWlDMZ'></i>
            1. <dl id='KWlDMZ'></dl>
              1. <blockquote id='KWlDMZ'><q id='KWlDMZ'><noscript id='KWlDMZ'></noscript><dt id='KWlDMZ'></dt></q></blockquote><noframes id='KWlDMZ'><i id='KWlDMZ'></i>

                软件交付:震撼局部最优化

                admin 软件开发 2018-11-30 10:18 0
                 

                 
                 这是一篇关于软件交付的文章,这是将代码推送到版本控制并在生产中使用它之间的神奇或繁重的领域。为什么软件交付很重要?因为软件很重要,而且软件开发人员很重要。我不希望我∞的软件交付方式不受影响; 我想让它成为一个更强大的开发者。
                 
                 从代码到生产的路径至关重要,因为它决定了我们的反馈循环的长度,因此决定了我们的改进速度和所有重要的  提前期。
                 
                 我们当前的工具认为交付是通用的 - 他们控制,我们填补空白。他们让我们构建,测试,部署。但是这些词对每个应用程→序,每个团队和每个企业都意味着不同的东西。在编写代码和运行代码之间还有很多工作要做,或者可以继续下去。经常有linting,批准和协调。需要考虑的数据和安全策略,业务团队结构和审计。还有其他一些我们不打扰的步骤,因为它们没有插槽:更新库,修复代码以满足标准,为仅文档更改采取不Ψ同的步骤。
                 
                 我们还没有想到什么,因为它不适合当前的工具集?我想从顶部考虑交货。通过这样做,我可以更好地理解我的工作。
                 
                 我们已经看到了运营技术的重大转变:容器,  日志聚合,  可观察性,  可编程基础设施和  Kubernetes。在我看来,Kubernetes的杀手级功能↙是它的API - 它可以通过自动化控制。它接受指令并发送事件。
                 
                 这里的潜力甚至比我们已经意识到的更大,无论是运营还【是交付。
                 
                 现代的运营选择已经达到了新的抽象水平和潜力。然而,交付方面的进展只是递增的。
                 
                 我们的工具是非常可配置的,带有插件和可编写脚本的位,我们总是可以回退到运行无限长度的shell脚本。但我们是否陷入了局部最优?我们的「想法够大吗?
                 
                 我们有什么
                 
                 今天流行的软件交付工具是空白的。当你不知道自己在做什么时,这非常适合入门。当您的业务增长时,您的交付不再是千篇一律的时候呢?我们来看两个例子。
                 
                 特拉维斯CI是我的最爱◣,因为它很容易上手。它将很乐意在其基础架构上免费构建任何公共GitHub存储库。如果我的存储库适合一些简单的配置文件,例如部署到Heroku的Rails应用程序,那么!您的存储库中有一些非常简单的YAML:
                 
                 
                 
                 我喜欢YAML。这是声明性的。它包含数据。它填补了Travis提供的空白。但是当你走出幸福的道路时,工具的真正衡量标准就出现ω了。你可以在特拉维斯做任何事情; 只需要调出一个shell脚本。这是我的.travis.yml文件中的一小部分:
                 
                 
                 
                 它有shell命令。if条件的Shell语法。而且灵活性无限,是对shell脚本的调用。这个travis-build.bash脚本恰好包含四个函数,八个条件和(如果我正确∞读取它)最多七个程序调用。
                 
                 这是编程,好吗?一旦你的YAML调用shell,它就不是声明性的。这是当务之急。或混合。
                 
                 这是编程,但我的YAML和Bash不符合软件资ω 格。Bash是一种脚本语言。它旨在将程序粘合在一起,而不是构建程序; 它缺少可封装的可组合模块。我可以没有类型,但在Bash你甚至没有声明函数参数!而且它充满了  陷阱。使用Bash擅长:调用其他程序。作为我们缺乏更高层次的灵活性的后备,Bash并没有发挥作用。
                 
                 YAML不是一种编程语言,虽然它支持  变量  并且有一些  陷阱。直到YAML包含执行的命令; 然后它变成了一个程序,与Bash相比,错误处↑理或清晰命名的选项更少。请使用YAML获取数据,而不是代码。
                 
                 编程和软件之间存在鸿沟。我们有软︾件标准:它具有设计领域驱动的设计,我们已经与专家合作。它有自动化测试。它具有模块化。它使用库和抽象。我想使用专为此设计的语言。
                 
                 跳到詹金斯。这比Travis更广泛地用于更广泛的交付流程。它可以在本地运行。有数百个插件可用。填补这么多空白!这么多选择!现在,有代码管道。首先,您可以编写一段Groovy来定义哪些存储库和分支获取管道。这使Jenkins对新的存储库和分支机构更加敏感。这是响应新项目的一个步骤。
                 
                 构建Jenkins的人认识到交付需要由控制代码的人员来控制。我们不是∑ 在GUI(hello,TeamCity)中构建每个存储库的构建,而是在每个存储库中放置一个Jenkins文件。那个文件在Groovy中。Groovy是一种编程语言,其背后是JVM的所有模块化和库。除此之外,你没有在Jenkinsfile中得到所有这些。你只限于Groovy 在Jenkins中运行时可用的内容  。如果您希望从一个存储库△到另一个存储库的一致性,您可以在Jenkins中安装自定义共享库并在每个Jenkins文件中调用它们。推出变革具有挑战性; 任何不同的Jenkinsfiles都可以在共享库更改后中断。它非常脆弱,仍然有限。这是进步。
                 
                 这是编程〖的一个步骤,但我仍然不会称之为软件。当我编写应用程序时,我的工作不仅仅是编程语言; 我在语言←系统工作。语言系统包括依赖关系管理,框架,链接,构建系统,编辑器,社区以及该语言中可用的整个库生态系统。例如,JVM,Node和.NET周围存在很好的语言系统。您运行的Groovy可以参与JVM语言系统,但在Jenkins中运行的Groovy没有此访问权限。Jenkinsfile DSL仍然是空白的。
                 

                 
                 我们需要的
                 
                 将交付作为◣软件构思邀请我们,开发团队成员,与当地专家坐下来讨论我们的部署环境和安全性以及其他问题。它邀请我们进行一次对话:这个团队在这个组织中,这个应用程序的交付意味着什么?我们在哪里需要一致性和可变性?然后,我们可以 在我们的业务环境和环境中创建和∴编码模型 - 软件交付领域的模型  。我们可以  集体讨论诸如推送或新存储库之类的事件以及我们希望始终发生的事情。我¤们可以将这些  部分  划分为特定于团队,特定于组织和社区(开源)。
                 
                 而不是,“如何运行构建?我们如何运行测试?“我们可以问,”代码推送后需要发生什么?“我们可以仔细考虑我们的工作方式,软件的工作原理以及我们√的业务如何运作。我们是自己交付的领域专家。
                 
                 这是我希望从上到下作为软件交付的首要原因。通过考虑作为软件交付,我们严格地考虑我们作为软件开发人员的工作。而且我们会变得更好。
                 
                 我想要的不只是交付代码。我想要作为软件交付。由我的团队自上而下控制,拥有丰富的图书馆生态系统,并为社区中常见的部分提◥供框架和服务。我希望交付的是事件驱动的,这是可测试的,并且在做出决定时与我沟通。
                 
                 自从自动部署之前的几天以来,我们已经走了很长的路。我们现有的持续集成/持续部署解■决方案尽可能为我们服务。渐进式更好(填空)不会将我们带到更高级别的软件交付,它也无法帮助我们达到软件开发人员的新水平。是时候打破这个局部的最佳状态了。
                 
                  我们走吧
                 
                 为此,我们编写了  软件定义交付宣言。说出你〗对宣言的要求:他们有一定的天赋,一定的影响力,对某个更美好世界的某种戏剧性渴望。这就是我㊣们在这里所表达的。是的,这对于开发团队来说是一个更好的世界,而且只适用于复杂组织中的开发团队。但是我们很重要!软件对世界产生巨大影响,为了使软件更好,我们需要更好地提供软件。让我们超越我们习以为常的东西。接受我们的工作不是编写代】码,而是在生产中运行有用的软件。通过在软件中建模,让我们在交付方面做得更好。
                 

                分享:

                扫一扫在手◎机阅读、分享本文

                发表评论

                评论列表(条)