使用 Jenkins 实现 EDAS 持续集成

准备工作

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

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

    1. 使用已经开通了 EDAS 服务的主账号登录阿里云官网。
    2. 进入 Access Key 控制台,创建 Access Key ID 和 Access Key Secret。

    使用 Jenkins 实现 EDAS 持续集成

  2. 在 EDAS 控制台创建应用。

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

    1. 登录 EDAS 控制台
    2. 参考发布应用 ,创建应用。

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

    使用 Jenkins 实现 EDAS 持续集成

  3. 使用 GitLab 托管您的代码。

可以自行搭建 Gitlab 或者使用阿里云 Code

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

  1. 了解并使用 Jenkins。

关于 Jenkins 的更多详细信息请参考 Jenkins 官网

目前,阿里云还没有合适的产品替代 Jenkins,不过即将推出基于 Jenkins 的 DevOps 平台,请持续关注。

创建持续集成

创建持续集成主要包含以下三个步骤:

安装和配置 Jenkins

  1. 安装 Jenkins。

安装 Jenkins,请参考 Jenkins。 如已安装则请忽略此步。

  1. 在 Jenkins 服务器安装 Python 运行环境(仅支持2.7及以上版本,不支持 Python3)。

安装 Python,请参考 Python。 如已安装请忽略此步。

  1. 在 Jenkins 中安装 Git 和 GitLab 插件。

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

  • 安装 GIT Client Plugin 和 GIT Plugin 插件可以帮助 Jenkins 拉取 Git 仓库中的代码。
  • 安装 Gitlab Hook Plugin 插件可以帮助 Jenkins 在收到 Gitlab 发来的 Hook 后触发一次构建。

使用 Jenkins 实现 EDAS 持续集成

  1. 安装 JDK 和 Maven。

在 Jenkins 控制台的菜单栏中选择系统管理 > 系统设置,参考下图中的标示为 Jenkins 安装 JDK 和 Maven。

使用 Jenkins 实现 EDAS 持续集成

  1. 生成 RSA 密钥对,导入 GitLab 和 Jenkins。 实现 Jenkins 拉取 GitLab 代码时的认证。

    1. 参考 GitLab 文档,创建 RSA 密钥对。

    使用 Jenkins 实现 EDAS 持续集成

    1. 进入您的项目的 GitLab 首页,在菜单栏选择 Settings > Deploy Keys。然后单击 new deploy key 添加 key,导入密钥。

    使用 Jenkins 实现 EDAS 持续集成

    使用 Jenkins 实现 EDAS 持续集成

    1. 通过 RSA 私钥添加 Jenkins 认证。

      1. 在 Jenkin s 首页单击 Credentials 菜单。 单击 Add credentials,在下图页面输入相关信息,单击 OK
      2. 选择 SSH Username with private key 的认证方式。

      按照图例填写 ScopeUserNamePrivate Key 等配置, 将第一步生成 RSA 密钥对中生成的私钥文件拷贝到"/var/jenkins_home/.ssh/id_rsa"文件。 图例中的 Scope、UserName、Private Key 可以根据您的需要来填写。

      使用 Jenkins 实现 EDAS 持续集成

  2. 创建 Jenkins 项目。

    1. 在 Jenkins 首页左侧单击新建,创建 Jenkins 项目。

    使用 Jenkins 实现 EDAS 持续集成

    1. 配置 Git 项目地址时,勾选上一步中通过 RSA 创建的认证方式。正确配置后如下图所示。“Poll SCM” 必须勾选。

    使用 Jenkins 实现 EDAS 持续集成

    1. 配置 Maven 构建和自定义构建动作 Execute shell
      (本文示例通过调用 Shell 命令完成构建后的自动部署,如果您的 Jenkins 是在 Windows 服务器上搭建的,则需要选择 Execute Windows batch command

)。

![配置 Jenkins 2](http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/55479/cn_zh/1497613588427/edas-ci-gitlab-config-jendins-project2.png)

上图中配置的*"python $WORKSPACE/build/build.py"*是一个 EDAS 提供的示例脚本,该脚本主要完成 WAR 包的上传和应用的部署工作。具体如何使用,在接下来的第三步、第四步中有详细说明。

注:如果部署的是 Docker 应用,脚本"python $WORKSPACE/build/build.py" 请使用"python $WORKSPACE/build/dockerbuild.py"

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

单击 GitLab 工程进入配置("Settings")页面,参考下图进行配置。 图中表示的 Jenkins 服务器地址为您的 Jenkins 服务器的 Web 访问地址如 http://localhost:8080/

使用 Jenkins 实现 EDAS 持续集成

配置完成后可以单击页面中的 "Test Hook" 进行测试。

使用 Jenkins 实现 EDAS 持续集成

调用 EDAS Open API 进行部署

  1. 下载示例工程 demo.zip
  2. 拷贝示例中的 build 目录到您的 Git 工程中。
  3. 打开 build 目录中的.osscredentials 文件,配置为您在准备工作中获取的 Access Key ID 和 Access Key Secret。

使用 Jenkins 实现 EDAS 持续集成

  1. 由于部署分为普通应用和 Docker 应用,由于 Open API 不相同,配置方式不同,分别介绍:

    • 普通应用

    打开 build 目录中的 config.json 文件,配置 WAR 包地址,应用 ID 等属性。 配置文件格式满足 JSON 格式。

    使用 Jenkins 实现 EDAS 持续集成

    "host"配置项代表了您访问的 EDAS 的控制台的域名或者 IP,如果您使用的是公有云的 EDAS 服务,则无需修改"edas"的"host"和"port"属性。

    "apps"配置项中可以配置多个应用,也可以只配置一个。 各配置项的含义及获取方式如下:

    • appName:应用名称,准备工作中创建,通过 EDAS 控制台可以取到。
    • appId:应用 ID,准备工作中创建,通过 EDAS 控制台可以取到。
    • userId;您登录阿里云的用户 ID。
    • target:Maven 编译后打出来的 WAR 的本地路径,以 Git 项目为根目录的相对目录。
    • deployGroupId:应用分组 ID。
    • batch:分批发布。
  • Docker 应用

Docker 应用支持 WAR 部署和镜像部署(其中镜像部署只需要在 Jenkins 项目中配置 Maven 构建和自定义构建动作 Execute shell,内容为"python $WORKSPACE/build/dockerbuild.py"。)

打开 build 目录中的 dockerconfig.json 文件,配置 WAR 包地址,应用 ID 等属性。 配置文件格式满足 JSON 格式。

使用 Jenkins 实现 EDAS 持续集成

"apps"配置项中可以配置多个应用,上图配置了两个应用,第一个为 Docker 应用 WAR 包部署方式,第二个为 Docker 应用镜像部署方式,各配置项的含义及获取方式如下:

  • appName:应用名称,准备工作中创建,通过 EDAS 控制台可以取到。
  • appId:应用 ID,准备工作中创建,通过 EDAS 控制台可以取到。
  • userId;您登录阿里云的用户 ID。
  • type:部署方式类型。upload 为 WAR 包部署,image 为镜像部署。
  • target:Maven 编译后打出来的 WAR 的本地路径,WAR 部署不能为空。
  • imageUrl:镜像地址。image 部署时,不能为空。
  • packageVersion:部署包的版本号。
  • description:描述信息。
  • deployToStr:应用分组 ID。 为"all"时,代表该应用所有应用实例。
  • regionId:区域 ID,应用所在的区域 ID。
配置正确后,提交变更到 GitLab。

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

说明:如为 Docker 镜像部署方式,配置完成后,可手动触发 jenkins 项目。

上一篇:Linux SSH登陆配置文件修改


下一篇:一步一步SharePoint 2007之二十四:编写一个最简单的WebPart(2)——配置WebPart