全部产品
云市场

使用 Jenkins 创建持续集成

更新时间:2019-09-17 19:59:34

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

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

注意:目前仅支持 ECS 集群和 Swarm 集群环境的应用部署。

准备工作

在开始持续集成之前,需要完成下述的准备工作。

  1. 获取阿里云的 Access Key ID 和 Access Key Secret。

    1. 使用已经开通了 EDAS 服务的主账号登录阿里云官网。

    2. 进入 Access Key 控制台,创建 Access Key ID 和 Access Key Secret。

      AccessKey 控制台

  2. 在使用 Jenkins 自动部署应用之前,需要先在 EDAS 控制台中创建一个可以部署的应用。

    1. 登录 EDAS 控制台

    2. 参考应用部署概述,部署应用。

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

    3. 在左侧导航栏中单击应用管理。找到您在上一步中创建的应用并单击进入详情页面,获取应用 ID 的字段内容。

      获取应用 ID

  3. 使用 GitLab 托管您的代码。您可以自行搭建 Gitlab 或者使用阿里云 Code

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

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

配置项目

参考通过 toolkit-maven-plugin 插件自动化部署应用修改项目配置,添加 toolkit-maven-plugin 及部署信息。您在修改完项目配置后,建议在本地使用 Maven 构建验证配置是否正确。

安装和配置 Jenkins

  1. 进入 Jenkins 官网下载安装 Jenkins(如已安装则请忽略此步)。

  2. 在 Jenkins 控制台的菜单栏中选择系统管理 > 插件管理,安装 Git 和 GitLab 插件。

    • 安装 GIT Client Plugin 和 GIT Plugin 插件可以帮助 Jenkins 拉取 Git 仓库中的代码。

    • 安装 Gitlab Hook Plugin 插件可以帮助 Jenkins 在收到 Gitlab 发来的 Hook 后触发一次构建。

    安装 Git 和 Gitlab 插件

  3. 安装 Maven 构建工具,请参见 Maven 官网(如已安装请忽略)。

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

    配置 Maven

  4. 在 Jenkins 服务器上生成 SSH RSA 密钥对,并将公匙导入 GitLab,实现 Jenkins 拉取 GitLab 代码时自动认证。

    1. 参考 GitLab 文档,在 Jenkins 服务器运行 Jenkins 软件的用户下,生成 SSH RSA 密钥对。

      GitLab 控制台

    2. 进入您的 GitLab 首页,在菜单栏选择 Settings > Deploy Keys。然后单击 new deploy key 添加 key,导入在Jenkins服务器上创建的SSH RSA公匙。

      GitLab 项目Deploy Keys-1

      GitLab 项目Deploy Keys-2

  5. 创建 Jenkins 任务。

    1. 在 Jenkins 首页左侧导航栏中单击新建,创建 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 (如有其它参数,请根据实际情况填入)

      调用顶级 Maven 目标

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

  1. 右键单击 GitLab 工程,然后选择 Setting > Web Hooks

  2. Web Hooks 页面的在 URL 文本框中输入http://jenkins服务器地址:jenkins服务器监听端口/git/notifyCommit?url=本项目的git协议地址

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

    配置 Web Hook

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

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

    测试 Web Hook

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

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

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

  1. 15:58:51 [INFO] Deploy application successfully!
  2. 15:58:51 [INFO] ------------------------------------------------------------------------
  3. 15:58:51 [INFO] BUILD SUCCESS
  4. 15:58:51 [INFO] ------------------------------------------------------------------------
  5. 15:58:51 [INFO] Total time: 24.330 s
  6. 15:58:51 [INFO] Finished at: 2018-12-25T15:58:51+08:00
  7. 15:58:51 [INFO] Final Memory: 23M/443M
  8. 15:58:51 [INFO] ------------------------------------------------------------------------
  9. 15:58:51 Finished: SUCCESS

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

创建多模块工程的 Jenkins 任务

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

  1. sh-3.2# tree -L 1 carshop
  2. carshop
  3. ├── detail
  4. ├── itemcenter
  5. ├── itemcenter-api
  6. └── pom.xml

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

clean install goal