使用 Jenkins 实现 EDAS 持续集成-阿里云开发者社区

开发者社区> 银时> 正文

使用 Jenkins 实现 EDAS 持续集成

简介: 使用 Jenkins 实现 EDAS 持续集成
+关注继续查看

准备工作

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

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

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

    AccessKey 控制台

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

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

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

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

    获取应用 ID

  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 后触发一次构建。

安装 Git 和 Gitlab 插件

  1. 安装 JDK 和 Maven。

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

安装 JDK  和 Maven

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

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

    GitLab 控制台

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

    创建部署密钥

    创建部署密钥2

    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 认证

  2. 创建 Jenkins 项目。

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

    创建 Jenkins 项目

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

    配置 Jenkins

    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/

配置 Web Hook

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

测试 Web Hook

调用 EDAS Open API 进行部署

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

获取 AKSK

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

    • 普通应用

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

    config.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 格式。

dockerconfig.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。

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用 Jenkins 实现 Java 项目的持续集成和持续交付
本文参考中国 DevOps 社区核心组织者刘征老师在中国 DevOps 社区济南 Meetup 活动上分享的 "用Jenkins实施CI/CD工作坊",展示如何使用 Jenkins 实现 Java 项目的 CI/CD (持续集成/持续交付)。
2109 0
持续集成之道:在你的开源项目中使用Travis CI
自从接触并践行了敏捷的一些实践之后,便深深的喜欢上了敏捷。尤其是测试自动化和持续集成这两个实践,可以显著的提高软件的质量和集成效率,实时检测项目健康度,使团队成员对项目保持充足的信心。 但是对于个人项目而言,虽然测试自动化好实现,但是要实现持续集成还是稍有难度。
954 0
C++ 使用STL string 实现的split,trim,replace-修订
编辑器加载中... 使用python的时候默认str 对字符串操作支持非常丰富,相信每个C++程序员都自己写过string的strim、split、replace, 写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。
612 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6372 0
流迭代器的使用
10.29 编写程序,使用流迭代器读取一个文本文件,存入一个vector中的string里。 #include #include #include #include #include using namespace std; int main() { ifstream in("1.
529 0
几个代码管理工具的基本使用介绍
http://www.iteye.com/topic/1122134
502 0
+关注
115
文章
11
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载