本文,咱们将向您展现如何装备一个流水线,该流水线将在零停机的情况下构建、测验和布置项目。零停机是一种布置技术,可让您在此进程中经过终端用户彻底更新网站。

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

请保证在您服务器上安装SSH,由于咱们需求运用SSH运转一些指令以修正布置。

新建项目

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

进入Buddy体系并新建一个项目。挑选你的方针Git保管,在此咱们运用Buddy体系自带的Git保管作为演示,当然您也能够运用其他的Git保管供给商:

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

流水线装备

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

在这里,咱们设置触发条件和要从中布置的分支。由于咱们要全主动化,因此将触发形式设置为事情(主动)。咱们运用的项目只有一个分支(master),因此保持默许:

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

构建装备

现在,Buddy将要求您向流水线增加操作。挑选Node.js操作 – 咱们将运用它作为构建的模板:

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

Buddy运用具有预装备环境的隔离容器作为构建模板

您能够在此处装备构建概况,例如运用的Node版别和将在容器中运转的指令。您能够保留默许指令 – 只需在行末增加npm run build

npm install
npm test
npm run build

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

测验构建

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

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

文件体系

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

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

布置装备

下一步是增加一个操作,该操作会将咱们的构建上传到服务器。在这种情况下,作为示例咱们将经过SSH布置到腾讯云服务器,咱们推荐运用SFTP作为传输操作:

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

尽管示例运用SFTP与腾讯云,但您也能够运用所需的任何服务器、私有云、专有云服务器,有如阿里云华为云以及专有的Buddy操作集成AzureAWS谷歌DigitalOceanHerokuNetlifyVultrRackspace等等。将来,咱们还会集成更多便捷专有的Buddy操作云服务供给商集成。假如您是云服务供给商并欲供给Buddy操作集成,请经过此电子邮件联络咱们:support@buddy.red

操作界面答应您装备布置详细信息:服务器的拜访凭证、Buddy将从中上传文件途径以及服务器上的方针途径。您能够从多种身份验证办法中进行挑选 – 咱们一直主张运用 Buddy的作业区密钥作为最安全的身份验证办法。

在示例中,网站将从存储仓中的构建目录(源途径)布置到服务器上的/var/www/html/hello(长途途径):

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

测验布置

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

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

假如出现连接问题,请保证将Buddy用于布置的IP列入白名单。

零停机布置

流水线现已彻底正常运转:每逢进行推送时,Buddy都会提取更改、运转单元测验、准备构建并将其上传到服务器。现在是时候让咱们晋级流程了,以保证运用程序在布置期间不会遭受任何停机。

咱们将运用一个简易的技巧:首先将运用程序上传到新创立的文件夹,然后在布置完成后将服务处理进程切换到新途径方位。

修正布置文件夹

单击布置操作以修正其详细信息,并将布置到的文件夹(长途途径)更改为$BUDDY_EXECUTION_REVISION/。这将在每次履行时主动创立一个以当时布置的修订命名的新文件夹。假如您在GitHub上运用咱们的项目,完好途径将如下所示:

/var/www/html/$BUDDY_EXECUTION_REVISION

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

Buddy将检测到长途途径已更改,并要求您采纳办法。保持原样并单击持续 – 咱们需求先在服务器上增加一些指令:

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

增加服务器指令

现在,咱们将增加一个操作,该操作将连接到咱们的服务器,并运转将在布置后将服务进程切换到新途径方位的指令。在操作名单中查找SSH:

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

该操作以与布置彻底相同的方法界说:您需求供给身份验证方法、服务器凭证以及将在其中履行指令的目录(将此目录保留为默许值)。当然,咱们也需求恰当的指令。填写服务器详细信息并将以下内容粘贴到指令窗口中:

#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 &

第一个指令将停止当时服务进程。第二个将从布置操作创立的新方位运转。

该操作应如下所示:

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

测验零停机布置

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

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

祝贺 – 您已成功将零停机布置引进交付流程!

请注意,此示例中的运用程序能够在几秒钟内完成布置,并且不需求绝对100%的正常上线运转时间。此方案最适合用于或许需求几分钟(甚至几小时)才能完成上传的杂乱网站与程序布置。

暂存环境装备

在将网站布置到出产服务器之前,最好在暂存服务器上预览更改,并或许运转一些端到端测验。在本文的这一部分中,咱们将重新装备流水线以从端口3000为网站供给服务,并将布置到出产环境 – 但仅在手动承认更改后。

创立暂存服务器

第一步是增加另一个SSH操作,该操作将在服务器上创立新的服务进程。您能够运用操作增加界面上的复制选项,而不是从头开始装备所有内容:

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

复制时,将项目和流水线保留为默许值,但不要复制所有操作,而是仅挑选SSH操作:

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

流水线中应有两个相同的SSH操作。单击第一个以修正其详细信息并将端口从80更改为3000

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

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

完好的流水线应如下所示,第一个SSH操作设置为端口3000,第二个设置为端口80

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

为避免混杂,最好将两个SSH操作的默许称号重命名为两个带不同说明的称号,例如:暂存服务器操作出产服务器操作。您能够在“概述”设置选项卡中履行此操作。

增加手动承认

在每次推送时将网站布置到出产环境而不查看更改是一项有风险的事务。除非测验彻底包括该进程并经过多个环境发布,否则强烈主张将流水线触发形式切换为手动,或许在布置到出产环境之前增加手动承认过程 – 最终一个是咱们现在要做的:

单击最终发布过程之前的 + 按钮,然后在操作列表中查找等候批阅

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

您能够在此处界说问题并将批阅权限限制为选定的用户组:

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

现在,一旦运转流水线,它将主动停止并且在承认更改之前不会持续运转。但是怎样让批阅人员知道有一个网站在等候他们的同意呢?

这时,咱们将给他们发送提醒告诉。

告诉用户布置

再次单击 + 按钮 – 这次是在同意操作之前。跳转到右列中的告诉,然后挑选您的首选服务:

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

在此示例中,咱们将运用 Slack,由于它是用户中最受欢迎的告诉服务。

每逢您首次增加与第三方服务集成的操作时,Buddy都会要求您装备集成详细信息。在此,您能够界说集成的权限范围,即谁能够修正其详细信息并增加需求它的流水线操作:

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

最终一步是接受所选运用程序的OAuth权限:

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

装备集成后,您能够指定消息。最好将 URL 粘贴到暂存网站,以便团队成员能够快速拜访:

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

测验暂存至出产布置

对网站进行一些更改并运转流水线。履行应在发布到出产环境之前停止:

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

您还应在所选服务中收到告诉:

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

单击同意按钮以持续履行剩下操作并实时发布网站。

祝贺 – 您已成功为您的网站创立完好的暂存/出产交付流水线!

附加: 条件告诉

流水线现已彻底正常运转。它无需停机即可交付运用程序,将网站上传到暂存服务器,告诉团队有新版别等候批阅,并在更改获得同意后将其发布到出产环境。

但是,假如在此进程中出现问题怎样办?例如,假如测验失败怎样办?好吧,首先要做的是告诉相关人员。咱们现已针对有才能的开发人员供给了有关新版别的告诉操作。但是,在这种情况下,咱们需求告诉QA或Dev – 但前提是流水线遇到中断。

转到流水线总览,然后单击于失败标签按钮:

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

增加您挑选的其他告诉。修正邮件并挑选正确的频道/收件人:

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

测验条件告诉

是时候进入好玩的部分了 – 故意损坏您的网站。例如,让咱们在 /src/App.test.js 搞坏一个import损坏:

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

推送更改以触发流水线。履行将在测验这一过程上失败,除了最终的告诉不会履行进一步的操作:

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

附加: 终端调试

Buddy有一个很酷的功能,让你直接从终端调试错误。请转到所需的履行进行拜访,然后在失败的操作上单击“在终端中调试操作”:

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

Buddy将发动容器备份,答应您在交互形式下运转指令并调试问题:

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

请注意,终端调试被视为正常履行。除非作业区中具有并行性操作,否则任何后续履行都将进入列队排队履行。

总结

本文介绍的做法包括了运用Buddy进行持续集成和布置的基础知识。就软件发布频率而言,仅运用布置主动化自身就是一个职业的改动者,极大地提高了效率和作业条件。流水线和可视化界面的灵活性,可让您在不参考文档的情况下即时增加和删去操作,而Docker容器可保证整个团队的环境保持一致。

总而言之,Buddy更像是一个开发运维大舞台,您能够在其中创立主动化作业流程,就像建造房子相同:挑选您需求的材料,在必要时进行调整,怎样舒适怎样办。但不要认为仅仅徒有其表,由于Buddy与您迄今为止或许运用过的任何其他CI/CD工具相同强大 – 它仅仅降低了DevOps入门门槛,并把人们认为不流畅的DevOps变得简单易用。