JenkinsCI/CD和GitlabCI/CD
JenkinsCI/CD和GitlabCI/CD
文章目录
本文个人理解不足之处望指正!
说明:这俩都是Devops的两种实践
一、为什么需要Devops
1、假如没有Devops
如果没有:无论对于前端项目还是后端项目,对于项目的构建都会交由到开发者的手中,测试、代码检查、部署等等,所有发布需要的工作都会交给到开发者手中,重复且琐碎,并且也不符合敏捷开发的要求。
2、自动化工具实现Devops
我们可以通过一些工具的整合帮助我们实现:持续构建(Continuous Build,CB)
、持续集成(Continuous Integration,CI)
、持续交付(Continuous Delivery,CD)
、自动化测试(Auto Testing, AT)
、自动化运维
。
版本控制&协作开发 | GitHub、GitLab、BitBucket、Coding、Gitee |
---|---|
自动化构建和测试 | Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、Nexus |
持续集成&交付 | Jenkins、Capistrano、BuildBot、Fabric、Travis CI、flow.ci Continuum、CruiseControl、TeamCity、Spinnaker |
容器平台 | Docker、Rocket、Ubuntu(LXC)、AWS、阿里云 |
配置管理 | Saltstack、Ansible、Vagrant、Chef、Puppet、CFengine、Rudder、RunDeck |
微服务平台 | OpenShift、Pivotal Cloud Foundry、Kubernetes、Mesosphere、Istio、Docker Swarm |
日志管理 | Logstash、Fluentd |
监控,警告&分析 | Nagios、Ganglia、Sensu、Zabbix、ICINGA、Graphite、DataDog、Kibana、Prometheus |
上面的就是Devops工具链,而JenkinsCI/CD和GitlabCI/CD 就是来自于这其中。
二、比较
1、Jenkins
整合 GitHub 或 SVN实现版本的控制 ,通过Maven或者Gradle进行项目的部署,需要写一些脚本;此外,Jenkins对于服务器性能依赖较高比较吃内存,在不运行job的时候也比较占用内存,大多数你需要拓展的功能都需要依赖于插件,当然只要插件满足需要【那么问题就来了由于插件的众多对于插件的安装也会遇到一些问题】,你就可以拓展相应功能,由于Jenkins是由Java开发的所以需要运行Jenkins那就需要基于java环境,如果运行于容器那么就需要有一个含有jdk的基础镜像才可以。对项目没有侵入。适合职责分明的团队入手难度略高。Jenkins Plugins | Jinkins Plugins Wiki
2、Gitlab-CI
Gitlab-CI/CD依托于Gitlab,配置简单,只需安装一个gitlab-runner,和一个. gitlab-ci.yml配置文件;构建部署都运行在Gitlab-runner上runner对于服务器的要求不是很高,不运行任务的时候对于服务器的内存消耗可以忽略,并且提供了windows、linux的运行程序,开箱即用,项目集成Gitlab-CI需要在项目中添加gitlab-ci.yml文件,对项目有侵入。适用于敏捷开发团队,上手难度不大。掌握了CI的语法也就是会写yml就可以搞定了。对于前端项目会需要写一些脚本修改Nginx配置等操作。
3、比较
Gitlab-CI装备没有Jenkins好所以有些功能是实现不了的,遇到这些需求应该考虑使用Jenkins,毕竟Jenkins插件齐全。Jenkins对于单一职责的团队很使用,解放了开发,要不然开发就需要弄弄Devops【比如我】,小团伙大作为。
三、JenkinsCI/CD流程
四、GitlabCI/CD流程
五、小结
这二者优劣均有,gitlabci/cd上手不是很大。敏捷开发推荐gitlab-ci/CD.
持续构建(Continuous Build,CB):无论前端代码还是后端代码在提交后我们都需要对其进行基本的build构建。
持续集成(Continuous Integration,CI):多个分支的代码在开发完成后一定要经过构建及自动化测试之后才能决定要不要合并到主干上, 这就是持续集成。
持续交付(Continuous Delivery,CD):在持续集成的基础上将项目部署到灰度环境或者其他类似生产环境的机器,在模拟生产环境测试之后,然后手动部署到生产环境中去,这就是CD
持续部署 (Continuous Delivery,CD) :在持续交付的基础上,将原来手动部署生产环境的操作改为自动部署,这就是持续部署。