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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是将代码从Git自动部署到容器【编者的话】将您的代码从您的Git仓库转移到您的容器可能是一件痛苦的工作。本文介绍了如何实现自动化部署。
本文讲的是将代码从Git自动部署到容器【编者的话】将您的代码从您的Git仓库转移到您的容器可能是一件痛苦的工作。本文介绍了如何实现自动化部署。

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

有许多方法可以将您的源代码从Git 仓库部署到容器中,包括整个容器的重新部署、通过卷的即时重新部署或“git clone”方法。然而,当涉及到这一过程的自动化和持续部署时,许多开发人员可能会面临其中的复杂性,因为他们需要知道如何正确地将所有应用程序组件与所需的互连点结合起来。

尤其是在容器里,必须管理所构建的堆栈映像来处理CI/CD管道引起的额外复杂性。如果在操作系统、应用服务器堆栈或其依赖项中进行频繁的提交,那么整个容器重新部署可能不是最好的方法。
GitHub-GitLab.png

为了简化部署自动化,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按钮。
Generating-Access-Token-on-GitHub.png

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

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

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

在GitLab上生成Access Token

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

在这里,指定可选的token名称,它的到期日期(可以留空),并勾选api权限范围。
Generating-Access-Token-on-GitLab.png

点击 Create Personal Access Token按钮。

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

现在,您已经准备好继续安装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
Install-Git-Push-Deploy-Package.png

单击Import 继续。

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

GitHubGitLab-addon.png

单击“Install ”继续。

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

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

4、根据项目类型的不同,会有如下结果:
  • 对于基于Java的基础设施,您将在dashboard中看到一个新的环境,其中包含Maven构建节点;它将在每次更新源代码时,在Web服务器上构建和部署应用程序到Root context下。
    Git-push-Java-project.png

    请注意,Maven可能需要花费一些时间来编译一个项目(尽管包安装本身已经完成了),因此您需要等待几分钟才能启动它。这个操作的当前进展可以通过Maven的vcs_update 日志文件实时跟踪。
    vcs_update-log-file.png
  • 对于基于PHP的基础设施(以及其他受支持的语言),您的应用程序将直接部署到所选的服务器Root context上。

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

    要启动应用程序,请单击web服务器旁边的Open in browser。
    hello-world-jelastic.png

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

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

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

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

通过Git上来测试自动部署

现在让我们来看看这个过程是如何工作的。对源端的代码做一些细微的调整,确保一切都是自动化的:
  1. 单击您的项目源中的某个项目的Edit this file,并Commit changes——例如,我们将修改HelloWorld启动页面上的文本。
    Test-Automated-Deploy-from-Git.png
  2. 因此,将触发适当的webhook来将所做的更改部署到您的主机环境中——请参考存储库Settings > Webhooks部分以了解详细信息。
    recent-deliveries-git-push.png

    单击此字符串后,您将看到由webhook发起的最近交付的列表,以及它们执行的结果。
  3. 最后一个检查,返回到您的应用程序页面并刷新(同时记住,Maven可能需要额外的一分钟来构建和部署您的基于Java的项目)。
    git-push-hello-world.png

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

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

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

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

本文作者:edge_dawn

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

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
IDE 网络安全 开发工具
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
|
4月前
|
开发工具 git Python
通过Python脚本git pull 自动重试拉取代码
通过Python脚本git pull 自动重试拉取代码
195 5
|
2月前
|
开发工具 git
git如何修改提交代码时的名字和邮箱?
git如何修改提交代码时的名字和邮箱?
154 4
|
2月前
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
481 3
|
3月前
|
Shell 网络安全 开发工具
git与gitee结合使用,提交代码,文件到远程仓库
本文介绍了如何将Git与Gitee结合使用来提交代码文件到远程仓库。内容涵盖了Git的安装和环境变量配置、SSH公钥的生成和配置、在Gitee上创建仓库、设置Git的全局用户信息、初始化本地仓库、添加远程仓库地址、提交文件和推送到远程仓库的步骤。此外,还提供了如何克隆远程仓库到本地的命令。
git与gitee结合使用,提交代码,文件到远程仓库
|
2月前
|
JavaScript 前端开发 开发工具
一身反骨的我,用--no-verify绕开了git代码提交限制!
【10月更文挑战第7天】一身反骨的我,用--no-verify绕开了git代码提交限制!
131 0
|
4月前
|
Shell 开发工具 git
使用 Shell 代码简化 Git 步骤
【8月更文挑战第23天】本文介绍通过Shell脚本简化Git操作的方法:1) 使用`gitc &quot;提交信息&quot;`可一键完成代码提交与推送至远程仓库;2) 执行`gitpull`即可从远程仓库拉取最新代码并合并到当前分支;3) 输入`gitnewbranch 分支名称`快速创建并切换到新分支。将这些自定义函数加入`.bashrc`或`.zshrc`等配置文件后,即可随时调用简化版Git命令。
|
4月前
|
缓存 资源调度 Kubernetes
阿里云云效产品使用合集之如何将两个独立的代码仓库构建并部署到同一个容器内
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
前端开发 JavaScript PHP
【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?
【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?
|
4月前
|
API Docker 容器
容器镜像解析问题之使用go-containerregistry在代码中解析容器镜像如何解决
容器镜像解析问题之使用go-containerregistry在代码中解析容器镜像如何解决
42 0