Skip to content

nnsay/devops-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. Devops-TOOLS

本项目编写一些日常运维的小工具, 本项目使用spf13/cobra为命令行开发开发, 目前支持的工具如下

  • AWS 类
  • Monorepo 类

2. AWS 类

该类型的工具需要具有 aws 访问权限, 如果需要发送通知, 还需要配置 Slack:

2.1 删除过期的 IAM 证书

作用: 删除已经过期的 IAM 证书

使用方法:

# use alias command
devops-tools iam dec
# use fullname command
devops-tools iam delete-expired-certification

参数说明:

参数名称 别名 描述 默认值
expiration e 指定过期时间, 格式为时间戳 time.Now()
path-prefix p 证书路径 /cloudfront/
TIME_OFFSET_HOURS 时区偏移小时数 0

2.2 检查临期 IAM 证书

作用: 检查即将过期的证书并提醒, 提醒消息发送到 Slack(需配置 SLACK_HOOK)

使用方法:

# use alias command
devops-tools iam ccd
# use fullname command
devops-tools iam check-certification-date

参数说明:

参数名称 别名 描述 默认值
expire-hours e 剩余过期小时数 72
path-prefix p 证书路径 /cloudfront/
channel c Slack Channel #devops
SLACK_TOKEN 必选, Slack 自定义应用 Auto Token 地址环境变量
ENV_NAME 可选, 如果有多个环境可以指定环境名称环境变量
TIME_OFFSET_HOURS 时区偏移小时数 0

提醒消息: 提醒消息

2.3 检查未变更的 Cloudformation

作用: 检查超过指定天数的未变更的 Cloudformation Stack 并发送提醒消息

使用方法:

# use alias command
devops-tools cloudformation cec
# use fullname command
devops-tools cloudformation checkExpirationCloudformation

参数说明:

参数名称 别名 描述 默认值
days d 多少天未更新 10
channel c Slack Channel #devops
SLACK_TOKEN 必选, Slack 自定义应用 Auto Token 地址环境变量
ENV_NAME 可选, 如果有多个环境可以指定环境名称环境变量
WHITE_STACK_NAMES 可选, stack 白名单,多个以逗号分隔环境变量
TIME_OFFSET_HOURS 时区偏移小时数 0

提醒消息: 提醒消息

3. Monorepo 类

Monorepo 基于Nx的实践, 不过该类工具设计时与具体哪种 Monorepo 无关, 主要是解决 Monorepo 中的痛点问题.

3.1 代码覆盖率报告

依赖前提:

测试覆盖率报告需要是json-summary格式, Istanbul 是事实上的代码测试覆盖率标准, 其支持产生的代码覆盖率报告格式有很多种, 常见的如 json, json-summary, text, lcov 等, 详情可以查看这里

作用:

  • 基于 Monorepo 的多项目的代码覆盖率报告, 覆盖率报告以项目分组
  • 支持检测代码覆盖率阈值检查, 目前检查的是 statement 指标, 如果有低于阈值的覆盖率则会产生.exit 文件

使用方法:

# use alias command
devops-tools monorepo ccr
# use fullname command
devops-tools monorepo codeCoverageReport

参数说明:

参数名称 别名 描述 默认值
coverageDir d 覆盖率报告目录, 一般层级是: 覆盖率报告目录/应用目录/覆盖率报告文件 {tmp/packages}
limitTarget l statement 最低覆盖率阈值 -1
reportPath r 自定义覆盖率报告产生位置 tmp/report.md
ignoreProjects i 需要忽略的项目, 多个的话使用逗号分隔 ""

报告展示:

展示结果以默认参数为例, 聚合的自定义覆盖率报告./tmp/report.md 内容如下:

# Coverage report

| App  | Lines      | Statements | Branches   | Functions  |
| ---- | ---------- | ---------- | ---------- | ---------- |
| app1 | 🟢 100.00% | 🟢 100.00% | 🟢 100.00% | 🟢 100.00% |
| app2 | 🟢 90.13%  | 🟢 89.90%  | 🟡 66.06%  | 🟢 90.61%  |
| app3 | 🟢 100.00% | 🟢 100.00% | 🟢 100.00% | 🟢 100.00% |
| lib1 | 🟢 89.22%  | 🟢 87.82%  | 🟡 66.66%  | 🟢 93.33%  |

如果指定了覆盖率阈值, 且任意 Monorepo 项目中有低于阈值的项目会被另外统计且产生与自定义覆盖率报告同名但是结尾是.exit的文件, ./tmp/report.md.exit 内容如下:

app2 statements coverage 90.36 is lower than the limition target 100 !
civil-toolkit statements coverage 87.82 is lower than the limition target 100 !
lib1 statements coverage 84.44 is lower than the limition target 100 !

扩展使用:

该工具可以结合 gh 一起使用, 可以在流水线中显示覆盖率报告或者让低覆盖流水任务失败, 这部分技巧可以参考: 3. 配合 Github Workflow 使用