将代码从Git自动部署到容器

本文讲的是将代码从Git自动部署到容器【编者的话】将您的代码从您的Git仓库转移到您的容器可能是一件痛苦的工作。本文介绍了如何实现自动化部署。

【烧脑式Kubernetes实战训练营】本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理、Kubernetes DNS与服务发现、基于Kubernetes和Jenkins的持续部署方案 、Kubernetes网络部署实践、监控、日志、Kubernetes与云原生应用、在CentOS中部署Kubernetes集群、Kubernetes中的容器设计模式、开发Kubernetes原生应用步骤介绍等。

有许多方法可以将您的源代码从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 context上设置了一个管道(这里,认为 Ruby应用程序服务器提供的是一种部署模式,而不是dashboard的context,尽管实际项目位置是相同的)。

这个部署自动化包与4.9.5版本的Jelastic PaaS以及更高版本兼容。要查看和比较可用的管理平台和特定的Jelastic版本,请参考Jelastic Cloud Union目录。

库预配置

对于特定的附加安装,您需要为您的Git帐户提供一个个人的API Token。这可以使包为对应的存储源设置一个webhook,在每次更改代码并使其生效时,来初始化重新部署应用。

我们来生成一个。根据你所使用的Git VCS,GitHub或者GitLab对应以下指示进行操作。

在GitHub上生成Access Token

要为您的GitHub帐户获取您的personal access token,请访问Settings > Personal access tokens然后点 Generate new token按钮。

在打开的页面中,选定Token description,并选择repo和admin:repohook,在页面底部单击Generate token。

将生成的access token复制保存起来(因为离开这个页面之后,就不能再被查看)。

完成这一步之后,开始继续安装Git-Push-Deploy包。

在GitLab上生成Access Token

要在GitLab生成一个personal access token,进入您的帐户settings并切换到Access Tokens。

在这里,指定可选的token名称,它的到期日期(可以留空),并勾选api权限范围。

点击 Create Personal Access Token按钮。

在打开的页面中,复制并临时将您的访问令牌值存储在其他地方(因为离开本页后您将无法再次看到它)。

现在,您已经准备好继续安装Git-Push-Deploy包了。

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-项目的名称。
  • version -应用版本。

其余的参数都应该保持不变。您可以在我们的示例中查看如何配置。

安装Git-Push-Deploy包

Git-Push-Deploy包是一个附加组件,因此它只能安装在一个环境的顶部。我们已经准备了两个独立的环境,分别使用Tomcat和apache-php应用程序服务器来展示不同编程语言的工作流。

如果你打算使用以前创建的环境,请注意这个包将覆盖部署到根目录的应用程序。因此,为了保持已经部署的应用程序,将其移动到用户目录。我们建议创建一个新的环境,然后进行接下来的安装:

1、单击dashboard顶部窗格中的Import按钮,在打开的URL选项卡中插入一个manifest.jps链接:https://github.com/jelastic-jp ... t.jps

单击Import 继续。

2、在打开的框架中,指定关于源和目标环境的详细信息:

  • Git Repo URL – HTTPS连接到你的应用程序的“repo“(或者 .git或普通视图)。您可以fork我们的示例Hello World应用程序来测试流。
  • Branch – 项目分支。
  • User – 输入您的Git登录帐户。
  • Token –指定您之前为webhook生成创建的 access token。
  • Environment name – 选择要部署应用程序的环境。
  • Nodes – 应用程序服务器名(在选择环境时自动获取)。

单击“Install ”继续。

3、等一分钟让Jelastic从GitHub获取应用程序资源,配置webhook以进行接下来的部署。

安装完成后点击“Close“关闭通知框。

4、根据项目类型的不同,会有如下结果:

  • 对于基于Java的基础设施,您将在dashboard中看到一个新的环境,其中包含Maven构建节点;它将在每次更新源代码时,在Web服务器上构建和部署应用程序到Root context下。

    请注意,Maven可能需要花费一些时间来编译一个项目(尽管包安装本身已经完成了),因此您需要等待几分钟才能启动它。这个操作的当前进展可以通过Maven的vcs_update 日志文件实时跟踪。

  • 对于基于PHP的基础设施(以及其他受支持的语言),您的应用程序将直接部署到所选的服务器Root context上。

    请注意,Ruby应用程序服务器的类似项目部分提供了关于使用的部署模式(默认情况下开发)的信息,而不是context,同时实际的应用程序位置也引用了服务器root。

    要启动应用程序,请单击web服务器旁边的Open in browser。

    就是这样!现在,您的应用程序的新版本在每次提交到源端时都会自动地发送到应用程序服务器。

不同服务栈的重新部署策略

下面的表列出了在接收到更新后的代码后不同应用服务器的反应。

为了消除可能的应用程序停机时间,可以使用重新启动更新策略,将其扩展到多个容器中。在这种情况下,所需的更新将按顺序应用到实例中,默认情况下延迟30秒。

通过Git上来测试自动部署

现在让我们来看看这个过程是如何工作的。对源端的代码做一些细微的调整,确保一切都是自动化的:

  1. 单击您的项目源中的某个项目的Edit this file,并Commit changes——例如,我们将修改HelloWorld启动页面上的文本。

  2. 因此,将触发适当的webhook来将所做的更改部署到您的主机环境中——请参考存储库Settings > Webhooks部分以了解详细信息。

    单击此字符串后,您将看到由webhook发起的最近交付的列表,以及它们执行的结果。

  3. 最后一个检查,返回到您的应用程序页面并刷新(同时记住,Maven可能需要额外的一分钟来构建和部署您的基于Java的项目)。

    就是这样!正如您所看到的,这些修改成功地应用了,因此这个方案按照我们预期的方式工作。

只需更新代码,按照通常的方法进行提交,所有的更改都会自动地推送到您的Jelastic环境中。不需要在进程之间切换,也不需要手动更新,从而消除人为错误,并加速应用程序的上线时间。

原文链接: Deploy Code to Containers From Git Automatically(翻译:edge_dawn)

原文发布时间为:2017-08-30

本文作者:edge_dawn

本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:将代码从Git自动部署到容器

时间: 2024-05-25 07:49:07

将代码从Git自动部署到容器的相关文章

【Webhooks】使用Git的Webhooks进行服务器自动部署代码

使用Git的Webhooks进行服务器自动部署代码 本文项目地址 https://github.com/diandianxiyu/PageBlog/blob/master/%E4%BD%BF%E7%94%A8Git%E7%9A%84Webhooks%E8%BF%9B%E8%A1%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E4%BB%A3%E7%A0%81.md 如有错误,请指正~ 前言 之前一直想做自动化运

gitblit git SERVER window 安装配置 hook post-receive 自动部署

项目中使用的是gitblit windos版 呆狐狸.凨 1.安装 需要JAVA SDK http://gitblit.com/Download Gitblit GO (Windows) 下载后,解压缩,放到例如 D:\gitblit 打开此目录  gitblit.cmd                #启动 gitblit-stop.cmd       #停止 installService.cmd   #注册服务 我选择的是注册服务installService.cmd,以后系统重启时,git

利用SVN的POST-COMMIT钩子自动部署代码

最近配置了一台SVN服务器,用来保存自己一些小项目的代码.同时,SVN服务器也是一台前端的Web.所以希望利用SVN的POST-COMMIT钩子HOOKS,在提交代码的同时进行部署. 具体的步骤如下: 1.找到SVN项目的HOOKS目录.目录中默认会几个对应操作的钩子模板,我们需要创建一个post-commit的文件. 2.post-commit的主要内容 #/bin/bash REPOS="$1" REV="$2" WEB_PATH="/home/flt

Docker自动部署Apache Tomcat

本文讲的是Docker自动部署Apache Tomcat,[编者的话]本文是Docker的入门文章,推荐Java开发者阅读.文章详细介绍了如何用Docker来安装部署Tomcat. 介绍 本文会讲述: 扩展Tomcat的官方Dockerfile 构建新的镜像 从修改过的新镜像启动容器 在容器里部署RESTful的Web服务并测试 Apache Tomcat 使用docker search可以查到最流行的(和官方的)Docker Tomcat容器: $ sudo docker search tom

利用sqlcmd实现SQLServerServiceBroker的自动部署

       因为工作关系,我们项目用到了Service Broker这项技术.它在功能和性能上真的是没的说,唯一让人郁闷的就是部署.要知道,在加密情况下部署一台服务器和一台客户端我们需要以下步骤: 1. 在服务器端清理环境, 2. 在客户端清理环境, 3. 在服务器端创建数据库,并且创建Service Broker相关对象(Message Type,Contract,Queue,Service,Routing甚至Binding) 4. 在客户端创建数据库,并且创建Service Broker相

自动部署SQL Trace和Windows性能监视器

问题引出 自从菜鸟的上一篇<如何分析SQL Server Trace文件>文章以后,老鸟对菜鸟是另眼相看:"鸟哥,上篇文章你总结得还不错,当然要赶上我还有点距离".老鸟还是改不了他得意忘形的模样:"关于Trace文件的自动化分析你研究透了,那怎么自动化部署SQL Trace和Windows性能监视器,你也得研究研究吧". "虽然老鸟骄傲自满的样子让人讨厌,但是这个问题还是问的很不错的.",于是乎,菜鸟领了任务,便开始埋头苦干起来. 自

初创公司如何实现 Ansible 多机房自动部署发布

本文讲的是初创公司如何实现 Ansible 多机房自动部署发布, 一.面临的问题 一个完整的程序开发流程少不了部署发布这个环节,而部署发布是一个重复的过程,最基本的操作包含停止系统服务.更新软件包.重启系统服务,复杂的还需要做好监控.灰度发布.回滚等.在只有少量服务器的情况下,大多数运维人员会选择手动更新,减少自动化部署发布的开发成本.而当服务器数量增加,甚至服务器可能存在于跨地域的不同机房情况下,如何减少部署发布的人力和时间成本,实现自动化部署发布和无缝发布,而且在部署发布期间仍然能够正常提供

用tomcat部署项目,自己添加的jar包没有自动部署上去

问题描述 用tomcat部署项目,自己添加的jar包没有自动部署上去 做了一个网页项目,用来查询数据库中的数据,但是项目部署上去之后,用网页查询数据发现一直报500的错误,主要是找不到类,纠结了很久,各种找代码上的错误,搞了一两个钟头,才发现tomcat上并没有我自己添加的jar包,于是手动把jar包拷贝进去,运行是OK的, 但是为什么在项目部署的时候没有自动把jar包部署上去?求大神 解决方案 拷贝到lib文件夹中,然后引入包 解决方案二: 不知道你自己添加的jar包到哪里去了 解决方案三:

RDS SQL Server死锁(Deadlock)系列之三自动部署Profiler捕获死锁

问题引入 系列SQL Server死锁系列文章之二,讲的是如何手动部署Profiler来捕获死锁以及对死锁发时场景重现,这篇文章是将这个手动部署的过程自动化话,实现一键部署,既快捷方便,又简单适用.上一篇文章,参见:使用Profiler捕获死锁. 自动部署Profiler 废话不多说,直接上代码,只需要初始化下面的Profiler停止时间@stop_time即可: use master GO set nocount on declare @trace_folder nvarchar(256) ,