开发环境与工具部署服务

多年以来,我是一名Smalltalk程序员,这种经验使我从不同的角度来观察编程世界中的思想。 例如,将源代码存储在文本文件中的想法已经习惯了一些。

作为程序员,我们经常在“开发”和“部署”之间进行区分,特别是我们在一个地方使用与部署软件后使用的工具不同的工具来开发软件的想法。 在Smalltalk的世界中,没有这种差异。

Smalltalk是基于包含您的开发环境(IDE,调试器,文本编辑器,版本控制等)的虚拟机的思想而建立的,如果您必须修改任何代码,则可以修改内存中的运行副本。 如果要对运行中的计算机进行快照,则可以这样做,并且如果要分发代码,则可以将运行中的计算机映像的副本(包括IDE,调试器,文本编辑器,版本控制等)发送到用户。 这就是90年代(对于我们中的某些人)软件开发的工作方式。

如今,部署环境与开发环境大不相同。 对于初学者,您不希望有任何开发工具。 部署后,将没有版本控制,调试和开发环境。 有我们在开发环境中没有的日志记录和监视,还有一个“构建管道”,它将我们的软件从我们开发的形式转换为部署的形式。 例如,Docker容器试图重获1990年代Smalltalk程序员的部署经验的某些简单性,而又不希望为开发经验做同样的事情。

我想如果Smalltalk世界是我唯一的未能在开发环境和部署环境之间进行区分的编程隐喻经验,那么我可能会fl幸地回顾它。 但是在我成为Smalltalk程序员之前,我曾是APL程序员,那也是一个可破解的虚拟机映像的世界,在其中无法清晰地进行开发和部署。 因此,我很确信当前的世界是people幸,在这个世界中,人们编辑了单独的源代码文件,然后运行构建管道来创建在编辑代码时不存在的部署工件,然后将这些工件部署给用户。 我们已经以某种方式使这种软件开发反模式制度化,并且不断发展的软件环境的要求正迫使我们寻找回到1990年代更有效的技术的途径。 因此,Docker取得了成功。 因此,需要我将要提出的建议。

我有两个建议:我们在运行时系统中实现(和使用)版本控制,并且我们通过对正在运行的系统进行更改来开发软件,而不是用新的正在运行的系统替换它们。 这两个想法是相关的。 为了安全地对正在运行的系统进行更改,我们需要某种版本控制功能来支持“撤消”功能。 也许可以说我只提出一个建议。 让我举例说明。

让我们从想象一个静态网站开始。 您想要更改一些HTML文件。 那应该如何工作? 如果您像大多数开发人员一样,将有两个,也许三个站点,一个站点用于开发,一个站点用于QA(或暂存),另一个站点用于生产。 您将直接在开发实例中编辑文件。 准备好后,您将“部署”对登台实例的更改。 在用户验收测试之后,您将再次部署,这一次将其投入生产。

使用Occam的Razor,让我们避免不必要地创建实体。 我们需要多少台机器? 我们可以使用一台计算机。 我们需要多少个Web服务器? 我们可以将单个Web服务器与多个虚拟主机一起使用。 我们可以使用一个虚拟主机,而不是多个虚拟主机吗? 然后,我们将需要多个目录,并且需要使用URL的顶级路径来区分不同的版本,而不是虚拟主机名。 但是为什么我们需要多个目录? 因为Web服务器将从文件系统提供静态资产。 我们的问题是目录有三个不同版本,我们的解决方案是制作目录的三个不同副本。 这不是Subversion和Git之类的版本控制系统要解决的问题吗? 制作目录的多个副本以存储多个版本的策略可以追溯到CVS之前的日子。 为什么不使用裸Git仓库来存储文件呢? 因为这样做,Web服务器将需要能够从git存储库中读取文件(请参阅mod_git )。

那将是一个支持版本控制的运行时系统。

使用这样的Web服务器,将通过例如标识它的cookie来标识所提供的版本。 这样,任何人都可以推送到一个存储库,并且用户在启动会话时将继续看到他们分配的版本。 版本控制系统具有不变的提交; 会话开始后,开发人员可以随时随地轻松地推动更改,而不会影响正在运行的用户。 开发人员可以重置其会话以跟踪其新提交,因此开发人员或测试人员可以使用与普通用户相同的URL和相同的服务器查看正在开发或测试中的版本。 作为一个偶然的副作用,A / B测试只是将不同的用户分配给不同的提交的一种情况。 用于管理多个版本的所有git工具都在运行环境中使用。 而且,当然,git reset为我们提供了前面提到的“撤消”功能。

为什么每个人都不这样做?

一种可能性是诸如版本控制系统之类的工具并非设计用于生产环境。 例如,不允许某人允许推送到测试分支,但不允许其推送到生产分支。 此方案最常见的反对意见是,如果发现了漏洞,则希望将某些提交标记为不可访问。 这将是更细粒度权限的另一种情况; 开发人员将具有对所有提交的读取访问权限,但外部用户则没有。 我们可能需要对现有工具进行一些额外的工程设计来支持这种范例,但是这些功能很容易理解,并且已经在其他软件工件中进行了工程设计。 例如,Linux(或PostgreSQL)实现了针对不同用户的细粒度权限的想法。

随着云环境变得越来越普遍,这些想法也变得越来越相关:云始终在运行。 例如,我们可以看到,等效于AWS的“文件系统”(S3)实现了版本控制,因此您可能对此想法有所不同,其中涉及一个Web服务器为S3提供资产,并使用会话信息选择不同的版本。这些资产。 重要的思想不是哪种实现是最好的,而是渴望支持运行时版本控制。

已部署的软件环境应具有“版本意识”的原则,除提供静态资产的Web服务器外,还扩展到其他工具。 在以后的文章中,我将介绍版本库,数据库和应用程序服务器的版本管理方法。

在Hobart的linux.conf.au 2017( #lca2017 )中的Robert Lefkowitz的演讲中了解更多信息: 保持Linux 出色 。

翻译自: https://opensource.com/article/17/1/difference-between-development-deployment

开发环境与工具部署服务

开发环境与工具部署服务_开发与部署之间的区别相关推荐

  1. c++游戏编程(1)开发环境与工具函数

    c++游戏编程(1)开发环境与工具函数 文章目录 c++游戏编程(1)开发环境与工具函数 前言 1.开发工具 2.工具函数 2.1 windows.h 2.1.1 _mkdir() 2.1.2 _rm ...

  2. PHP开发环境搭建工具有哪些?

    对于php开发小白来说搭建一个php运行环境就是一道坎! 因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境,一 ...

  3. Android连载之:第二章第三节:利用其他的开发环境和工具开发Android应用程序

    2.3 利用其他的开发环境和工具开发Android应用程序 推荐使用带有Android插件的Eclipse来开发Android应用程序,ADT插件提供了编辑.编译.调试功能并集成进了IDE中.然而,S ...

  4. 机器学习从理论到工程的第二步-开发环境与工具篇(下)

    好啦~继续昨天的<第二步--开发环境与工具篇(上)>~ 其实有点尴尬啦,本来想一篇讲完的,结果小夕太啰嗦了,还没有开始讲正文,就写了快2000字了...所以说,这一篇是上一篇的正文... ...

  5. 机器学习从理论到工程的第二步-开发环境与工具篇

    在<第一步-编程语言篇>中,小夕为大家较为详细的介绍了做机器学习(及其相关应用方向)的编程语言的选择问题,这一篇便是小夕为大家推荐的各个编程语言的开发环境/工具. 习惯性扫盲开篇.鉴于可能 ...

  6. tiny4412-arm嵌入式开发裸板驱动 (一):开发环境及工具搭建和介绍

    写在前面:在学习arm嵌入式时,发现网上exynos4412的资料很少(针对友善tiny4412开发板)走了很多弯路.把自己的学习经历写下来供参考.本人大学考研狗时间仓促,文章多有疏漏欢迎指正 一.开 ...

  7. DSP开发环境及工具之CCS

    DSP开发环境及工具之CCS CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU ...

  8. docker mysql开发环境_Docker 构建PHP+Apache+MySQL 开发环境

    文章目錄 通过Docker 构建PHP+Apache+MySQL 开发环境,所有的服务(Apache,MySQL)和语言环境(PHP)都将在容器中运行,代码编写在宿主机内编写,并在宿主机的浏览器进行查 ...

  9. python软件包自带的集成开发环境-Python的10大集成开发环境和代码编辑器(指南)...

    使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将大型的编程项目变成一个个充满绝望和沮丧的"坑".使用一款集成开发环境甚至是一款好 ...

最新文章

  1. 如何防止android app被误删除,如何避免手机清理缓存时误删了重要文件【注意事项】...
  2. 在Opendaylight中karaf启动的时候自动安装自己编写的feature
  3. TortoiseGit for windows安装与配置
  4. update,options
  5. linux编译boost
  6. spark学习:ContextCleaner清理器
  7. 时间序列与R语言应用(part4)--自回归AR模型及其平稳性条件
  8. Android之解决ViewPager2+PhotoView滑动图片花屏问题
  9. centos mysql pid_centos7 mysql The server quit without updating PID file(错误解决)
  10. 使用静态内置类实现线程安全的单例设计模式
  11. mongodbVUE基本操作(转)
  12. Oracle 10g 中 X$KCVFH 说明
  13. java的编程规范_JAVA编程规范-OOP规范
  14. linux+fstab挂载镜像,通过/etc/fstab自动挂载iso镜像的ISO格式问题
  15. 3.2 LSTM、GRU RNN概述
  16. 兼容ie\firefox\chrome的cursor
  17. 函数式编程-尾递归、尾调用
  18. hdu 1506:Largest Rectangle in a Histogram 【单调栈】
  19. Oracle 创建函数
  20. 【已解决】抖音如何取消关注已注销的账户

热门文章

  1. mysql使用二进制日志恢复数据
  2. java手动分页工具类
  3. ReactNative 踩坑之 iOS 原生组件
  4. 跨浏览器的placehold
  5. 修改am335x 制作android sd启动卡的bug
  6. Oracle 存储过程+JOB初学
  7. @Service @Autowired
  8. Oracle VM + Windows2003 Server 配置
  9. 将汉字转成拼音字头的方法
  10. 用C#改写Head First Design Patterns--SingleTon(原创)