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

前提条件

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

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

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

    3. 在左侧导航栏中单击应用管理。找到您在上一步中创建的应用并单击进入详情页面,获取应用ID的字段内容。Application details
  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后触发一次构建。
    安装和配置Jenkins
  3. 安装Maven构建工具,请参见Maven官网

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

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

配置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

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

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

  3. 配置完成后,单击Test Hook,进行测试。
    配置Gitlab的Web 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工程为例,工程结构如下:

sh-3.2# tree -L 1 carshop
carshop
├── detail
├── itemcenter
├── itemcenter-api
└── pom.xml            

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

创建多模块工程的Jenkins任务