准备工作
在开始持续集成之前,需要完成下述的准备工作。
获取阿里云的 Access Key ID 和 Access Key Secret。
- 使用已经开通了 EDAS 服务的主账号登录阿里云官网。
- 进入 Access Key 控制台,创建 Access Key ID 和 Access Key Secret。
在 EDAS 控制台创建应用。
在使用 Jenkins 自动部署应用之前,需要先在 EDAS 控制台中创建一个可以部署的应用。
- 使用 GitLab 托管您的代码。
可以自行搭建 Gitlab 或者使用阿里云 Code。
本文使用通过自行搭建的 GitLab 做演示,关于 Gitlab 的更多信息请参考 GitLab。
- 了解并使用 Jenkins。
关于 Jenkins 的更多详细信息请参考 Jenkins 官网。
目前,阿里云还没有合适的产品替代 Jenkins,不过即将推出基于 Jenkins 的 DevOps 平台,请持续关注。
创建持续集成
创建持续集成主要包含以下三个步骤:
安装和配置 Jenkins
- 安装 Jenkins。
安装 Jenkins,请参考 Jenkins。 如已安装则请忽略此步。
- 在 Jenkins 服务器安装 Python 运行环境(仅支持2.7及以上版本,不支持 Python3)。
安装 Python,请参考 Python。 如已安装请忽略此步。
- 在 Jenkins 中安装 Git 和 GitLab 插件。
在 Jenkins 控制台的菜单栏中选择系统管理 > 插件管理,安装插件。
- 安装 GIT Client Plugin 和 GIT Plugin 插件可以帮助 Jenkins 拉取 Git 仓库中的代码。
- 安装 Gitlab Hook Plugin 插件可以帮助 Jenkins 在收到 Gitlab 发来的 Hook 后触发一次构建。
- 安装 JDK 和 Maven。
在 Jenkins 控制台的菜单栏中选择系统管理 > 系统设置,参考下图中的标示为 Jenkins 安装 JDK 和 Maven。
生成 RSA 密钥对,导入 GitLab 和 Jenkins。 实现 Jenkins 拉取 GitLab 代码时的认证。
- 参考 GitLab 文档,创建 RSA 密钥对。
- 进入您的项目的 GitLab 首页,在菜单栏选择 Settings > Deploy Keys。然后单击 new deploy key 添加 key,导入密钥。
通过 RSA 私钥添加 Jenkins 认证。
- 在 Jenkin s 首页单击 Credentials 菜单。 单击 Add credentials,在下图页面输入相关信息,单击 OK。
- 选择 SSH Username with private key 的认证方式。
按照图例填写 Scope,UserName, Private Key 等配置, 将第一步生成 RSA 密钥对中生成的私钥文件拷贝到"/var/jenkins_home/.ssh/id_rsa"文件。 图例中的 Scope、UserName、Private Key 可以根据您的需要来填写。
创建 Jenkins 项目。
- 在 Jenkins 首页左侧单击新建,创建 Jenkins 项目。
- 配置 Git 项目地址时,勾选上一步中通过 RSA 创建的认证方式。正确配置后如下图所示。“Poll SCM” 必须勾选。
- 配置 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/。
配置完成后可以单击页面中的 "Test Hook" 进行测试。
调用 EDAS Open API 进行部署
- 下载示例工程 demo.zip。
- 拷贝示例中的 build 目录到您的 Git 工程中。
- 打开 build 目录中的.osscredentials 文件,配置为您在准备工作中获取的 Access Key ID 和 Access Key Secret。
由于部署分为普通应用和 Docker 应用,由于 Open API 不相同,配置方式不同,分别介绍:
- 普通应用
打开 build 目录中的 config.json 文件,配置 WAR 包地址,应用 ID 等属性。 配置文件格式满足 JSON 格式。
"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 格式。
"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 Hook。 Jenkins 在接受到这个 Hook 后会构建您的 Maven 项目,并在构建结束时调用 Open API 触发部署。
说明:如为 Docker 镜像部署方式,配置完成后,可手动触发 jenkins 项目。