基于 Jenkins 的持续交付__DevOps_用户指南_容器服务-阿里云
持续集成作为敏捷开发重要的一步,其目的在于让产品快速迭代的同时,尽可能保持高质量。每一次代码更新,都要通过自动化测试来检测代码和功能的正确性,只有通过自动测试的代码才能进行后续的交付和部署。本文主要介绍如何将时下最流行的持续集成工具之一的 Jenkins 结合阿里云容器服务,实现自动测试和镜像构建推送。
以下内容演示如何通过阿里云容器服务 Jenkins 实现自动测试和 Docker 镜像构建,实现高质量的持续集成。
背景信息
每次代码提交到 GitHub 上的 nodejs 的项目后,阿里云容器服务 Jenkins 都会自动触发单元测试,测试通过则继续镜像构建及推送到目标镜像仓库中,最后邮件通知结果。
大致流程如下图所示:
slave-nodejs 用于进行单元测试,构建镜像和推送镜像的 slave 节点。
Jenkins 相关介绍
Jenkins 是基于 Java 开发的一种开源持续集成工具,监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点。Jenkins 使用 job 来描述每一步工作。节点是用来执行项目的环境。Master 节点是 Jenkins job 的默认执行环境,也是 Jenkins 应用本身的安装环境。
master/slave
master/slave 相当于 server 和 agent 的概念。master 提供 web 接口让用户来管理 job 和 slave,job 可以运行在 master 本机或者被分配到 slave 上运行。一个 master 可以关联多个 slave 用来为不同的 job 或相同的 job 的不同配置来服务。
可以通过配置多个 slave 为不同项目准备单独的测试和构建环境。
注意:本文中提到的 Jenkins job 和项目均指的是 Jenkins 一个构建单元,执行单元。
使用容器服务部署 Jenkins 应用和 slave 节点
不同应用构建、测试所需要的依赖不同,最佳实践是使用包含相应的运行时依赖和工具的不同 Slave 容器执行测试和构建。通过阿里云容器服务提供的针对 Python、NodeJS、go 等不同环境的 Slave 镜像以及示例模板,用户可以简单快速地生成 Jenkins 应用以及各种 slave 节点,在 Jenkins 应用中配置节点信息,然后在构建项目中指定执行节点,从而实现整个持续集成流程。
注意:有关阿里云容器服务提供的开发 slave 节点镜像,参见 https://github.com/AliyunContainerService/jenkins-slaves。
创建 Jenkins 编排模版。
新建模版,以如下内容为基础,创建编排。
jenkins:
image: 'registry.aliyuncs.com/acs-sample/jenkins:latest'
ports:
- '8080:8080'
- '50000:50000'
volumes:
- /var/lib/docker/jenkins:/var/jenkins_home
privileged: true
restart: always
labels:
aliyun.scale: '1'
aliyun.probe.url: 'tcp://container:8080'
aliyun.probe.initial_delay_seconds: '10'
aliyun.routing.port_8080: jenkins
links:
- slave-nodejs
slave-nodejs:
image: 'registry.aliyuncs.com/acs-sample/jenkins-slave-dind-nodejs'
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
aliyun.scale: '1'
使用模板创建 Jenkins 应用和 slave 节点。
也可以直接使用阿里云容器服务提供的 Jenkins 示例模版创建 Jenkins 应用和 slave 节点。
创建成功后,Jenkins 应用和 slave 节点显示在服务列表中。
打开容器服务提供的访问端点,就可以使用刚刚部署的 Jenkins 应用。
实现自动测试及自动构建推送镜像
将 slave 容器配置成 Jenkins 应用的 slave 节点。 打开 Jenkins 应用,进入系统设置界面,选择管理节点,新建节点,配置相应参数。如下图所示。
注意:
- 标签是 slave 的唯一标识。
- slave 容器和 Jenkins 容器同时运行在阿里云平台上,因此需要填写外网访问不到的容器节点 IP,隔离测试环境。
- 添加 Credential 的时候,使用创建 slave-nodejs 镜像的 Dockerfile 里的 jenkins 用户(初始密码为 jenkins)。镜像 Dockerfile 的地址为 https://github.com/AliyunContainerService/jenkins-slaves/tree/master/jenkins-slave-dind-nodejs。
创建项目实现自动化测试。
- 新建 Item,选择构建一个自由风格的软件项目。
- 填写项目名称,并选择项目运行节点。此示例中填写上述准备的 slave-nodejs-ut 节点。
- 配置源码管理和代码分支。此示例中源代码使用 GitHub 管理。
- 配置构建触发器,此示例采用结合 GitHub Webhooks & services 实现自动触发项目执行。
在 GitHub 中添加 Jenkins 的 service hook,完成自动触发实现。
在 GitHub 项目主页单击 Settings,单击左侧菜单栏中的 Webhooks & services,单击 Add Service,在下拉框中选择 Jenkins(Git plugin)。在 Jenkins hook url 对话框中填写
${Jenkins IP}/github-webhook/
,例如:https://jenkins.cd****************.cn-beijing.alicontainer.com/github-webhook/
增加 Execute shell 类型的构建步骤,编写 shell 脚本执行测试。
本示例中的命令如下所示:
pwd
ls
cd chapter2
npm test
创建项目实现自动构建,推送镜像。
- 新建 Item,选择构建一个自由风格的软件项目。
- 填写项目名称,并选择项目运行节点。此示例中填写上述准备的 slave-nodejs-ut 节点。
- 配置源码管理和代码分支。此示例中源代码使用 GitHub 管理。
- 添加如下触发器,设置只有在单元测试成功之后才执行自动构建镜像。
- 编写构建镜像和推送镜像的 shell 脚本。
本示例的命令如下所示:
cd chapter2
docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
自动重新部署应用
首次部署应用
使用编排模板,将 创建项目实现自动构建,推送镜像 中创建的镜像部署到容器服务中,创建 nodejs-demo 应用。
示例如下所示:
```
express:
image: 'registry.aliyuncs.com/qinyujia-test/nodejs-demo'
expose:
- '22'
- '3000'
restart: always
labels:
aliyun.routing.port_3000: express
```
自动重新部署
选择刚刚创建的应用 nodejs-demo,创建触发器。
在 创建项目实现自动构建,推送镜像 的 shell 脚本中添加一行,地址即为上文创建的触发器给出的触发器链接。
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
把 创建项目实现自动构建,推送镜像 的示例中的命令改为:
cd chapter2
docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
到此,镜像推送之后,Jenkins 会自动触发重新部署 nodejs-demo 应用。
配置邮件推送结果
如果希望单元测试或者镜像构建的结果能够通过邮件推送给相关开发人员或者项目执行发起者。可以通过如下配置来实现。
在 Jenkins 主页,选择系统管理,系统设置,配置 Jenkins 系统管理员邮箱。
安装 Extended Email Notification plugin,配置 SMTP server 等相关信息,并设置默认邮件接收人列表。如下图所示。
以上是 Jenkins 应用系统参数设置,下面是为需要用邮件推送结果的 Jenkins 项目进行相关配置。
在 Jenkins 项目中添加构建后操作步骤。选择 Editable Email Notification 类型,填写邮件接收人列表。
添加邮件发送触发器。
最后更新:2016-11-23 16:04:16
上一篇:
基于容器 HUB 的持续交付__DevOps_用户指南_容器服务-阿里云
下一篇:
服务发现和负载均衡概述__服务发现和负载均衡_用户指南_容器服务-阿里云
查询镜像商品列表__API参考_云市场-阿里云
在哪里可以查到RDS的权限定义___云数据库(RDS)授权问题_授权常见问题_访问控制-阿里云
1.1 开通服务__第一章 快速开始_使用手册_分析型数据库-阿里云
设置防盗链__安全管理_开发人员指南_对象存储 OSS-阿里云
配置 Tomcat 容器__应用设置_用户指南_企业级分布式应用服务 EDAS-阿里云
关闭Pipeline__Pipeline管理_Console参考手册_数据集成-阿里云
【推荐】Windows系统异常重启以及蓝屏的处理__蓝屏夯机_操作系统类问题_Windows操作运维问题_云服务器 ECS-阿里云
付费模式转换__购买指南_数据传输-阿里云
安装与配置__Console参考手册_数据集成-阿里云
接入详细说明__设备端接入手册_阿里云物联网套件-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云