导读:

很久没有更新文章了 最近公司在使用Spring Cloud构建的项目中经常会持续发布变更频繁,一天中会出现发布多次的情况 在这种情况下对测试环境做了改造 使得开发人员可以不再过多关注发布与更新docker镜像的操作 当master分支上的代码发生变化时会自动更新docker容器中正在运行的镜像版本,目前分为 开发环境 测试环境 和线上环境 三套 测试环境接近于线上环境。

持续集成、持续部署、持续交付的概念以及其目的?

集成是指软件个人研发的部分向软件整体部分交付,以便尽早发现个人开发部分的问题; 部署是代码尽快向可运行的开发/测试节交付,以便尽早测试;交付是指研发尽快向客户交付,以便尽早发现生产环境中存在的问题。

如果说等到所有东西都完成了才向下个环节交付,导致所有的问题只能再最后才爆发出来,解决成本巨大甚至无法解决。

而所谓的持续,就是说每完成一个完整的部分,就向下个环节交付,发现问题可以马上调整。
是的问题不会放大到其他部分和后面的环节。

这种做法的核心思想在于:既然事实上难以做到事先完全了解完整的、正确的需求,那么就干脆一小块一小块的做,并且加快交付的速度和频率,使得交付物尽早在下个环节得到验证。早发现问题早返工。
举个例子,你家装修厨房,其中一项是铺地砖,边角地砖要切割大小。如果一次全切割完再铺上去,发现尺寸有误的话浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。
装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路通顺,水管装好了也要测试冷水热水。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地砖给挖开……。那么每完成一部分就测试,这是持续部署。
全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如没完成一部分,你就去用一下试用验收,这就是持续交付。


补充:从敏捷思想中提出的这三个观点,还强调一件事:通过技术手段自动化这三个工作。加快交付速度。

引用知乎-赵劼

准备工作

工具

Gogs+jenkins+Docker+Docker Swarm(此处暂未使用k8s)+Protainer

Gogs

Gogs是一款类似Github(国内有码市)的开源文件/代码管理系统(基于Git) 无闻大神写的 之前学golang的时候就是看的他的视频

jenkins

Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。

Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Protainer

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能

开始

思路

  • 使用Gogs的钩子函数 来 触发 jenkins
  • 项目发生变化 触发 jenkins构建docker镜像
    修改docker-compose.yml文件 提交 docker-compose.yml 到 gogs docker-compose 项目上
  • 当 gogs docker-compose 项目发生变化 触发 jenkins docker swarm 运行最新的镜像

插件

此处我们使用了两个插件

maven构建Docker镜像插件

<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 webhook插件

配置 Gogs webhook 插件

打开 系统管理 -> 管理插件 -> 可选插件 ,在右上角的输入框中输入“gogs”来筛选插件:

在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/bashAPP_NAME=goods-center#TODO 分支如果发生变化就进行下面操作
rm -rf ./targetdocker 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-robotgit checkout masterline=$(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 触发 robotgit add docker-compose.ymlgit commit -m "update docker-compose.yml line: ${line}   image:  ${APP_NAME}:${DOCKER_TAG}"git push -u origin master

Spring Cloud【使用jenkins持续部署】Gogs+jenkins+Docker Swarm+Protainer相关推荐

  1. 在Google Cloud Platform上持续部署Node.js

    by Gautam Arora 由Gautam Arora 在Google Cloud Platform上持续部署Node.js (Continuous Deployment for Node.js ...

  2. Tapd+腾讯工蜂+Jenkins持续部署

    Tpad关联腾讯工蜂 tapd,项目设置,流水线设置 这个网址复制到:腾讯工蜂,项目,项目高级设置,网络回调钩子 服务器安装git 这里已安装,只是查看. git需要配置ssh秘钥,设置本地全局账户 ...

  3. Jenkins——持续集成及Jenkins介绍和安装配置(插件,用户权限,凭据,Maven安装打包,配置tomcat用户权限)

    持续集成及Jenkins介绍和安装配置 持续集成及Jenkins介绍 软件开发生命周期 持续集成 持续集成的组成要素 持续集成的好处 Jenkins介绍 Jenkins安装和持续集成环境配置 Gitl ...

  4. Jenkins持续集成 之 Jenkins安装

    一.安装JDK与TOMCAT8 参考地址: http://ibm.chick.blog.163.com/blog/static/144201610201652811537410/ 二.下载Jenkin ...

  5. 部署环境从docker swarm迁移到k8s后kie-server的发布方式变化

    书接swarm https://cloud.tencent.com/developer/news/475316 swarm的集群部署非常简单,但领导说docker和 docker swarm都不想用 ...

  6. 部署环境从docker swarm迁移到k8s后kie-server的发布方式变化(二)

    正如后来的考虑, 如果外接maven私库照理说是ok的, 这样去掉volume的设计整个流程更加的自动化标准化. 开搞 第一步先部署一个nexus yaml文件如下: apiVersion: v1 k ...

  7. Gitlab+jenkins持续集成+自动化部署(三)

    搭建gitlab+Jenkins自动化部署 在jenkins上安装插件 Build Authorization Token Root Plugin. Build Authorization Token ...

  8. Jenkins 自动化部署上线 ​

    Jenkins 自动化部署上线 Jenkins 自动化部署上线 由于51cto格式问题,可以直接访问https://www.abcdocker.com/abcdocker/3174 查看原文 [TOC ...

  9. python 持续集成工具_持续集成工具: Jenkins学习

    持续集成工具: Jenkins学习 -- 部分内容收集自网络,如有侵权,请联系作者删除 一. 概念 在过去的开发整体流程中,是所有人写好代码之后统一进行合并(svn,git),然后进行测试,确保准发布 ...

最新文章

  1. 16S预测细菌组表型-bugbase:革兰氏阴阳、生物膜、致病力、移动元件、氧气消耗等
  2. 前端笔记(6)css布局机制,浮动,清除浮动,图片格式,ps切片工具及插件
  3. 【C++】35.判断一个文件是否存在、 查找字符串中的子串
  4. inline修饰虚函数问题
  5. 从零开始学视觉Transformer(1):Hello Vision Transformer
  6. mongodb java报授权,mongoDB 3.0用户创建与授权
  7. SOLID 原则的可靠指南
  8. BZOJ 2555: SubString [后缀自动机 LCT]
  9. mitmproxy抓包软件在mac上边的安装
  10. NOIP2017总结
  11. 【RPA】PDF生成器FPDF(Python篇)
  12. 【软件工程】对软件工程课程的希望及个人目标
  13. 中文ASCII码对照表
  14. 基于Android的网络聊天软件(仿QQ)设计与实现
  15. 三国杀网页版普通服务器怎么进,就想知道老服怎么进_三国杀Online_玩家社区_三国杀官方社区 - Powered by Discuz!...
  16. 企业应该怎样选择mes系统?
  17. 常用的Linux终端命令盘点
  18. 最高法规定网络转载涉嫌侵权需担责 10月10日起施行
  19. {“errcode“:48001,“errmsg“:“api unauthorized}
  20. 微信小程序实时音视频的使用

热门文章

  1. lazada店铺成长案例分享!把握小众类目商机,店铺月销过万单!
  2. 全球及中国晶圆键合和解键合设备行业竞争格局分析及投资前景评估报告2021年版
  3. vb制作可输出函数的通用DLL---VB_DLL_Link用法
  4. 精解C++的switch语句
  5. redis的7个应用场景
  6. 分布式服务动态上下线感知
  7. atcode062D(预处理&优先队列)
  8. 【原创】新手入门一篇就够:从零开发移动端IM
  9. select 与c:forEach结合小案例
  10. java堆内存与栈内存区别