什么是Jenkins?
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
什么是CI/CD?
CI / CD的采用改变了开发人员和测试人员如何发布软件 最初是瀑布模型,后来是敏捷开发,现在是DevOps,这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。传统的软件开发和交付方法正在迅速变得过时。从历史上看,在敏捷时代,大多数公司会每月,每季度,每两年甚至每年发布部署/发布软件。然而,现在,在DevOps时代,每周,每天,甚至每天多次是常态。当SaaS正在占领世界时,尤其如此,您可以轻松地动态更新应用程序,而无需强迫客户下载新组件。很多时候,他们甚至都不会意识到正在发生变化。开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,大多数团队都有自动化流程来检查代码并部署到新环境。今天,我们将介绍什么是CI / CD / CD,以及现代软件公司如何使用工具将部署代码的流程自动化。 持续集成的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。 这些阶段中的每一个都是交付管道的一部分 。在Humble和Farley的书《持续交付:可靠的软件版本中,通过构建,测试和部署自动化》,解释“对软件的每次更改,都会在发布过程中经历一个复杂的过程。该过程涉及构建软件,然后通过多个测试和部署阶段进行这些构建。反过来,这需要许多人之间的合作,也许需要几个团队之间的合作。部署管道对此过程进行建模,并且它在持续集成和发布管理工具中的实现,使您能够在从版本控制转移到各种测试和部署,以向用户发布时查看和控制每个更改的进度。
持续集成(CI)
通过持续集成,开发人员能够频繁将其代码集成到公共代码仓库的主分支中。开开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。 这里的一个重要想法是让开发人员更快,更频繁地做到这一点,从而降低集成成本。实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。当然,还有一些权衡。此流程变更不提供任何额外的质量保证。实际上,许多组织发现这种集成变得更加昂贵,因为它们依赖于手动过程来确保新代码不会引入新的错误,并且不会破坏现有代码。为了减少集成任务期间的摩擦,持续集成依赖于测试套件和自动化测试执行。然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。 CI 的目标是将集成简化成一个简单、易于重复的日常开发任务,这将有助于降低总体构建成本,并在周期的早期发现缺陷。要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建,并且在发现 bug 的早期积极解决
持续交付(CD)
CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。此流水线是一个自动化系统,可以针对构建执行一组渐进的测试套件。CD 具有高度的自动化,并且在一些云计算环境中也易于配置。在流水线的每个阶段,如果构建无法通过关键测试会向团队发出警报。否则,将继续进入下一个测试,并在连续通过测试后自动进入下一个阶段。流水线的最后一个部分会将构建部署到和生产环境等效的环境中 许多人认为持续交付的吸引力主要在于,它自动化了从提交代码到仓库,再到测试和发布产品过程的所有步骤。这是构建和测试过程细致的自动化,但是如何发布以及发布什么仍然是需要人工操作,持续部署可以改变这一点
持续部署(CD)
持续部署扩展了持续交付,以便软件构建,在通过所有测试时自动部署。在这样的流程中,不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。 采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。随着 DevOps 的发展,新的用来实现 CI/CD 流水线的自动化工具也在不断涌现(jenkis,gitlab)
Jenkins的使用
首先需要搭建一个jenkins,这里不做阐述,感兴趣的小伙伴可以自行查阅文献和资料
登录Jenkins, 点击左侧的新建,创建新的构建任务
跳转到如下界面。任务名称可以自行设定,但需要全局唯一。输入名称后选择构建一个自由风格的软件项目(其他选项不作介绍)。并点击下方的确定按钮即创建了一个构建任务。之后会自动跳转到该job的配置页面
注意:如果看不到以上界面当中的选项,可以百度一下需要安装哪些插件,插件版本需要与当前的jenkins版本兼容
下图是构建任务设置界面,可以看到上方的几个选项"General", "源码管理", "构建触发器","构建环境", "构建", "构建后操作"。下面逐一介绍。
1.General:是构建任务的一些基本配置。名称,描述之类的
项目名称: 是刚才创建构建任务步骤设置的,当然在这里也可以更改。
描述: 对构建任务的描述。 丢弃旧的构建: 服务器资源是有限的,有时候保存了太多的历史构建,会导致Jenkins速度变慢,并且服务器硬盘资源也会被占满。当然下方的"保持构建天数" 和 保持构建的最大个数是可以自定义的,需要根据实际情况确定一个合理的值。
其他几个选项在这里不做介绍,有兴趣的可以查看Jenkins"帮助信息", 会有一个大概的介绍。不过这些"帮助信息"都是英文的。
2.源码管理:就是配置你代码的存放位置(需要下载git插件)
指定git的分支
Git: 支持主流的github 和gitlab代码仓库。因我们的研发团队使用的是gitlab,所以下面我只会对该项进行介绍。
Repository URL:仓库地址
Credentials:凭证。可以使用HTTP方式的用户名密码,也可以是RSA文件。 但要通过后面的"ADD"按钮添加凭证。
Branches to build:构建的分支。*/master表示master分支,也可以设置为其他分支。
源码浏览器:你所使用的代码仓库管理工具,如github, gitlab.
URL:填入上方的仓库地址即可。
Version: 8.7 这个是我们gitlab服务器的版本。
Subversion:就是SVN,这里不作介绍。
3.构建触发器:就是构建任务的触发器
触发远程构建(例如,使用脚本): 该选项会提供一个接口,可以用来在代码层面触发构建。这里不做介绍,后期可能会用到。
Build after other projects are built: 该选项意思是"在其他projects构建后构建"。这里不作介绍,后期可能会用到该选项。
Build periodically: 周期性的构建。很好理解,就是每隔一段时间进行构建。
Build when a change is pushed to GitLab:当有更改push到gitlab代码仓库,即触发构建。后面会有一个触发构建的地址,一般被称为webhooks。需要将这个地址配置到gitlab中,webhooks如何配置后面介绍。这个是常用的构建触发器。
Poll SCM:该选项是配合上面这个选项使用的。当代码仓库发生改动,jenkins并不知道。需要配置这个选项,周期性的去检查代码仓库是否发生改动。
4.构建环境:就是构建之前的一些准备工作,如指定构建工具
我们当前使用的是Enable triggering of downstream project(启动下游项目) If checked, Jenkins will schedule builds of downstream Jobs.(如果检查无误,Jenkins将安排下游工作的构建。Block downstream trigger when building 建造时阻塞下游触发)
5.构建:选择下方的增加构建步骤
这里有很多种方式:这里介绍的是docker镜像,需要填写docker镜像地址和镜像仓库的密码
6.构建后操作:对project构建完成后的一些后续操作,比如生成相应的代码测试报告
-
Publish Clover PHP Coverage Report:发布代码覆盖率xml格式的文件报告。路径会在"build.xml"文件中定义
-
Publish HTML reports:发布代码覆盖率的HTML报告。
-
Report Crap: 发布crap报告。
-
E-mail Notification: 邮件通知,构建完成后发邮件到指定的邮箱
-
以上配置完成后,点击保存
Jenkins的使用-Gitlab Webhook
通过gitlab webhook实现与gitlab进行绑定,完成git代码分支提交,jenkins自动构建项目
下载所需插件
此时打开项目配置:Build when a change is pushed to GitLab. GitLab webhook URL: 项目的git地址,记录此处的URL
打开gitlab的setting---webhooks
温馨提示:
jenkins集成gitlab的webhooks实现代码提交自动构建: www.cnblogs.com/byhh/p/1562…
至此,就可以用jenkins周而复始的进行CI了,当然jenkins是一个强大的工具,功能绝不仅仅是以上这些,如果感兴趣的小伙伴可以自行查找文献温馨提示:不懂运维知识的同学,在不了解情况的时候,不要随意重启,或者升级jenkins,容易导致项目丢失,或者插件版本与jenkins版本不兼容,导致一系列坑爹问题
jenkins的介绍就到这里,放上一张Jenkins的思维导图,感兴趣的小伙伴可以下来再展开学习 upload-images.jianshu.io/upload_imag…
K8s
k8s全称kubernetes,这个名字大家应该都不陌生,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,正在如火如荼的发展。那么称霸容器领域的k8s究竟是有什么魔力呢?
在容器技术之前,大家开发用虚拟机比较多,比如vmware和openstack,我们可以使用虚拟机在我们的操作系统中模拟出多台子电脑(Linux),子电脑之间是相互隔离的,但是虚拟机对于开发和运维人员而言,存在启动慢,占用空间大,不易迁移的缺点
容器化技术应运而生,不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,启动速度很快,运行其中应用以外,基本不消耗额外的系统资源 Docker是应用最为广泛的容器技术,通过打包镜像,启动容器来创建一个服务。但是随着应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的重大问题,而且随着云计算的发展,云端最大的挑战,容器在漂移。在此业务驱动下,k8s问世
具体来说,主要包括以下几点:
- 服务发现与调度
- 负载均衡
- 服务自愈
- 服务弹性扩容
- 横向扩容
- 存储卷挂载
- 总而言之,k8s可以使我们应用的部署和运维更加方便。
k8s集群由Master节点和Node(Worker)节点组成。
Master节点
Master节点指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。
在Master上主要运行着:
- Kubernetes Controller Manager(kube-controller-manager):k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
- Kubernetes Scheduler(kube-scheduler): 负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。
- etcd:保存整个集群的状态。
Node节点
除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。
在Node上主要运行着:
- kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
- kube-proxy:实现service的通信与负载均衡
- docker(Docker Engine):Docker引擎,负责本机的容器创建和管理
下面给大家介绍企业当中阿里云平台k8s的使用
1.登陆阿里云账号----->控制台------>容器服务 - Kubernetes------>进入所要创建的集群------>左侧选择无状态
2.选择创建方式:这里主要介绍使用镜像创建
3.创建容器,介绍当中写的很清楚,根据步骤填写,点击下一步
4.选择镜像----镜像tag------镜像拉取策略------所需资源以及配置等
5.高级配置:可以在这里配置,也可以跳过,后续有需要再进行配置,点击创建,就创建好了
6.为容器创建服务:配置负载用到
7.为容器创建伸缩:自动的扩容或者缩容服务中Pod数量,当业务需求增加时,系统将为您无缝地自动增加适量容器 ,提高系统稳定性
配置负载均衡
1.阿里云控制台----->负载均衡------->实例管理
2.创建虚拟服务器组-------》服务器通过容器当中的节点ip搜索-------》端口填写(容器当中的内部端点)
3.创建监听-----》
域名解析
域名注册好之后如果不进行域名解析,那么这个域名就不能作网址访问,经过解析的域名可以用来作为电子邮箱的后缀,也可以用来作为网址访问自己的网站,因此域名投入使用的必备环节是“域名解析”。要访问一台互联网上的服务器,最终还必须通过访问IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。一个域名只能对应一个IP地址,而多个域名可以同时被解析到一个IP地址。域名解析需要由专门的域名解析服务器(DNS)来完成 也可以避免直接使用ip导致ip被封引起的所有ip下的服务都挂掉
1.阿里云控制台-----》云解析DNS
2.找到需要配置解析的域名------》添加记录-----》填写记录值
3.阿里云控制台-----》负载均衡-----》配置转发策略------》填写域名解析设置的域名
证书配置
这里介绍的是免费的证书平台
1。证书管理后台-----》首页-----》填写域名,进行创建------》保存私钥,公钥到网站提供的软件-----》将记录值配置到服务器的dns
总结:
以上就是小编个人认为的一个后端服务从打包到部署,以及域名配置的整个流程,在实际工作当中,小伙伴们可以根据公司的实际情况作调整,但换汤不换药,针对中小型项目的流程大概就是这样,如果是更大型的分布式项目,小编也在学习当中,欢迎小伙伴们的指正。