介绍
研发团队的工程效率实践,现在越来越多的人开始谈论这个话题,但是真真能实操的还本场 Chat 侧重于实践,不会有抽象的概念和理论知识。
我会拟一个场景来实战-《如何通过Gitlab+七牛云存储来构建在线产品需求文档》,一步一步的带领大家构建属于你自己或者你们团队的工程效率实践。
RP 是一个专业的快速原型设计工具。Axure(发音:Ack-sure),代表美国 Axure 公司;RP 则是 Rapid Prototyping(快速原型)的缩写。
Axure RP 是美国 Axure Software Solution 公司旗舰产品,是一个专业的快速原型设计工具,让负责定义需求和规格、设计功能和界面的专家能够快速创建应用软件或 Web 网站的线框图、流程图、原型和规格说明文档。
作为专业的原型设计工具,它能快速、高效的创建原型,同时支持多人协作设计和版本控制管理。
Axure RP 的使用者主要包括商业分析师、信息架构师、产品经理、IT 咨询师、用户体验设计师、交互设计师、UI 设计师等,另外,架构师、程序员也在使用 Axure。
摘自百度百科:
Axure 是一个极其简单的软件,如果你不需要做交互,那么你不看教程,也只要 10 分钟就可以掌握个大概。因为你所做的就是拖部件,打字,拖部件,打字,最多加个对齐。
了解 Gitlab Webhook
Webhook 是什么?:
Webhooks 是“用户定义的 HTTP 回调”,它们通常由一些事件触发,例如将代码推送到仓库或一个博客的评论。 发生该事件时,源应用程序将向 webhook 配置的 URI 发出一个 HTTP 请求,这个请求可以做任何事情。通常是用于触发构建持续集成系统,或者去通知错误跟踪系统。-维基百科
了解七牛云存储
首先,我们要进行七牛云账户注册,在个人账户和企业账户中选择一个,按照你自己的实际情况来选择就好了。
注册和实名认证都很简单,这里就不做介绍了。如果大家在注册过程中遇到了问题,请在读者圈中给我留言。
重点:对于认证用户,七牛云存储提供免费的存储空间 10GB,每月下载流量 10GB,每月 PUT/DELETE 10 万次请求,每月 GET 100 万次请求。
咱们即将要做的在线产品需求文档就是基于七牛云存储来对外发布的,对于个人来说免费 10GB 的存储空间足够了。
如何设计一个工程效率实践的产品
场景回顾
研发团队里面产品和开发的对接方式无外乎以下几种:
以上是我们的一些尝试,不知道大家是哪一种呢?如果你们有其他更好的方式,还请大家留言,目前我们使用的是第 5 种。
在正式开始之前,我把产品经理的基本流程概述一下(有一些环节我隐掉了):
从上面的流程中,我们可以看出产品人员需要做很多的沟通和操作,一点都不高效。
每一次变更你都必须重新更新上传,然后通知每个人。
整个过程中,产品经理只需要做一件事:撰写需求文档,其他所有的工作都自动化了(这就是我们的工程效率实践)。
说了那么多,咱们进入正题吧!
构建产品需求在线文档
目标
在线地址规则
项目结构
├── pg_group
│----├── pg_project1
│----│----├── pg_v1.0
│----│----├── pg_v1.1
│----│----└── pg_v2.0
│----└── pg_project2
详细操作步骤
新增产品需求文档
增加产品需求文档的小版本
产品需求文档变更
技术点
核心代码
Gitlab Webhook PushEvents 推送的结构体:
// PushEvents 请求对应的实体
type PushEvents struct {
After string `json:"after"`
Before string `json:"before"`
CheckoutSha string `json:"checkout_sha"`
Commits []struct {
Added []string `json:"added"`
Author struct {
Email string `json:"email"`
Name string `json:"name"`
} `json:"author"`
ID string `json:"id"`
Message string `json:"message"`
Modified []string `json:"modified"`
Removed []string `json:"removed"`
Timestamp string `json:"timestamp"`
URL string `json:"url"`
} `json:"commits"`
EventName string `json:"event_name"`
Message string `json:"message"`
ObjectKind string `json:"object_kind"`
Project struct {
AvatarURL string `json:"avatar_url"`
CiConfigPath string `json:"ci_config_path"`
DefaultBranch string `json:"default_branch"`
Description string `json:"description"`
GitHTTPURL string `json:"git_http_url"`
GitSSHURL string `json:"git_ssh_url"`
Homepage string `json:"homepage"`
HTTPURL string `json:"http_url"`
Name string `json:"name"`
Namespace string `json:"namespace"`
PathWithNamespace string `json:"path_with_namespace"`
SSHURL string `json:"ssh_url"`
URL string `json:"url"`
VisibilityLevel int64 `json:"visibility_level"`
WebURL string `json:"web_url"`
} `json:"project"`
ProjectID int64 `json:"project_id"`
Ref string `json:"ref"`
Repository struct {
Description string `json:"description"`
GitHTTPURL string `json:"git_http_url"`
GitSSHURL string `json:"git_ssh_url"`
Homepage string `json:"homepage"`
Name string `json:"name"`
URL string `json:"url"`
VisibilityLevel int64 `json:"visibility_level"`
} `json:"repository"`
TotalCommitsCount int64 `json:"total_commits_count"`
UserAvatar string `json:"user_avatar"`
UserEmail string `json:"user_email"`
UserID int64 `json:"user_id"`
UserName string `json:"user_name"`
UserUsername string `json:"user_username"`
}
// quploadRun 执行 qshell 的 qupload 命令,将产品文档的文件同步到七牛
func quploadRun(prdJSONPath string) error {
cmd := exec.Command(cfg.QshellPath, "qupload", "4", prdJSONPath)
_, err := cmd.CombinedOutput()
return err
}
给你的产品赋予生命力
整合钉钉/Slack 等机器人
简单的机器人其实就是你给它指令,它去执行罢了。当我们的流程执行完成之后,发送一条消息到指定的钉钉讨论组(群)即可,还可以附加一些消息。
// SendDinghook 钉钉发送信息
func SendDinghook(dingAccessToken string, title string, content string) {
ding := dinghook.Ding{AccessToken: dingAccessToken}
markdown := dinghook.Markdown{Title: title, Content: content}
ding.Send(markdown)
}
未来?
遇到的问题/坑
需要提前在你本地或者服务器上执行
qshell account AccessKeyXxx SecretKeyXxx
参考资料