如今已经有不少成熟的生成流水线了,如Azure DevOps,直接在界面中配置好便可,至关便捷,生成流水线的工做方式、工做过程也能够简单了解,我在空闲时间搭建了一个简单生成流水线旨在巩固我的对生成流水线的理解。html
1、生成流水线设计图java
平时,在腾讯云、阿里云搞活动时薅了点羊毛 ,搞了几天便宜的服务器,不能让这些服务器闲置了,也借此来试试搭建一条流水线,目的是在于,一个新项目要开始弄,在我选择一个Asp.Net Core并推送到码云中,而后在Jenkins中作一些相关的配置便可,后期代码上的变动不会影响部署环境的变动。主要缘由在于,看到过几回先开发后部署,而后遇到的一些部署方面的问题出现耽搁,所以,先把环境部署完毕,后期要作的只是将业务代码的不断加入进来,而且对上能够看到工做成果,如同高楼建筑,能够看到一层一层的往上叠加。docker
代码方面:Asp.Net Core、Git、Gitee服务器
服务器方面:Jenkins、Docker Machine、Docker Compose、Docker Swarm微信
镜像仓库:腾讯云镜像仓库ssh
2、设计过程当中见到的多条道路工具
在设计过程当中发现有些地方能够有多种方式实现,谈谈我所见到的几种方式:测试
一、单台服务器ui
代码存储在码云或是GitHub中,阿里云
可安装Jenkins能够安装到容器中或主机上,
可安装Docker Compose到容器中或主机上,更方便的启动/中止批量容器,
在Jenkins中使用脚本时:
能够选择用简单脚本启动/终止容器(docker run/stop)。
能够选择用Docker Compose启动/中止批量容器(须要代码中提供docker.compose.yaml文件)。
可使用代码或是主机内的脚本文件启动/终止容器(使用.sh脚本文件)。
代码变动,利用jenkins定时拉取变更,而后从新部署容器,很简单和方便的实现持续交付与部署。
二、多台服务器
代码存储在码云或是GitHub中,
可安装Docker Machine到一台服务器上,而后快速的经过这一台服务器把其余服务器的docker环境搭建好。
可安装Docker Swarm,我暂时还只是用Docker Swarm,对于k8s没有涉及,因此暂不该用,对于Swarm的使用,我以前是有4台主机,所以在安装了Docker Machine的那一台就直接发起了一个集群,并把其余服务器也加入了进来,造成了以下局面:
虽然,看起来没得什么问题,一样也可使用,可是对于Host1来说,负担太大,既做为奶妈(镜像生产者)又要做为奶爸(集群管理者)。所以为将压力分离一部分,也就有了下面的局面:
可安装Jenkins能够安装到容器中或主机上,
可安装Docker Compose到容器中或主机上,更方便的启动/中止批量容器,
在Jenkins中使用脚本用于构建镜像时:
能够选择用简单脚本删除原有镜像、构建镜像、启动、终止容器等(docker rmi/build/run/stop)。
能够选择用Docker Compose删除镜像、从新构建镜像、启动/中止批量容器等(须要代码中提供docker.compose.yaml文件,在该文件中指明build参数,Dockerfile位置)。(注意docker compose文件区别,一种是用来构建镜像的docker compose.yaml文件,这种指明了build和context,一种是镜像名称是指定了的,这种用于docker stack deploy,必需要在镜像存在的状况下才能用的。)
可使用代码或是主机内的脚本文件删除镜像、从新构建镜像、启动/终止容器等(使用.sh脚本文件)。
我使用的是腾讯云的镜像仓库,用于存储构建后的镜像,并在swarm集群中拉取镜像部署服务。
代码变动,利用jenkins定时拉取变更,而后从新构建镜像,并将镜像推送到镜像仓库中,同时将更新swarm中的service,使用最新的镜像,滚动更新集群中的容器。在这里更新swarm中的service有多种方式,若是Jenkins是安装在主机上,那么能够直接在脚本中经过docker-machine ssh host2 相关更新命令,完成通知便可,若是Jenkins是安装在Docker中,那么Jenkins中须要安装SSH Plugin插件用来链接远程主机,而后执行更新。还有的方式就是,我不通知swarm集群,Jenkins服务器能够充当测试服务器,当测试人员测试完毕后,在swarm集群内经过命令手动更新service或是借助UI工具如portainer来手动更新service,更有甚者,在swarm manager节点上在安装一个Jenkins,用来拉取最新镜像(镜像更新触发拉取动做),而后更新service,这种方式我暂时没有尝试过,应该也是行的通的。
3、现有集群环境以下
目前,搭建好了以下环境,对于镜像构建方如何通知swarm集群更新,尚未作到自动更新,暂时使用手动在swarm集群中更新,而对于镜像构建方的自动构建和镜像推送到镜像仓库现已完成。
在Swarm集群中,安装Portainer集群版本,能够监控整个集群的信息,对于手动更新来说是很方便的,在Portainer中,在左侧有一个registry的菜单,点击进入后选择本身的仓库地址,用来配置我在腾讯云的仓库信息。
在Portainer菜单Service中能够建立或更新service,获取最新的镜像完成更新操做,相比用命令行去操做轻松许多。
后期将会完善自动通知swarm集群更新service功能(至于要不要这个功能,须要斟酌一番)。
本文地址:http://www.javashuo.com/article/p-mumkuarx-es.html
欢迎关注微信订阅号,有新的文章将同步到订阅号中
2018-11-24,望技术有成后能回来看见本身的脚步