Giter Site home page Giter Site logo

devops-framework's Introduction

DevOps Boot

基于Spring Boot的微服务快速开发框架

GitHub Maven Central GitHub Workflow Status (event)


DevOps Boot 是什么?

devops-boot提炼自腾讯DevOps团队内部多个项目,使用约定优于配置的设计理念,帮助我们专注于DevOps业务快速开发,它具有以下优势:

  • 简单 :几乎零配置快速开发微服务,低成本上手
  • 易用 :采用Spring Boot组件化**,易于学习理解
  • 统一 :目前已集成了微服务开发常用组件和统一配置
  • 扩展 :组件之间低耦合,高内聚,扩展十分方便

查看快速开始了解详情。

DevOps Boot 能解决什么问题?

  • 统一项目配置 : 免去繁琐的项目配置,gradle插件帮您解决烦恼
  • 统一依赖版本管理 : 多个项目统一jdk和三方依赖版本,避免版本冲突
  • 统一微服务治理解决方案: 解决多个项目技术方案参差不齐,架构不统一问题
  • 统一常用工具类 : 避免代码重复

功能特性

核心依赖

依赖 版本
JDK 1.8+
Kotlin 1.6.21
Gradle 6.8.3
Spring Boot 2.4.5
Spring Cloud 2020.0.2

示例

可以查看 sample 来了解如何优雅集成devops-boot框架。

devops-framework's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

devops-framework's Issues

feat: 日志路径支持自定义

framework 要支持自定义 日志路径, 对于一个已有项目接入改造,但比如已经线上运行的,或者是社区用户已经部署好的,都是一个隐性成本,可能影响已有的监控采集,存在上线后不可控,服务接入改造成本过高

对于新接入framework的项目可以使用我们默认推荐的方式,让他们开箱即用

服务注册instance-id使用hostname

consul注册服务时,默认的serviceName为spring.application.name,instanceId为-<server.port>,导致instanceId不唯一,在某些情况下可能出现异常,所以使用hostname来确定唯一性,格式为-<server.port>-

kotlin编译增加-java-parameters参数

-java-parameters用于Java 1.8反射生成方法参数名称的元数据信息,在某些情况下会使用到,如Actuator Endpoint@Selector注解获取方法参数名称

支持服务名称前缀后缀

当多个项目使用同一个注册中心时,可能出现服务名称冲突,如A项目和B项目同时包含名称为repository的服务,如果使用同一个注册中心会出现问题,所以通过添加服务名称前缀后缀来解决。

假设spring.application.name=repository,

  1. 默认情况,服务注册名称以及配置名称都为repository
  2. 配置service.prefix=prefix-,服务注册名称以及配置名称变为prefix-repository
  3. 配置service.suffix=-suffix,服务注册名称以及配置名称变为repository-suffix
  4. 配置service.prefix=prefix- & service.suffix=-suffix,服务注册名称以及配置名称变为prefix-repository-suffix

repository移除mavenLocal

gradle官方建议避免使用mavenLocal,文档

  1. maven将本地仓库作为缓存,而不是maven仓库
  2. gradle本身有自己的缓存逻辑
  3. maven本地仓库的数据不可信,可能被篡改

在实践过程中,我们也遇到了添加mavenLocal后,引入了莫名其妙的缓存问题导致依赖无法正确下载,因此从将mavanLocal从仓库列表中移除

开发devops-publish-gradle-plugin插件

开发devops-publish-gradle-plugin插件,提供如下能力:

  • 添加maven-publishsigning插件
  • 配置javaSourcejavaDocpublications
  • 自动配置签名信息
  • 自动配置发布仓库信息repositories,根据版本号自动选择repository
  • 自动补全manifest信息

feat: 整理仓库配置

  1. framework里面配置aliyun的仓库可能有问题, 拉不到最新的SNAPSHOT
  2. 仓库的配置得理一下,有的依赖腾讯云的仓库也识别不了

开发logger公共组件

  • 统一日志格式
  • 统一日志输出位置
  • 统一日志切割策略
  • 规范日志分类
  • 规范日志框架
  • 提供默认logback配置

bug: dependencies自定义的版本没有生效

dependencies自定义的版本没有生效
constraints的生成的dependency总会在platform之前 , 导致优先级更低
使用enforcedPlatform替换constraints声明的版本, 使自定义版本生效

解决jooq项目model模块没有应用java插件问题

devops-boot插件根据模块是否为空来判读是否应用java和kotlin插件,判断依据是模块是否包含src目录。这带来了两个问题:

  1. 对使用了jooq的项目来说,model模块是不包含src目录的,导致生成的java类无法编译
  2. 在父模块中无法方便地使用api、implementation等关键词,因为这些是java插件引入的

解决办法:
对于所有模块都默认应用java、kotlin(按需)插件

期望devops-boot-gradle-plugin插件支持哪些功能?

devops-boot-gradle-plugin目前提供了如下自动化配置:

  • 配置kotlin默认版本、编译选项
  • 默认添加kotlin jvm插件
  • 配置默认maven仓库列表,添加了腾讯源
  • 默认添加spring kotlin插件
  • 默认添加spring boot插件
  • 默认添加依赖管理插件,并引入本项目的devops-boot-dependenciesbom文件
  • 默认添加kotlin-stdlib-jdk8korlin-stdlib-reflect依赖

除此之外,你还期望devps-boot-gradle-plugin插件支持哪些功能?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.