将源代码从Git平台部署至组件容器有很多种可以选择的方法,包括重新部署整个容器,通过卷即时重新部署,或者使用“git clone”的方法。但是,当这个过程自动化并转向持续部署时,许多开发人员可能会面临复杂性,因为他们需要知道如何将所有应用程序组件与所需的对接点正确组合。
具体而言,在组件容器领域,您必须管理堆栈映像的构建,以处理CI / CD管道的额外复杂性。并且如果在操作系统、应用程序服务器堆栈或其依赖关系没有进行配置更改的情况下频繁提交,则重新部署整个容器的方法就显得捉襟见肘。
为了简化自动部署,Jelastic准备了一个专门的Git-Push-Deploy包,用于将代码传输到初步构建的容器映像中。这个包实现了许多配置操作,以便在Git应用程序源代码库中将已提交的更改自动部署到云中,从而使它们可用于进一步的测试,延迟时间最短。
Git-Push-Deploy细节
Git-Push-Deploy软件包可以与GitHub和GitLab软件库集成。它开发用于在Java,PHP,Ruby,Node.js和Python应用程序源中自动传送更新,并可应用于以下经过认证的堆栈模板:
·Java - Tomcat 6/7/8/9,TomEE,GlassFish 3/4,Jetty 6/8/9,WildFly 8/9/10,JBoss AS 7,Spring Boot 1.x
·PHP - Apache 2.4,NGINX 1.10
·Ruby - Apache 2.4,NGINX 1.10
·Node.js - Node.js 0.x-6.x
·Python - Apache 2.4
工作流程取决于您项目中使用的编程语言:
·对于基于Java的项目,软件包将使包含一个Maven构建节点的独立环境的创建开始启动,该构建节点将负责与远程Git存储库进行交互,从而触发您的应用程序构建并将其部署到应用程序服务器。
·对于PHP / Ruby / Node.js / Python应用程序,程序包会将项目部署的通道直接设置到Web服务器上的ROOT上下文中(在这里,请考虑Ruby应用程序服务器提供了部署模式而不是控制面板,即便实际的项目位置是相同的)。
这个自动部署软件包与4.9.5及更高版本的Jelastic PaaS兼容。要查看和比较可用的主机平台和特定的Jelastic版本,请参阅Jelastic Cloud Union目录。
版本库预配置
为了恰当的附加包安装,您需要为您的Git帐户提供个人API令牌。这使软件包能够为相应的存储库设置一个Webhook,每次对其代码进行修改时,都会启动应用程序重新部署。
所以让我们着手创建一个吧。根据使用的Git VCS,即GitHub或GitLab,按照以下说明进行操作。
在GitHub上生成访问令牌
要获取您 的GitHub帐户的个人访问令牌,请导航至设置>个人访问令牌,然后单击生成新令牌按钮。
在打开的页面中,指定令牌描述并选择repo和admin:repo_hook选项。点击页面底部的生成令牌。
一旦重定向,复制并保存所显示的任何其他访问令牌的地方(因为它离开这个页面后就不能再次查看)。
完成该操作后,继续本文中的“安装Git-Push-Deploy软件包”部分。
在GitLab上生成访问令牌
要在GitLab上生成 个人访问令牌,请输入您的帐户设置并切换到访问令牌选项卡。
在这里,指定可选的令牌名称,其截止日期(可以留空)并勾选api权限范围。
点击创建个人访问令牌按钮。
在打开的页面中,将您的访问令牌值复制并临时存储在其他任何地方(因为离开此页面后将无法再看到它)。
添加描述
现在,您已经准备好安装软件包了。
Java项目的额外预配置
如果运行基于Java的项目,您需要通过在其结构中添加一个特殊的项目对象模型(简称POM)文件来初步确保与Maven构建节点的正确交互。
因此,在您的项目存储库根目录中创建一个pom.xml文件,并将以下内容作为强制性依据:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<build>
<finalName>${project.artifactId}</finalName>
</build>
</project>
可选值如下:
·groupId - 项目组(例如公司名称)。
·artifactId - 项目的名称。
·版本 - 您的应用程序版本。
剩下的参数应该保持不变。您可以检查我们的示范是如何完成的。
安装Git-Push-Deploy软件包
Git-Push-Deploy包是一个附加组件,所以它只能安装在环境之上。我们使用Tomcat和Apache-PHP应用程序服务器准备了两个独立的环境,以显示不同编程语言的工作流程。
如果您要使用以前创建的环境,请注意该程序包将覆盖掉部署到ROOT文件中的应用程序 。所以要保留已经部署的应用程序,请将其移动到自定义文件中。我们建议创建一个新的环境,然后继续安装:
1.单击控制面板顶部窗格上的导入按钮,并在打开的URL选项卡中为Git-Push-Deploy项目插入 manifest.jps链接:
https://github.com/jelastic-jps/git-push-deploy/blob/master/manifest.jps
点击导入继续。
2.在打开的框架中,指定有关您的存储库和目标环境的以下详细信息:
·Git Repo URL - HTTPS链接到您的应用程序repo(git文件或通用视图)。您可以分叉我们的示例 Hello World应用程序来测试流程。
·分支 - 要使用的项目分支。
·用户 - 输入您的Git帐户登录。
·令牌(Token) - 指定您之前为webhook生成创建的访问令牌。
·环境名称 - 选择将部署应用程序的环境。
·节点 - 应用程序服务器名称(在选择环境后自动提取)。
点击安装继续。
3.等待Jelastic从GitHub获取应用程序源并配置webhook以进行一系列部署。
安装完成后关闭通知框架。
4.根据项目类型,结果如下所示:
·对于基于Java的基础架构,您会看到在您的控制面板中出现了一个新的环境,其中包含一个Maven构建节点; 它会在每次更新源代码时,将您的应用程序构建并部署到Web服务器上的ROOT上下文中
请注意,Maven可能需要一些时间来编译一个项目(虽然包安装本身已经完成),所以你需要等待几分钟才能启动它。该操作的当前进度可以通过Maven 上的vcs_update日志文件实时跟踪:
·对于基于PHP的基础架构(以及其他支持的语言),您的应用程序将直接部署到所选的服务器ROOT。
因此,考虑到Ruby应用程序服务器的类似的Projects部分提供了有关使用的部署模式(默认开发)而不是文件夹的信息,而实际的应用程序位置也指向服务器根目录。
要启动您的应用程序,请单击Web服务器旁边的“ 在浏览器中打开”。
就是这样!现在,每次提交到存储库时,都会自动将新版本的应用程序传送到应用程序服务器。
不同堆栈的重新部署策略
下表列出了在收到更新代码后,不同应用程序服务器的行为。
堆栈名称 | 更新策略 |
---|---|
Tomcat 6 | 重新开始 |
Tomcat 7 | 重新开始 |
Tomcat 8 | 重新开始 |
Tomcat 9 | 重新开始 |
TomEE | 重新开始 |
GlassFish 3 | 通过服务器API即时再部署 |
GlassFish 4 | 通过服务器API即时再部署 |
GlassFish 5 | 通过服务器API即时再部署 |
Jetty 6 | 重新开始 |
Jetty 8 | 重新开始 |
Jetty 9 | 重新开始 |
JBoss 7 | 重新开始 |
Wildfly 8 | 重新开始 |
Wildfly 9 | 重新开始 |
Wildfly 10 | 重新开始 |
Railo | 重新开始 |
SpringBoot | 重新开始 |
Apache-PHP | 高级ZDT |
Nginx-PHP | 高级ZDT |
Apache-Ruby | 平滑重载 |
Nginx-Ruby | 平滑重载 |
NodeJS | 重新开始 |
Python | 重新开始 |
要为具有重新开始更新策略的服务器消除可能会有的应用程序停机时间,请将其扩展为在多个组件容器上运行。在这种情况下,所需更新将按顺序应用于实例,缺省情况下延迟时间为30秒。
从Git测试自动部署
现在让我们来看看这个过程是如何工作的。对回购代码做一些小的调整,确保一切都自动化:
1.点击编辑你的项目库中的某个项目的文件,并提交更改 - 例如,我们将修改我们的HelloWorld开始页面的文本。
2.因此,将触发相应的webhook将所做的更改部署到您的主机环境中 - 有关详细信息,请参阅存储库设置> Webhooks部分。
点击这个字符串,你会看到由webhook发起的最近交付列表,以及他们执行的结果。
3.作为最后一个检查点,返回到您的应用程序页面并刷新它(同时记住Maven可能需要额外的时间来构建和部署您的基于Java的项目)。
就是这样!如您所见,修改已成功应用,进而解决方案也会预料之中地生效。
只需简单更新您的代码,像平常一样进行提交,所有更改将自动推送到您的Jelastic环境。无需在流程之间切换,也无需进行手动更新,消除了人为错误,加快了应用程序的上市时间。