一、方案简介
1、项目代码存储阿里云CODE
2、Java项目 maven私有仓库使用阿里云仓库服务
3、镜像仓库使用阿里云容器镜像服务
代码推送到仓库---->触发镜像服务自动生成项目镜像----->触发rancher的Webhooks容器自动升级
二、具体实施步骤(举例)
1、阿里云CODE创建项目
- 地址:https://code.aliyun.com/ ,创建项目组,新增项目,将本地项目提交到仓库
2、阿里云容器镜像服务
- 新增命名空间
- 创建镜像仓库
- 代码与镜像仓库的关联就在这里
- 选择项目
- 创建完成,进入仓库详情页
- 构建-主要是提交代码触发镜像构建的的一些设置,比如分支提交自动构建,分支tag自动构建
- 触发器-主要是构建完成后自动进行镜像的处理,比如直接调用rancher的Webhooks进行升级
3、镜像自动构建
- 构建-默认规则为分支提交tag,tag命名为tags:release-v$version格式,比如:tags:release-v20202020
- 例:构建后的镜像版本为20202020
- 新建构建规则,分支提交自动构建,提交代码到指定分支,可自动触发
- 注意此处的Dockerfile目录及Dockerfile文件名称,镜像构建依赖此配置,可在项目根目录放置Dockerfile文件
- 镜像版本此处只支持静态即命名为latest,但是有缺陷的是镜像版本会覆盖,回滚时无法选择版本号
4、触发rancher自动升级
- 创建触发器
- 触发器URL填写rancher内设置的Webhooks地址,触发方式可选择Tag触发,即上面配置的版本号latest
5、rancher配置
- 添加镜像库为阿里云镜像地址,输入账号密码
- 选择专有网络地址会更快 例如: registry-vpc.cn-shanghai.aliyuncs.com
- 新增Webhooks地址 API菜单Webhooks
- 镜像标签即为镜像的版本号,当阿里云触发此Webhooks时,会json传参数,其中tag:latest
- 服务选择器即为要升级的服务,比如task项目,可在task项目打一个标签,在此处填写
- 多个服务需添加多个Webhooks地址
- 添加成功后,将此地址填写到 上面看到到阿里云触发器URL即可
6、完成配置
- 至此整个流程配置完成
- 开发人员开发dev分支,提交测试,codereview后最终代码合并到release分支,自动触发镜像构建。镜像构建完成后,自动推送到rancher的webhooks,服务即滚动升级完成。
三、其他说明
## docker环境安装
yum install docker
service docker start
chkconfig docker on
## ECS 上 安装 rancher
sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:v1.6.21
## java 项目Dockerfile需两阶段构建
1、先使用maven镜像将项目打包成jar包 maven镜像可用自己的
2、将jar包传入二阶段镜像继续制作
例子:
FROM maven:3.5-jdk-8 AS build
RUN mkdir -p /build/app
RUN mkdir -p /build/config
COPY ./ /build/app
##此处因为涉及私有maven仓库settings文件覆盖默认的
COPY docker/settings.xml /build/config
##打包代码
RUN mvn clean -f /build/app clean -s "/build/config/settings.xml" package -Pprod -Dmaven.test.skip=true
##此处为最终镜像依赖
FROM registry.cn-hangzhou.aliyuncs.com/xxx/centos-tomcat8:latest
RUN mkdir -p /build/deploy
##从一阶段 镜像内拷贝WAR包
COPY --from=0 /build/app/target/app.war /build/deploy/
如有更好方案或其他问题可留言