本项目编写一些日常运维的小工具, 本项目使用spf13/cobra
为命令行开发开发, 目前支持的工具如下
- AWS 类
- Monorepo 类
该类型的工具需要具有 aws 访问权限, 如果需要发送通知, 还需要配置 Slack:
-
AWS
本工具引用了 aws sdk 所以权限上依赖 sdk 自己的设置, 根据文档支持: AWS_*环境变量和配置文件, 关于这块的配置请查看 AWS 文档: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
-
Slack
Slack 消息是通过安装自定义 Slack 应用, 然后利用该应用发送消息的途径, 而发消息需要
calls:write
权限, 详情参考 Using the Calls API; 之所以使用该种方式而不是Incoming Webhooks的原因是 webhook 不支持指定 Channel
作用: 删除已经过期的 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 |
作用: 检查即将过期的证书并提醒, 提醒消息发送到 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 |
作用: 检查超过指定天数的未变更的 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 |
Monorepo 基于Nx的实践, 不过该类工具设计时与具体哪种 Monorepo 无关, 主要是解决 Monorepo 中的痛点问题.
依赖前提:
测试覆盖率报告需要是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 使用