followmedevops实践之路(代码片段)

shanyou shanyou     2023-01-02     127

关键词:

引言

天下武功,唯快不破

想要提高开发团队效率,势必要有一套完整而成熟的开发流程方案,除了sprint迭代开发模式之外,还有近几年流行的devops流程,都是可以大幅度提高开发效率的工具. 我们团队也不断探索、实践,最终形成了现有的一套体系,从最初的手动发布到现有的自动化,从起始的繁琐易乱到当下的简洁明了。我们希望将我们曾经踏过的脚印与大家一起分享,为各位展示一条 我们的devops 的实践之路,同时也希望能为各位避免走入同样的弯路提供些许帮助。

?

背景

我们是一个 .net(core) / go / nodejs 的多语言混合式开发团队,致力于微服务架构。项目初期基于 .net framework, 开始并没有准备做 devops,基于WindowsgRPC 服务ASP.NET 做持续部署还是比较麻烦(不管是停止远程服务/更新二进制包/docker化流程都太重)。当我们全面拥抱.net core 2.0之后,其原生跨平台的特性促成了我们的 CI/CD (continue integration/continue deployment) 之路。

?

发展历程

从0,到devops我们也经历过好几个阶段,每个阶段所存在的问题, 大家也可以对号入座的看看

1 原始阶段/纯人工管控

  • 大家司空见惯的在开发机build,然后copy到服务器上,手工解压更新,启动服务!
  • 这种方式效率太低, 质量也不敢保证, 没有流程章法

2 Ansible + git

  • 采用git来管理二进制发布包 ,可以有效的进行发布的粗略diff/特别是配置文件
  • 采用ansible来管理服务器,大大减低了人肉成本
  • 运维大量的重复性操作

3. devops

?

Devops

技术分享图片

为了实现开发自运维, 我们采用Jenkins +docker + portainer 三剑客, 来解决开发/运维/服务器/各自的问题

  1. Docker
    1. 环境依赖, 例如 .net core runtime版本/ OS 版本, 再也不用让运维提前准备环境了
    2. 资源限制, 例如有些服务存在内存泄漏/CPU问题, docker可以限制他的最大使用率, 确保同台服务器上其他docker 服务可以正常使用
  2. Portainer
    1. Docker management UI
    2. 统一管理docker服务
  3. Jenkins
    1. Build source code
    2. Build docker image ,ship
    3. Auto deploy

架构如下 https://github.com/FollowmeTech/jenkins-cicd

技术分享图片

功能

  • base on Jenkins
  • base on docker register hub
  • base on portainer management

依赖

  • docker registry [harbor]
  • portainer (docker management)
  • git-server
  • docker /docker-compose

体验一下

为了方便大家快熟感受, 我搭建了一个play环境

大家可以向 https://github.com/FollowmeTech/jenkins-cicd-practise 提交代码

再登陆 https://ci.rileme.club ,选择相应的分支进行build发布 (play/123456)

项目发布完成, 快熟预览效果 http://demo.rileme.club

部署使用

广告时间

Hi, 是的,我们在招聘 , 详情如下

https://github.com/FollowmeTech/hire/blob/master/dotnet.md

你是想一辈子卖糖水, 还是再折腾折腾

Think about it

?

?

实战|android后台启动activity实践之路续(代码片段)

...台启动Activity的方案,参考实战|Android后台启动Activity实践之路一文,当时的结论如下:原生AndroidROMAndroid原生ROM都能正常地从后台启动Activity界面&# 查看详情

工程实践之路:c++接口设计中的工厂模型(代码片段)

工程实践之路:C++接口设计中的工厂模型设计模式之工厂模式为什么使用工厂模式1.工厂设计模式是为了将对象的创建与使用进行分离2.其他好处简单工厂模式工厂方法模式抽象工厂模式参考资料上一篇文章写了《工程... 查看详情

opencv实践之路——人脸检测(c++/python)(代码片段)

本文由@星沉阁冰不语出品,转载请注明作者和出处。文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159微博:http://weibo.com/xingchenbing 之前一直觉得人脸检测是非常麻烦的,即使是用opencv,麻烦到我... 查看详情

高并发场景下jvm调优实践之路(代码片段)

作者:vivo互联网技术团队LiGuanyun、JessicaChen一、背景2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验。通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表... 查看详情

opencv实践之路——人脸识别之二模型训练(代码片段)

本文由@星沉阁冰不语出品,转载请注明作者和出处。文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51407336微博:http://weibo.com/xingchenbing 在之前的博客人脸识别之一数据收集和预处理之中,已经下载了ORL... 查看详情

电商网站https实践之路——概述篇(代码片段)

写在开篇前的话:全站HTTPS已经是互联网企业发展的大势所趋。继淘宝、京东等电商完成全站HTTPS化后,笔者负责领导了公司的全站HTTPS工作。在整个过程中,笔者深刻体会到对于一个大型网站而言,全站HTTPS绝对... 查看详情

亿级pv的elk集群实践之路(代码片段)

前言笔者多年前便维护过ELK,但是由于站点日志流量及服务器数量并不是很多基本都是单机搞定。然而光Web服务器就400+,Nginx日志大小每天50G+,加上其他业务系统日志,之前单机ELK显然不足以支撑现有的业务场景。规划篇目前... 查看详情

opencv实践之路——人脸识别之一数据收集和预处理(代码片段)

本文由@星沉阁冰不语出品,转载请注明作者和出处。文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51386949微博:http://weibo.com/xingchenbing 前段时间对人脸检测和人脸标记进行了一些尝试:人脸检测(C&#... 查看详情

git+jenkins学习之路(十四)之自动化脚本部署实践(代码片段)

一、环境说明和准备1、环境说明主机名IP地址角色系统deploy-server192.168.56.12发布Centos7.4web192.168.56.13web服务器,nfs服务器Centos7.42、服务器准备工作(1)发布机前期准备a.增加普通用户并配置密码[[email protected]~]#useraddwww[[email... 查看详情

电商网站https实践之路——性能优化篇(代码片段)

通过分析TLS握手过程的细节我们会发现HTTPS比HTTP会增加多个RTT网络传输时间,既增加了服务端开销,又拖慢了客户端响应时间。因此,性能优化是必不可少的工作。很多文章都集中在服务端的性能优化上,但对于... 查看详情

电商网站https实践之路——系统改造篇(代码片段)

首先是要让系统支持HTTPS。需要有接入层来统一处理TLS握手。页面资源的替换也存在一些坑。对于不同的域证书选择上也要注意,最好的方式是提前整理好域列表绑定成一张支持多域名和泛域名的证书。大多数互联网公司的CD... 查看详情

java并发编程技术实践之路专栏导读(代码片段)

Java并发编程专栏导读引言并发知识图谱线程,并发编程的第一步如何创建线程线程池的利用锁,线程安全的依托如何保证类的安全性锁的使用常识并发包中的工具类yield和sleep,它们的区别你知道吗经典模型:生... 查看详情

android开发学习之路-flutter混合开发实践(代码片段)

前言为了迎合新技术,并且可以一端开发两端受用,于是乎在引入新的功能模块的时候,尝鲜使用flutter来进行开发。众所周知,在尝鲜新技术的时候总会有种畏惧感,人类总是喜欢使用熟悉的东西,而作... 查看详情

opencv实践之路——使用imread()函数读取图片的六种正确姿势(代码片段)

本文由@星沉阁冰不语出品,转载请注明作者和出处。文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51375078微博:http://weibo.com/xingchenbing 经常看到有人在网上询问关于imread()函数读取图片失败的问题。今天心... 查看详情

申通的云原生实践之路:如何实现应用基于容器的微服务改造?(代码片段)

【题目大意】ByteotianBitBank(BBB)拥有一套先进的货币系统,这个系统一共有(n)种面值的硬币,面值分别为(b1,b2,...,bn).但是每种硬币有数量限制,现在我们想要凑出面值(k)求最少要用多少个硬币.(nle200,1lek,b_ile100000)【分析】看一眼题目,... 查看详情

详解flinkcatalog在chunjun中的实践之路(代码片段)

...将为大家带来FlinkCatalog的介绍以及FlinkCatalog在ChunJun中的实践之路。FlinkCatalog简介Catalog提供元数据,如数据库、表、分区、视图,以及访问存储在数据库或其他外部系统中的数据所需的函数和信息。FlinkCatalog作用数据处理中最关... 查看详情

程序员入门--两年养成之路(代码片段)

...在鹅厂两年来的工作中,对编程和工程有了初步的理解和实践,因此决定写下来和大家一起交流,同时正值鹅厂的实习生和毕业生进厂搬砖之际,也希望能给新手们带来一点收获。编程入门  总结一下这两年的编程经历(抛开... 查看详情

kaggle新手入门之路(代码片段)

...g后,迫不及待地想去参加一场Kaggle的比赛,却发现从理论到实践的转变实在是太困难了,在此记录学习过程. 一:安装Anaconda教程大多推荐使用Jupyter Notebook来进行数据科学的相关编程,我们通过Anaconda来安装JupyterNotebook和需要用... 查看详情