好久没有更新文章了 最近公司在使用Spring Cloud构建的项目中常常会持续发布变动频繁,一天中会出现发布屡次的状况 在这种状况下对测试环境作了改造 使得开发人员能够再也不过多关注发布与更新docker镜像的操做 当master分支上的代码发生变化时会自动更新docker容器中正在运行的镜像版本,目前分为 开发环境 测试环境 和线上环境 三套 测试环境接近于线上环境。html
集成是指软件我的研发的部分向软件总体部分交付,以便尽早发现我的开发部分的问题; 部署是代码尽快向可运行的开发/测试节交付,以便尽早测试; 交付是指研发尽快向客户交付,以便尽早发现生产环境中存在的问题。若是说等到全部东西都完成了才向下个环节交付,致使全部的问题只能再最后才爆发出来,解决成本巨大甚至没法解决。git
而所谓的持续,就是说每完成一个完整的部分,就向下个环节交付,发现问题能够立刻调整。 是的问题不会放大到其余部分和后面的环节。这种作法的核心思想在于:既然事实上难以作到事先彻底了解完整的、正确的需求,那么就干脆一小块一小块的作,而且加快交付的速度和频率,使得交付物尽早在下个环节获得验证。早发现问题早返工。
举个例子,你家装修厨房,其中一项是铺地砖,边角地砖要切割大小。若是一次全切割完再铺上去,发现尺寸有误的话浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。
装修厨房有不少部分,每一个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路通顺,水管装好了也要测试冷水热水。若是所有装完了再测,出现问题可能会互相影响,好比电路不行可能要把地砖给挖开……。那么每完成一部分就测试,这是持续部署。
所有装修完了,你去验收,发现地砖颜色不合意,水池过小,灶台位置不对,返工吗?因此不如没完成一部分,你就去用一下试用验收,这就是持续交付。golang
补充:从敏捷思想中提出的这三个观点,还强调一件事:经过技术手段自动化这三个工做。加快交付速度。
引用知乎-赵劼web
Gogs+jenkins+Docker+Docker Swarm(此处暂未使用k8s)+Protainerdocker
Gogs是一款相似Github(国内有码市)的开源文件/代码管理系统(基于Git) 无闻大神写的 以前学golang的时候就是看的他的视频bash
Jenkins是一个功能强大的应用程序,容许持续集成和持续交付项目,不管用的是什么平台。这是一个免费的源代码,能够处理任何类型的构建或持续集成。网络
Docker 是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。容器是彻底使用沙箱机制,相互之间不会有任何接口。maven
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操做(包括上传下载镜像,建立容器等操做)、事件日志显示、容器控制台操做、Swarm集群和服务等集中管理和操做、登陆用户管理和控制等功能函数
此处咱们使用了两个插件工具
<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.3</version> <configuration> <repository>192.168.2.50:8082/demo/${project.artifactId}</repository> <tag>${project.version}</tag> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> <executions> <execution> <id>default</id> <phase>package</phase> <goals> <goal>build</goal> <goal>push</goal> </goals> </execution> </executions> </plugin>
打开 系统管理 -> 管理插件 -> 可选插件 ,在右上角的输入框中输入“gogs”来筛选插件:
1.进入咱们的仓库,点击仓库设置
2.添加webhook
点击 管理Web钩子 -> 添加Web钩子 ->选择Gogs
添加以下配置:
推送地址的格式为:http(s)://<你的Jenkins地址>/gogs-webhook/?job=<你的Jenkins任务名>
3.配置Jenkins
进入主面板,点击咱们的任务:
选择配置:
选择Gogs Webhook 根据本身的须要进行配置,若是没有设置密钥那么什么都不用动。
测试
咱们回到gogs,点击 推送测试 ,推送成功以后会看到一条推送记录
回到咱们的Jenkins能够看到已经成功进行了一次构建:
待续......
docker stack deploy --with-registry-auth -c docker-compose.yml dx-ec
#!/bin/bash APP_NAME=goods-center #TODO 分支若是发生变化就进行下面操做 rm -rf ./target docker login --username=admin --password=admin123 192.168.2.50:8082 #打包上传docker镜像 mvn package -Dmaven.test.skip=true # 获取tag jarName=$(ls ./target/ | grep 'docker-info.jar' | awk '{print $1}' | sed -n '1,1p') jarInfo=${jarName:0:-16} len=${#APP_NAME} DOCKER_TAG=${jarInfo:len+1} IMAGE_NAME='192.168.2.50:8082/dx-ec/'${APP_NAME} cd ../deploy-robot git checkout master line=$(cat -n ./docker-compose.yml | grep "${IMAGE_NAME}" | awk '{print $1}') #修改版本号 sed -i "${line}c\ image: ${IMAGE_NAME}:${DOCKER_TAG}" ./docker-compose.yml #TODO 提交docker-compose.yml 触发 robot git add docker-compose.yml git commit -m "update docker-compose.yml line: ${line} image: ${APP_NAME}:${DOCKER_TAG}" git push -u origin master