zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

Dockercode阿里 实现 基于 系列 持续 交付
2023-09-14 08:57:29 时间

        在上一篇博文:基于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)

####更新容器服务中的应用####

 #8194; #8194; #8194; #8194; #8194; #8194; #8194; #8194;我们可以通过容器服务提供的“重新部署”按钮或者“触发器链接”来实现应用的重新部署,在此过程中,应用中的服务将更新最新的docker镜像。部署完成后,我们访问url就可以看到修改过后的页面了:

![123](https://oss.aliyuncs.com/yqfiles/c79a16ec1ffdbedc73846bfcda877d31e794547c.png)

 #8194; #8194; #8194; #8194; #8194; #8194; #8194; #8194;当然,容器hub现在也支持webhook的配置,也就是可以配置新镜像编译完之后的回调地址,我们在此处填入“触发器链接”的url,就可以实现流程的自动化:

![_2016_04_10_10_57_41](https://oss.aliyuncs.com/yqfiles/b81a864065b7afd3832b73153ae9ca2cd197050e.png)


###总结### #8194; #8194; #8194; #8194; #8194; #8194; #8194; #8194;现在我们已经可以做到在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的持续交付将以更加优雅的方式展现在用户面前。


在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目 一般情况下,将一个项目部署到生产环境的流程如下: 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。 整个过程相当复杂而漫长,其中还需要输入不少的命令,比如上传代码,git的拉取或者合并分支等等。
docker阿里云镜像加速 我们都知道因为某些原因我们访问外网都是比较慢的,比如我们使用maven下载依赖时是一个道理,同样的使用docker从docker.hub上下载镜像也是比较慢的。针对这种访问官网比较慢的情况有两种方案,第一种就是使用国内的仓库,第二种就是使用一个加速器。这里我们配置docker的镜像加速从来来实现提速。