自动化运维:如何零停机构建与部署项目

author author     2023-02-14     284

关键词:

本文,我们将向您展示如何配置一个流水线,该流水线将在​零停机​的情况下构建、测试和部署项目。零停机是一种部署技术,可让您在此过程中通过终端用户完全更新网站。

请确保在您服务器上安装SSH,因为我们需要使用SSH运行一些命令以修改部署。

新建项目

在此,我们将使用一个静态​React​网站作为演示,您可以从:​​GitHub存储仓上获取示例源码​​,此存储仓基于​​React快速上手文档​​创建。(React是一个用于构建用户界面的JavaScript库)

进入Buddy系统并新建一个项目。选择你的目标Git托管,在此我们使用Buddy系统自带的Git托管作为演示,当然您也可以使用其他的Git托管提供商:

自动化运维:如何零停机构建与部署项目_服务器

流水线配置

流水线是在存储仓代码环境中运行并在特定条件下触发的一组操作(例如构建、测试或部署)。

在这里,我们设置触发条件和要从中部署的分支。由于我们要全自动化,因此将触发模式设置为事件(自动)。我们使用的项目只有一个分支(master),因此保持默认:

构建配置

现在,Buddy将要求您向流水线添加操作。选择Node.js操作 – 我们将使用它作为构建的模板:

自动化运维:如何零停机构建与部署项目_DevOps_02

Buddy使用具有​​预配置环境的隔离容器​​作为构建模板

您可以在此处配置构建详情,例如使用的Node版本和将在容器中运行的命令。您可以保留默认命令 - 只需在行末添加​​npm run build​​:

npm install
npm test
npm run build

自动化运维:如何零停机构建与部署项目_DevOps_03

测试构建

运行流水线以查看一切是否正常。第一步,Buddy将从您的存储仓中提取最新更改并设置环境变量。在第二步中,Buddy将下载所需的依赖项并将其缓存在容器中 - 存留在那以供将来执行,这样您就不必再次进行下载。您可以单击正在运行的执行并展开操作中的日志以了解详细信息:

文件系统

执行完成后,将生成对流水线文件系统的构建。​​文件系统​​包含上次执行的修订版中存储仓的克隆、构建操作生成的工件以及手动上传的静态文件(例如配置文件)。您会注意到工件会标有一个小的宝石图标:

部署配置

下一步是添加一个操作,该操作会将我们的构建上传到服务器。在这种情况下,作为示例我们将通过SSH部署到腾讯云服务器,我们推荐使用SFTP作为传输操作:

虽然示例使用SFTP与​腾讯云​,但您也可以使用所需的任何服务器、私有云、专有云服务器,有如​阿里云​、​华为云​以及专有的Buddy操作集成​Azure​、​​AWS​​、​谷歌云​、​DigitalOcean​、​Heroku​、​Netlify​、​Vultr​、​Rackspace​等等。将来,我们还会集成更多便捷专有的Buddy操作云服务提供商集成。如果您是云服务提供商并欲提供Buddy操作集成,请通过此电子邮件联系我们:support@buddy.red

操作界面允许您配置部署详细信息:服务器的访问凭据、Buddy将从中上传文件路径以及服务器上的目标路径。您可以从多种身份验证方法中进行选择 - 我们始终建议使用 Buddy的工作区密钥作为最安全的身份验证方法。

在示例中,网站将从存储仓中的​​构建​​目录(源路径)部署到服务器上的​​/var/www/html/hello​​(远程路径):


自动化运维:如何零停机构建与部署项目_服务器_04

测试部署

单击Test action测试按钮以检查是否正确配置所有信息。Buddy将连接到服务器,上传测试文件,然后删除将测试文件删除。完成后保存设置单击运行流水线按钮或将某些内容推送到存储仓以触发流水线并将网站上传至服务器:

如果出现连接问题,请确保将​Buddy用于部署的IP列入白名单​​。

零停机部署

流水线现已完全正常运行:每当进行推送时,Buddy都会提取更改、运行单元测试、准备构建并将其上传到服务器。现在是时候让我们升级流程了,以确保应用程序在部署期间不会遭受任何停机。

我们将应用一个简易的技巧:首先将应用程序上传到新创建的文件夹,然后在部署完成后将服务处理过程切换到新路径位置。

编辑部署文件夹

单击部署操作以编辑其详细信息,并将部署到的文件夹(远程路径)更改为​​$BUDDY_EXECUTION_REVISION/​​。这将在每次执行时自动创建一个以当前部署的修订命名的新文件夹。如果您​​在GitHub上使用我们的项目​​,完整路径将如下所示:

/var/www/html/$BUDDY_EXECUTION_REVISION

自动化运维:如何零停机构建与部署项目_DevOps_05

Buddy将检测到远程路径已更改,并要求您采取措施。保持原样并单击继续 – 我们需要先在服务器上添加一些命令:

添加服务器命令

现在,我们将添加一个操作,该操作将连接到我们的服务器,并运行将在部署后将服务进程切换到新路径位置的命令。在操作名单中查找SSH:

自动化运维:如何零停机构建与部署项目_自动化运维_06

该操作以与部署完全相同的方式定义:您需要提供身份验证方式、服务器凭据以及将在其中执行命令的目录(将此目录保留为默认值)。当然,我们也需要适当的命令。填写服务器详细信息并将以下内容粘贴到命令窗口中:

#kill current http-server process
kill $(lsof -t -i:80) || true
#run maintenance page
http-server -p 80 /var/www/html/$BUDDY_EXECUTION_REVISION > http.log 2>&1 &

第一个命令将终止当前服务进程。第二个将从部署操作创建的新位置运行。

该操作应如下所示:

测试零停机部署

推送代码到存储仓以触发流水线或手动运行该流水线,并检查执行日志是否正确传递:

恭喜 – 您已成功将零停机部署引入交付流程!

jpom简介:简而轻的低侵入式在线构建自动部署日常运维项目监控软件

...Jpom简介:简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件1、项目信息2、项目部分截图3、其它简介4、部分安装形式Jpom简介:简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件1、项目信息Gitee开... 查看详情

如何在集群环境中进行零停机时间部署?

】如何在集群环境中进行零停机时间部署?【英文标题】:Howcanidozerodowntimedeploymentonclusterenvironment?【发布时间】:2012-03-2805:04:59【问题描述】:我需要在我的系统上部署一个主要部署(超过15个ear文件),我的系统是高可用系统... 查看详情

持续集成与持续部署宝典part1:将构建环境容器化

...;但在本系列文章中,我们会更着重于探讨在容器时代,如何在基于Docker的环境中复制这些工作流。另外 查看详情

如何通过数据库更新实现对 Azure Web 应用程序的零停机部署?

】如何通过数据库更新实现对AzureWeb应用程序的零停机部署?【英文标题】:HowtoachievezerodowntimedeploymenttoAzurewebappwithdatabaseupdates?【发布时间】:2017-04-0800:31:47【问题描述】:我正在尝试实现一个AzureWeb应用的零停机时间部署,其... 查看详情

运维与自动化系列④自动化部署基础与git

运维与自动化系列④自动化部署基础与git自动化部署基础与git一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有用svn的公司,趋势是git... 查看详情

单页应用程序 (SPA) 的零停机/蓝绿部署

】单页应用程序(SPA)的零停机/蓝绿部署【英文标题】:Zerodowntime/blue-greendeploymentofSinglePageApplication(SPA)【发布时间】:2017-02-1309:23:40【问题描述】:昨天我们与团队一起讨论了使用零停机时间部署来支持我们的单页应用程序的可... 查看详情

从零构建可视化jar包部署平台jarmanage(代码片段)

...工作中之前也总结了windows的Jar包部署工具与linux下的jar包自动化部署脚本,这次就想着否能将二者统一结合,本着简单/高效/功能专一的原则,做出一个可视化jar包部署平台,JarManage应运而生功能介绍项目地址:https://gitee.com/code... 查看详情

运维与自动化运维

搭服务(部署并运行起来)用好(监控、管理、优化)自动化(服务直接的关联和协同工作)产品设计(如何设计一个监控系统)系统架构师:网络系统数据库 开发云计算 自动化运维管理  服务管理 项目管理... 查看详情

微服务架构的零停机部署

】微服务架构的零停机部署【英文标题】:ZeroDowntimeDeploymentforMicroServicearchitecture【发布时间】:2017-02-1606:01:09【问题描述】:目前我正在开发一个基于微服务架构的应用程序。作为主要技术,我们计划在每个微服务开发中使用Sp... 查看详情

[首发]国内某大型银行的持续集成与交付实践

...付的能力,降低应用部署发布的操作风险。通过引入构建自动化及可视化的软件交付流水线,整合从开发、构建、测试、部署、发布、运维等多个环节,加强各职能团队协助和沟通,全面实现项目构建持续自动化管理。二、实施... 查看详情

springcloud+docker+jenkins+gitlab+maven实现自动化构建与部署实战(代码片段)

...er、Jenkins、GitLab、Git、JDK、SpringBoot、Maven等技术结合实现自动化运维部署 查看详情

springcloud+docker+jenkins+gitlab+maven实现自动化构建与部署实战(代码片段)

...er、Jenkins、GitLab、Git、JDK、SpringBoot、Maven等技术结合实现自动化运维部署 查看详情

ansible自动化运维管理工具的概述与部署(代码片段)

Ansible自动化运维管理工具的概述与部署项目总体思路一、Ansible概述二、ansible环境安装部署三、ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping模块10.yum模块11.service/systemd模... 查看详情

ansible自动化运维管理工具的概述与部署(代码片段)

Ansible自动化运维管理工具的概述与部署项目总体思路一、Ansible概述二、ansible环境安装部署三、ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping模块10.yum模块11.service/systemd模... 查看详情

linux企业运维——docker安装部署与镜像构建

Linux企业运维——Docker(一)安装部署与镜像构建文章目录Linux企业运维——Docker(一)安装部署与镜像构建1、Docker简介2、Docker安装及简单使用3、Docker镜像的构建3.1、构建方法一3.2、构建方法二1、Docker简介Docker... 查看详情

docker环境下的前后端分离项目部署与运维项目简介及环境要求

项目简介本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能、高负载、高可用的部署方案。包括了MySQL集群、Redis集群、负载均衡、双机热备等等。部... 查看详情

jenkins与gitlib实现自动化部署与持续构建(代码片段)

Jenkins概念Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许... 查看详情

rainbond结合jpom实现云原生&本地一体化项目管理(代码片段)

Jpom是一个简而轻的低侵入式在线构建、自动部署、日常运维、项目运维监控软件。提供了:节点管理:集群节点,统一管理多节点的项目,实现快速一键分发项目文件项目管理:创建、启动、停止、实时查看项目控制台日志,... 查看详情