拓展阅读

Devops-01-devops 是什么?

Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件

代码质量管理 SonarQube-01-入门介绍

项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业性应用软件

项目管理平台-01-Phabricator 入门介绍 一套集成的强大工具,帮助公司构建更高质量的软件

持续集成平台 01 jenkins 入门介绍

持续集成平台 02 jenkins plugin 插件

软件部署

软件部署(英语:Software deployment)是为将一个软件系统投入使用而进行的所有活动,[1]包括硬件配置、软件的安装、环境变量设置等。

在一些机器上批量安装某一程序也称为软件部署,分为指派与发布两种类型。

一般的部署过程包含若干相互关联的活动,并且可能在它们之间有转换。

这些活动可以发生在生产方、消费者方或两者之间。由于每个软件系统都是独特的,因此很难定义每个活动内的具体过程或程序。

因此,“部署”应被理解为一个通用过程,必须根据具体的要求或特征进行定制。

历史

在计算机非常庞大、昂贵且笨重(如主机和小型机)的时候,软件通常由制造商与硬件捆绑在一起。

如果商业软件需要安装在现有的计算机上,这可能需要系统架构师或顾问进行一次昂贵且耗时的访问。今天,对于企业软件的复杂本地安装,这种情况有时仍然存在。

然而,随着1980年代微型计算机的新市场软件的发展,出现了新的软件分发形式——最初是卡带,然后是紧凑磁带、软盘,接着(在1990年代及以后)是光盘、互联网和闪存驱动器。这意味着软件部署可以交由客户来完成。

然而,随着时间的推移,人们逐渐认识到,客户对软件的配置也很重要,而且理想情况下,这应该有一个用户友好的界面(而不是要求客户编辑Windows注册表条目)。

在互联网之前的软件部署中,部署(以及与其密切相关的新版软件发布)本质上是昂贵、不频繁且庞大的事务。

因此,可以说互联网的普及使得端到端的敏捷软件开发成为可能。事实上,云计算和软件即服务的出现意味着软件可以在几分钟内通过互联网部署到大量客户手中。

这也意味着部署计划通常由软件供应商决定,而不是由客户决定。这种灵活性促使了持续交付成为一种可行的选项,尤其是对于风险较低的Web应用程序。

其他软件部署选项包括蓝绿部署和金丝雀发布部署。

部署活动

发布

发布活动紧接着完成开发过程,且有时被归类为开发过程的一部分,而不是部署过程。它包括为系统的组装和传输做好准备的所有操作,以便在生产环境中的计算机系统上运行。因此,这有时涉及到确定系统所需的资源,以便在可接受的性能范围内运行,以及计划和/或文档化后续的部署活动。

安装与激活

  • 安装:对于简单系统,安装通常涉及为执行软件创建某种形式的命令、快捷方式、脚本或服务(可以是手动或自动)。对于复杂系统,可能还包括系统的配置——可能通过询问最终用户系统的预期用途,或者直接询问他们如何配置系统——以及/或者使所有必需的子系统准备好使用。

  • 激活:激活是指首次启动软件的可执行组件(与数字版权管理系统中的“激活”功能不同)。在更大的服务器软件部署中,用户将使用的软件的主副本(“生产版”)可能会安装在生产服务器上的生产环境中。部署的软件的其他版本可能会安装在测试环境、开发环境和灾备环境中。

在复杂的持续交付环境和/或软件即服务系统中,系统可能会为不同的内部或外部客户同时存在不同配置的版本(这被称为多租户架构),或者甚至会并行地逐步推出给不同的客户群体,并有可能取消一个或多个并行的部署。例如,Twitter就采用了这种方法来进行新功能和用户界面更改的A/B测试。在生产环境中,还可以创建一个“隐藏的在线”组,由尚未连接到生产负载均衡器的服务器组成,用于蓝绿部署的目的。

停用

停用是激活的反义词,指的是关闭已经在运行的系统组件。停用通常是执行其他部署活动所必需的,例如,软件系统可能需要在执行更新之前先进行停用。移除不常用或过时的系统服务通常称为“应用退役”或“应用停用”。

卸载

卸载是安装的反义词,指的是移除不再需要的系统。它可能还涉及到对其他软件系统的重新配置,以删除已卸载系统的依赖关系。

更新

更新过程是用一个较新版本的全部或部分软件系统替换旧版本。它通常包括停用和随后的安装。

在一些系统中,如使用Linux系统包管理器时,旧版本的应用通常也会作为自动过程的一部分被卸载。(这是因为Linux的包管理器通常不支持同时安装同一软件应用的多个版本,除非该软件包被特别设计来规避这一限制。)

内置更新

一些软件系统(或者在某些操作系统中,如Linux、Android和iOS,内置在操作系统本身)的更新机制是自动化的,更新过程从完全自动化到用户启动和控制不等。例如,Norton Internet Security具有半自动方法来检索并安装包括杀毒定义和系统其他组件的更新。其他软件产品提供查询机制,用以确定是否有更新可用。

版本跟踪

版本跟踪系统帮助用户找到并安装软件系统的更新。例如:软件目录存储每个软件包安装的版本和其他信息。

点击一个按钮会启动浏览器窗口,指向应用的升级网页,包括自动填写需要登录的网站的用户名和密码。

在Linux、Android和iOS中,这个过程更加简便,因为操作系统内置了标准化的版本跟踪过程(针对以官方支持的方式安装的软件包),所以不需要单独的登录、下载和执行步骤——因此,该过程可以配置为完全自动化。某些第三方软件还支持某些Windows软件包的自动版本跟踪和升级。

部署角色

软件产品的复杂性和多样性促使了专门角色的出现,用于协调和工程化部署过程。

对于桌面系统,最终用户通常也成为“软件部署者”,当他们在自己的机器上安装软件包时便是如此。

而企业软件的部署涉及更多的角色,这些角色通常随着应用从测试(预生产)环境过渡到生产环境而发生变化。典型的企业应用软件部署涉及的角色包括:

在预生产环境中的角色:

  • 应用开发人员:负责软件开发过程的各个方面,确保应用的功能、性能和稳定性符合要求。
  • 构建与发布工程师:负责软件版本的构建和发布,包括生成构建过程中的所有文件,确保发布过程无误。
  • 发布经理:负责协调所有发布活动,确保发布按计划进行,协调开发、测试和运维之间的工作。
  • 部署协调员:通常属于DevOps团队,负责确保应用和系统的部署顺利进行,协调开发、测试和运维团队的工作,确保各方配合良好。

在生产环境中的角色:

  • 系统管理员:负责管理和维护服务器、操作系统和网络等基础设施,确保生产环境的稳定运行。
  • 数据库管理员:负责管理数据库系统,包括性能优化、备份和恢复、数据库安全等。
  • 发布协调员:通常也是DevOps团队的一部分,负责在生产环境中管理和执行软件的发布,确保新版本平稳上线。
  • 运营项目经理:依据ITIL(信息技术基础设施库)框架,负责整个运营阶段的项目管理,确保生产环境的可用性和服务的连续性,解决运营中的各类问题。

随着企业规模的扩大和软件系统的复杂性增加,这些角色可能会进一步细化,某些职责可能会由多个团队或个人共同承担。

DevOps和ITIL等方法论的引入进一步推动了这些角色的专业化和细化。

参考资料

https://en.wikipedia.org/wiki/Software_deployment