阿里云持续交付平台 关注
手机版

基于Docker的持续交付系列( 二):阿里云code帮你实现持续交付第一步

  1. 云栖社区>
  2. 阿里云持续交付平台>
  3. 博客>
  4. 正文

基于Docker的持续交付系列( 二):阿里云code帮你实现持续交付第一步

billy.lb 2016-04-13 10:55:14 浏览4914 评论3

摘要: 本文是基于Docker的持续交付系列的第二篇文章,已经还存在很多问题,但已经走出了持续交付的第一步!希望可以得到大家更多的反馈,让基于Docker的持续交付更好更快的呈现在大家面前。

前言

        在上一篇博文:基于docker的持续交付系列(一):如何将app与docker整合并部署中,我们对app与Docker的整合、部署进行了简单介绍, 但在实践中你会发现,每当你修改代码之后,都要手动push代码,build image,push image以及重新部署,整个流程走下来繁琐且耗时较长,给我们提倡的持续交付徒增了许多烦恼。在容器hub和阿里云code两个平台的合力之下,改进的第一步已经实现,让我们细细来看。


用到的工具

        同样,我们还是使用到了下述几个平台:


操作步骤

创建关联了阿里云code的镜像仓库

  • 我们可以看到,目前容器hub已经支持关联阿里云code的代码仓库,相比于github和bitbucket,阿里云code提供了如丝般顺滑的速度(从拉取用户信息和代码库列表就能知道)。
  • 新的镜像仓库可以按如下配置进行创建,需要注意的是勾选“代码变更时自动构建镜像”和“海外机器构建”两个选项(勾选后者是为了保证镜像的构建速度)
    _2016_04_10_5_35_55

push代码

        现在我们对代码进行修改,为了直观的表现出来,我们将代码库中java-with-docker/src/main/webapp下的index.html进行修改,将原来的“step1”更换为“步骤1”,重新进行编译:

$ mvn clean package -D maven.test.skip=ture


编译完毕后,将新的产出物一并提交到[代码仓库](https://code.aliyun.com/zju_lb/java-with-docker)。

####镜像重新编译####
可以看到,push代码触发了镜像的自动编译:
![_2016_04_10_7_21_17](https://oss.aliyuncs.com/yqfiles/b9a91a07fd4285f0ef64db0642beb94e911d74ad.png)

####更新容器服务中的应用####
        我们可以通过容器服务提供的“重新部署”按钮或者“触发器链接”来实现应用的重新部署,在此过程中,应用中的服务将更新最新的docker镜像。部署完成后,我们访问url就可以看到修改过后的页面了:
![123](https://oss.aliyuncs.com/yqfiles/c79a16ec1ffdbedc73846bfcda877d31e794547c.png)
        当然,容器hub现在也支持webhook的配置,也就是可以配置新镜像编译完之后的回调地址,我们在此处填入“触发器链接”的url,就可以实现流程的自动化:
![_2016_04_10_10_57_41](https://oss.aliyuncs.com/yqfiles/b81a864065b7afd3832b73153ae9ca2cd197050e.png)


--------
###总结###
        现在我们已经可以做到在push代码之后,直接触发镜像的构建。但是,依旧存在以下几个不尽如人意的地方:
- 我们需要本地进行app的编译,并将其上传代码库才能将其与Docker进行整合;
- 提交代码直接进行了镜像编译,但我们还不知道我们提交的代码是否正确,也就是还没有进行测试的考验,比如上述将“step1”改为“步骤1”的修改显然与页面整体风格不符,是一次错误的修改,不应该被发布;
- 容器服务中应用的自动部署,目前还仅仅只能实现镜像的更新,对于编排模板中的参数配置,只能通过页面编辑或调用open API的方式来实现,以及目前一个“触发器链接”只能用来更新一个应用,如果要批量更新还需要较为繁琐的流程。

对于第一点,可能有人会说,我们可以把app编译的过程也加入Dockerfile,这样在镜像编译的过程中就可以同时完成app的编译。问题是,这样做会将app的编译环境和生产环境混淆,在本文的例子中,tomcat所依赖的是java:7-jre,但如果我们想在容器中执行
> ```bash
$ mvn clean package -D maven.test.skip=ture

则必须安装java的jdk,这样显然是不合时宜的“曲线救国”方式。


展望

        阿里云持续交付平台 团队与容器服务团队正在合力解决上述问题,比如支持用户自定义编译/测试环境,支持功能更丰富的图形化发布功能等等,相信不久的将来,基于Docker的持续交付将以更加优雅的方式展现在用户面前。

【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击

网友评论

1F
pangge

sdfafew

pangge 赞同
pangge

dfaew

评论
2F
jxc418

总结里说的几个问题的确是用户的痛点啊,盼尽快上线!

3F
kkkk168

教程都写了,希望写的详细点

kkkk168

一上来就是拿到东西就配置 没有思想 走到哪一步都不知道 这是我的额感受

评论
billy.lb
文章7篇 | 关注14
关注
提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过Docker容器来进行应用生命... 查看详情
兼容Jenkins标准,可提供快速可靠的持续集成与持续交付服务。基于容器技术和阿里云基础服务... 查看详情
业内领先的面向企业的一站式研发提效平台(研发效能),通过项目流程管理和专项自动化提效工具,能... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航