使用Jenkins可以构建EDAS应用的持续集成方案。该方案涉及下面的计算机语言或开发工具,阅读本文需要对下述的语言或工具有一定的理解。

前提条件

在开始持续集成之前,需要完成下述的准备工作。
  1. 获取阿里云的AccessKey ID和AccessKey Secret。

    1. 使用已经开通了EDAS服务的主账号登录阿里云官网。
  2. 在使用Jenkins自动部署应用之前,需要先在EDAS控制台中创建并部署应用。
    1. 登录EDAS控制台
    2. 参考应用创建和部署概述(ECS)创建和部署应用概述(K8s),部署应用。

      如果已经创建了应用,请忽略此步。

    3. 在左侧导航栏中单击应用管理。找到您在上一步中创建的应用并单击进入详情页面,获取应用ID的字段内容。
  3. 使用GitLab托管您的代码。您可以自行搭建Gitlab或者使用阿里云Code

    本文使用通过自行搭建的GitLab做演示,关于Gitlab的更多信息,请参见GitLab

  4. 了解并使用Jenkins。关于Jenkins的更多详细信息,请参见Jenkins官网

背景信息

说明 ECS集群和容器服务Kubernetes集群都支持使用Jenkins创建持续集成。
工具 说明
Maven Maven是一个项目管理和构建的自动化工具。
Jenkins Jenkins是一个可扩展的持续集成引擎。
GitLab GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。

配置项目

修改项目配置,添加toolkit-maven-plugin及部署信息,具体操作,请参见使用toolkit-maven-plugin插件升级应用(ECS集群)。您在修改完项目配置后,建议在本地使用Maven构建验证配置是否正确。

安装和配置Jenkins

  1. 进入Jenkins官网下载安装Jenkins。
  2. 在Jenkins控制台的菜单栏中选择系统管理 > 插件管理,安装Git和GitLab插件。
    • 安装GIT Client Plugin和GIT Plugin插件可以帮助Jenkins拉取Git仓库中的代码。
    • 安装Gitlab Hook Plugin插件可以帮助Jenkins在收到Gitlab发来的Hook后触发一次构建。
  3. 安装Maven构建工具,请参见Maven官网

    在Jenkins控制台的菜单栏中选择系统管理 > 全局工具配置,选择Maven版本名称并配置路径。

  4. 在Jenkins服务器上生成SSH RSA密钥对,并将公匙导入GitLab,实现Jenkins拉取GitLab代码时自动认证。
    1. 参考GitLab文档,在Jenkins服务器运行Jenkins软件的用户下,生成SSH RSA密钥对。
    2. 进入GitLab首页,在菜单栏选择Settings > Deploy Keys,并单击new deploy key添加key,导入在Jenkins服务器上创建的SSH RSA公匙。
  5. 创建Jenkins任务。
    1. 在Jenkins首页左侧导航栏中单击新建,创建Jenkins任务,并选择构建一个自由风格的软件项目
    2. 源码管理页面中选择Git,并设置相关参数。
      • Repository URL:您的项目的Git协议地址。
      • Credentials:安全凭证,选择即可(前提是运行Jenkins软件的用户的SSH RSA公匙已添加到该Git项目所在的GitLab中,否则这里会报错)。
    3. 单击构建触发器页签,勾选轮询SCM
    4. 单击构建环境页签,勾选Add timestamps to the Console Output(为控制台输出的信息添加时间戳)。
    5. 单击构建页签,然后单击增加构建步骤
    6. 调用顶层Maven目标区域设置Maven版本目标。如果您想部署多模块工程,请参见创建多模块工程的Jenkins任务
      • Maven Version:单击该选项后面的下拉框,选择在全局工具配置里配置的Maven版本名称
      • Goals:填入clean package toolkit:deploy (如有其它参数,请根据实际情况填入)

配置Gitlab的Web Hook,实现自动构建

  1. 右键单击GitLab工程,然后选择Setting > Web Hooks
  2. Web Hooks页面的在URL文本框中输入http://jenkins服务器地址:jenkins服务器监听端口/git/notifyCommit?url=本项目的git协议地址

    例如:http://123.57.xx.xxx:8080/git/notifyCommit?url=git@code.aliyun.com:tdy218/hello-edas.git

    图中表示的Jenkins服务器地址为您的Jenkins服务器的Web访问地址如http://123.57.xx.xxx:8080

  3. 配置完成后,单击Test Hook,进行测试。

配置正确后,提交变更到GitLab

如果上述步骤配置正确,这次提交会触发一次GitLab Hook。Jenkins在接受到这个Hook后会构建您的Maven项目,并在构建结束时调用EDAS POP API脚本触发部署。

提交部署成功输出的日志信息(Build Number > 控制台输出)。

15:58:51 [INFO] Deploy application successfully!
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 [INFO] BUILD SUCCESS
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 [INFO] Total time: 24.330 s
15:58:51 [INFO] Finished at: 2018-12-25T15:58:51+08:00
15:58:51 [INFO] Final Memory: 23M/443M
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 Finished: SUCCESS
            

如果部署失败,可以登录EDAS控制台,在左侧导航栏中单击应用管理 > 应用列表,在应用列表页面单击具体应用名称,进入应用详情页面。在左侧导航栏单击变更记录来查看此次部署任务的执行过程。

创建多模块工程的Jenkins任务

创建多模块工程的Jenkins任务和安装和配置Jenkins第5步基本相同,只需要调整下调用顶层Maven目标。如果工程为多模块工程,想在Jenkins中部署子模块的话,那么需要在父模块中调用mvn clean install命令,然后在子模块中调用mvn clean package toolkit:deploy命令。以Demo工程为例,工程结构如下:

其中,detail、itemcenter、itemcenter-api为子模块,现在想部署itemcenter模块的话,那么需要在父工程中设置一个clean install构建目标,然后在itemcenter模块中设置clean package toolkit:deploy构建目标。