DevOps构建规范.docx
- 文档编号:27976837
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:10
- 大小:20.28KB
DevOps构建规范.docx
《DevOps构建规范.docx》由会员分享,可在线阅读,更多相关《DevOps构建规范.docx(10页珍藏版)》请在冰豆网上搜索。
DevOps构建规范
1.微服务命名规范
命名规则
1) 服务名唯一,公司范围内服务不能重名。
2) 服务名由3-64位字符组成;字符可由英文26x2个大小写字母和0~9数字组成,限制使用英文下划线‘_’、空格‘’及其他特殊符号,不限制但不推荐中划线‘-’;推荐以大写字母开头。
3) 服务名推荐使用驼峰法命名,仅字母大小写不同不能代表不同服务。
4) 服务名采用名词,名称要能体现服务所提供的主要业务功能。
5) 完整的对内服务名称由服务名主段+服务类型组成,推荐各产品服务名使用与产品有关的前缀。
服务类型主要有Service、Website(或UI、Portal、API)、Test等组成。
命名示例
1) CFStackManagerService:
服务名称为CFStackManager,其中CF为CloudFormation缩写,类型为Service。
2) IAMAuthWebsite:
服务名称为IAMAuth,其中IAM为业务领域缩写,类型为Website。
3) CFStackManagerTestService:
测试服务,用于测试CFStackManagerService,类型为TestService。
4) IAMAuthTestWebsite:
测试服务,用于测试IAMAuthWebsite,类型为TestWebsite。
2.公共规范
◆一键式构建
一键式自动化构建是指从构建启动开始到终结束(终交付的包生成),中间过程禁止人工干预。
人工干预活动包括但不限于:
构建过程中,使用IDE界面进行手工设置、创建或者删除文件目录、创建文件、复制文件、移动文件、删除或者重命名文件、手工设置文件属性、压缩/解压缩文件等。
交付单元是指可独立编译、加载、部署和运行的产品/平台/组件。
◆构建目录
构建过程中禁止删除或修改源代码已有目录结构。
◆构建初始化
在一键式构建前,每个组件的构建入口(build.suffix)都要先自动调用clean清除历史构建遗留件。
◆全量构建
对于版本发布构建,归档的产品全量交付件(含所依赖的所有平台和组件)必须全部重新编译,禁止使用增量编译,禁止使用手工替换文件等方式修改安装盘。
◆构建配置
a)禁止使用与操作系统强绑定的文件(如excel)作为构建配置文件。
建议使用跨平台的标准配置文件(如XML)来存放配置选项。
b)禁止使用Jenkins的自定义工作空间。
c)构建任务超时时间设置,建议值30min
d)流水线build配置,建议不要使用异步构建
e)构建参数化命名不要使用空格、“_”、"-"等特殊字符
◆构建日志
a)构建输出的日志简洁明晰,信息应分级为error/warning/info;出现error信息表示构建失败,必须终止构建。
b)建议默认保留最近10次构建的日志,以便定位问题。
◆构建用户
禁止使用超级管理员用户root和系统用户执行构建,应该使用普通user账户执行构建。
3.Java构建规范
3.1.Maven
3.1.1.构建目录
构建目录遵从Maven约定,目录结构如下:
◆pom.xml
工程构建配置文件,如第三方件依赖、插件依赖等
◆Target
工程输出目录
◆Script
构建入口目录,非默认,可选,
◆app_define.json
应用版本配置文件,服务名、服务ID号、应用包的版本、应用包的后缀名、应用包的相对路径、应用包名称,必选。
VsersionSet默认配置文件,必选。
app_define.json和VsersionSet必须同时存在。
◆modulex(如module1,module2,……)
模块目录,模块目录结构如下:
Øpom.xml:
模块构建配置文件
Øtarget:
模块输出目录
Øsrc/main/java:
模块的.java文件目录
Øsrc/main/resources:
模块资源文件目录,如spring,hibernate配置文件
Øsrc/main/script--模块特殊配置文件目录,如ant/shell/bat等脚本
Øsrc/test/java--模块所有测试.java文件目录,如JUnit测试类
Øsrc/test/resources--模块测试资源文件目录
Øsrc/assemby--模块assemby打包描述文件目录
◆Maven配置文件存放位置如下:
${M2_HOME}/conf/settings.xml:
maven全局配置文件,整台机器上的所有用户都受该配置的影响
~/.m2/settings.xml:
maven用户配置文件,仅影响当前用户
3.1.2.构建入口
Maven构建入口为根目录的pom.xml,在根目录下调用mvn命令构建。
3.1.3.构建依赖
构建依赖应通过dependency标签指定,禁止构建工程通过maven插件引用非本模块目录或文件。
多个模块依赖的第三方件/插件版本,统一在父POM的dependencyManagement/pluginManagement标签中定义版本号以及属性,子模块添加依赖时不要添加版本号以及属性。
代码仓存放产品维度的settings.xml,本地仓库统一配置:
/clouddragonData/.m2/repository/
3.1.4.发布
发布构建软件版本号遵循业界通用的RELEASE版本规范,不要带有SNAPSHOT版本标签
第三方件优先在PDM确认是否有其不同版本,若存在则可考虑使用优选或可选版本。
对于因为业务需要定制的第三方件,建议使用产品自己的groupId加上后缀.thirdpart上传到产品的私仓地址。
编译打包出来的jar或者war文件中MANIFEST.MF文件中禁止出现时间戳。
3.1.5.编码格式
pom.xml文件必须使用UTF-8编码。
3.1.6.命名
pom.xml文件必须使用UTF-8编码。
groupId命名只能包含小写字母,使用.分割,建议使用三段,不超过四段。
artifactId命名只能包含小写字母,使用-或者点(.)分割。
pom文件中properties命名,各单词/场景使用'.'分隔。
构建生成的交付件(jar或者war)命名方式为:
artifactId-版本号.(jar|war)。
3.1.7.告警
必须清除所依赖第三方件的版本号冲突的构建告警。
必须消除maven工具的所有告警。
3.1.8.ant插件
不允许使用maven-antrun-plugin调度xml文件直接构建,可以使用maven-antrun-plugin调度anttask的非构建功能,比如拷贝文件/压缩文件。
3.2.Gradle
3.2.1.构建目录
Gradle构建目录遵从Gradle约定。
单个工程目录结构:
build.gradle--构建配置文件,含工程依赖、打包签名等配置
build--工程输出目录
settings.gradle--工程模块信息配置文件
src--工程源代码目录,其中:
src/main/java--.java文件目录
src/main/resources--资源文件目录
src/test/java--测试.java文件目录,如JUnit测试类
src/test/resources--测试资源文件目录
3.2.2.构建入口
Gradle构建入口为根目录的build.gradle,在根目录下调用gradle命令构建。
3.2.3.构建依赖
build.gradle中依赖关系遵从约定格式。
3.2.4.发布
发布构建软件版本号遵循业界通用的RELEASE版本规范,不要带有SNAPSHOT版本标签。
3.3.编译选项
每个交付单元使用的Java编译语言级别必须一致,且必须与使用的Java版本对应的编译语言级别一致。
版本发布构建时禁止使用maven编译选项-X,避免输出大量的debug日志。
禁止使用的javac编译选项:
-nowarn/-Xlint:
none/-Xlint:
name选项关闭所有或部分javac编译告警;-g:
none/-g:
[keywordlist]选项关闭全部或指定生成部分调试信息
必须使用的javac编译选项:
-source,-target,-Xlint:
all。
同时maven-compiler-plugin的showWarnings属性必须设置为true。
4.构建工具与构建环境
构建工具清单和构建环境配置要纳入版本配置管理并归档
构建工具必须从公司统一的构建工具库中获取。
原则上应选用满足产品软件版本生命周期的优选工具,禁止使用DXX工具
产品及配套平台/组件必须选用相同构建工具的相同版本。
产品及配套平台/组件的构建工具安装路径保持一致
构建环境要实现一键式安装及配置
按照交付单元使用统一高阶构建框架
构建环境应选用公司OSC-TMG定义的优选Linux版本
禁止在Windows环境使用虚拟化OS工具来模拟Linux进行构建
构建工具版本升级、安装构建执行机,需要走申请流程(jdk,npm,gradle,SDK,ant,maven等)
5.构建脚本
5.1.脚本公共规范
5.1.1.脚本复杂度
批处理Batch、Shell脚本单个文件长度小于100行(非空非注释行)
避免构建脚本嵌套过深,禁止超过3层
避免构建脚本拷贝复制,减少构建脚本重复
5.1.2.变量
避免变量值定义拼接嵌套过深,禁止超过2层。
根路径定义成变量,其他路径变量使用根路径+相对路径拼接,避免变量层层嵌套拼接。
5.1.3.绝对路径
构建脚本必须使用相对路径,禁止使用绝对路径。
构建工程禁止依赖特定的安装路径
禁止使用网络共享驱动器
5.1.4.返回值
构建脚本成功返回0;构建失败,应以非0的退出码退出。
5.1.5.注释
每个文件开头包含一个注释,简要概述文件源代码的功能、版权声明和作者信息。
函数命名无法表达的信息,加函数头注释辅助说明;注释辅助说明内容可选,建议包括函数的功能、全局变量的使用和修改、使用参数说明、返回值等。
禁止空有格式的函数头注释。
5.1.6.脚本语言
每个交付单元的构建脚本语言不超过3种,包括Python、Shell、批处理。
Windows环境使用Python/批处理;Linux环境使用Python/Shell。
产品软件(含所依赖的所有平台和组件)要统一脚本语言。
5.2.Shell脚本规范
5.2.1.语言环境设置
要在每个脚本文件的第一行声明脚本解析器,如#!
/bin/bash,不建议使用#!
/bin/sh,不能有其他任何字符,包括空格、tab键、注释等。
5.2.2.文件扩展名
文件使用.sh扩展名。
5.2.3.命名
函数名使用小写字母,并用下划线分隔单词。
函数名之后必须有圆括号。
规则本地变量名使用小写字母,并用下划线分隔单词。
常量和环境变量名全部大写,用下划线分隔。
常量和环境变量名声明在文件的顶部。
5.2.4.变量
初始化一个变量为空时,必须使用num=""或者unsetnum,不得使用num=之类的表达式。
脚本中使用的变量统一在一个函数中定义。
字符串变量赋值、引用、比较时,必须使用双引号将变量引起来。
5.2.5.命令
调用rm命令必须进行非空判断,禁止使用"rm-rf"命令删除所有文件。
使用$(command)而不是反引号来完成命令替换。
5.3.Python脚本规范
5.3.1.语言环境设置
构建文件中必须使用UTF-8编码。
类Unix操作系统上直接执行的Python文件头部建议使用#!
/usr/bin/envpython指定解释器。
5.3.2.编码注意事项
使用format方法、"%"操作符和join方法代替"+"和"+="操作符来完成字符串格式化。
使用subprocess模块代替os.system模块来执行shell命令。
使用os.path库中的方法代替字符串拼接来完成文件系统路径的操作。
5.3.3.程序设计
使用with语句操作构建配置文件。
5.4.批处理脚本规范
从构建稳定性和自动化考虑,应直接使用Linux作为构建操作系统。
只有当构建工具仅仅支持windows操作系统,不支持Linux操作系统,应用批处理脚本。
批处理脚本仅仅被用于简单功能。
以下是批处理应用的一些准则:
批处理脚本主要调用其他的工具,并且做一些相对很小数据量的操作。
构建脚本小于100行。
脚本大于100行,建议使用python语言。
5.4.1.文件扩展名
文件.bat扩展名。
5.4.2.注释
采用rem注释,而不是:
:
,文件头建议采用@rem注释
5.4.3.日志
每个文件开头关闭打印。
5.4.4.命名
文件名使用小写字母,并用下划线分隔单词。
变量名使用小写字母,并用下划线分隔单词。
常量和环境变量名全部大写,用下划线分隔。
常量和环境变量名声明在文件的顶部。
5.4.5.函数
使用call调用函数或其他批处理文件,减少start调用函数或批处理文件。
尽量不要使用goto函数。
一个函数只完成一个功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DevOps 构建 规范