资讯专栏INFORMATION COLUMN

Spring Cloud【使用jenkins持续部署】Gogs+jenkins+Docker Swa

王笑朝 / 3030人阅读

摘要:而所谓的持续,就是说每完成一个完整的部分,就向下个环节交付,发现问题可以马上调整。那么每完成一部分就测试,这是持续部署。这是一个免费的源代码,可以处理任何类型的构建或持续集成。容器是完全使用沙箱机制,相互之间不会有任何接口。

导读:

很久没有更新文章了 最近公司在使用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镜像插件

    com.spotify
    dockerfile-maven-plugin
    1.4.3
    
        192.168.2.50:8082/demo/${project.artifactId}
        ${project.version}
        
            target/${project.build.finalName}.jar
        
    
    
        
            default
            package
            
                build
                push
            
        
    

配置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/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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76438.html

相关文章

  • 使用 Jenkins 自动部署 Docker 服务(二、构建部署篇)

    摘要:如果还没有搭建好可以使用的,请先移步到这篇文章进行搭建使用自动部署服务一搭建篇目标通过实现推送代码后自动部署基于的服务准备工作获取示例项目或者直接复制以下文件内容获取示例项目项目文件页面文件镜像文件部署文件部署脚本文件页面文件项目很简单, 如果还没有搭建好可以使用 Docker 的 Jenkins,请先移步到这篇文章进行搭建 使用 Jenkins 自动部署 Docker 服务(一、Je...

    denson 评论0 收藏0
  • 基于 DockerGogsJenkins,Kubernetes 实践工程源代码的自动构建和持续

    本期目标 : 基于 Centos 7.6 , 封装出一个可用于运行 php 项目的开箱即用镜像本文不讨论 dockerfile 语法 , 并且假设你懂得基本的类unix 操作系统常识并拥有类unix 运行环境 (包括但不限于安装了mac 或 linux 的实体机 , 类unix虚拟机 , 安装了 MinGW 或 CygWin 的 windows 机器) , 并且认为你懂得基本的 docker 操作...

    Achilles 评论0 收藏0
  • 基于 DockerGogsJenkins,Kubernetes 实践工程源代码的自动构建和持续

    本期目标 : 基于 Centos 7.6 , 封装出一个可用于运行 php 项目的开箱即用镜像本文不讨论 dockerfile 语法 , 并且假设你懂得基本的类unix 操作系统常识并拥有类unix 运行环境 (包括但不限于安装了mac 或 linux 的实体机 , 类unix虚拟机 , 安装了 MinGW 或 CygWin 的 windows 机器) , 并且认为你懂得基本的 docker 操作...

    RayKr 评论0 收藏0
  • 基于 DockerGogsJenkins,Kubernetes 实践工程源代码的自动构建和持续

    本期目标 : 基于 Centos 7.6 , 封装出一个可用于运行 php 项目的开箱即用镜像本文不讨论 dockerfile 语法 , 并且假设你懂得基本的类unix 操作系统常识并拥有类unix 运行环境 (包括但不限于安装了mac 或 linux 的实体机 , 类unix虚拟机 , 安装了 MinGW 或 CygWin 的 windows 机器) , 并且认为你懂得基本的 docker 操作...

    Moxmi 评论0 收藏0
  • Docker容器系列教程(三):jenkins环境搭建与插件安装

    摘要:本文将使用这些命令搭建一个持续集环境,解决不能联网的问题来安装各种常用插件。总结通过本章学习,你已经知道了基于如何在环境下搭建环境,并创建一个项目。以为基础框架,为数据访问层,为权限授权层,对常用数据进行缓存,基于构建的作为前端框架。 回顾:上一文对Docker常用的命令以罗列的方式做了一个详尽的介绍。本文将使用这些命令搭建一个jenkins持续集环境,解决jenkins不能联网的问题...

    vvpvvp 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<