持续集成作为敏捷开发重要的一步,其目的在于让产品快速迭代的同时,尽可能保持高质量。每一次代码更新,都要通过自动化测试来检测代码和功能的正确性,只有通过自动测试的代码才能进行后续的交付和部署。本文主要介绍如何将时下最流行的持续集成工具之一的 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 一个构建单元,执行单元。
注意:有关阿里云容器服务提供的开发 slave 节点镜像,参见 https://github.com/AliyunContainerService/jenkins-slaves。
jenkins:
image: 'registry.aliyuncs.com/acs-sample/jenkins:1.651.3'
volumes:
- /var/lib/docker/jenkins:/var/jenkins_home
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'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
labels:
aliyun.scale: '1'
http://jenkins.cd****************.cn-beijing.alicontainer.com/github-webhook/
cd /home/svn/svn-java-demo/hooks
cp post-commit.tmpl post-commit
chmod 755 post-commit
在 post-commit 文件中添加 curl -u ${Jenkins_account}:${password} ${Jenkins_url}/job/svn/build?token=${token} 命令。例如:curl -u test:test
http://127.0.0.1:8080/jenkins/job/svn/build?token=qinyujia 。
cd chapter2
sudo docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
sudo docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
sudo docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
express:
image: 'registry.aliyuncs.com/qinyujia-test/nodejs-demo'
expose:
- '22'
- '3000'
restart: always
labels:
aliyun.routing.port_3000: express
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
cd chapter2
sudo docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
sudo docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
sudo docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。