前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes & Istio 汉化工作流支持工具简介

Kubernetes & Istio 汉化工作流支持工具简介

作者头像
崔秀龙
发布2019-07-23 15:29:01
8860
发布2019-07-23 15:29:01
举报
文章被收录于专栏:伪架构师

本项目支撑了 Istio 和 Kubernetes 的文档中文化流程,它以 Github Issue 为工作对象,通过 Chatbot 和 Webhook 相结合的方式,为翻译工作提供了任务管理的支撑功能。

总体工作流程

该项目首先假设了上游的最小(无)支持,因此目前尚未支持上游项目的接入和互动。

  1. 首先创建一个 Repository,用于进行任务管理。
  2. 将所有翻译组成员加入该项目,以便进行任务(也就是 Issue)分发。
  3. 初始化 Chatbot 及其运行环境。
  4. 在 Chatbot 中进行任务的创建和更新。
  5. 初始化 Webhook 及其运行环境。
  6. 将任务仓库的 Webhook 挂接到建立好的 Webhook 上。
  7. 译者开始通过在 Issue 中加入 Comment 的方式进行翻译和进度汇报。
  8. Webhook 识别 Issue 中的 Comment,进行相应的标识和跟踪。

任务(Issue)的状态转换

任务以 Issue 方式来体现,用标签来标注任务状态。

下列状态和指令都可以在 Webhook 中进行配置。

  • Welcome:新建的 Issue 会标注为这一标签,Issue Body 中会包含该任务的对应源文件,需由管理员确认后进入工作流程。确认有两种方式:
    • Comment:/confirm
    • 修改标签,去掉 Welcome,加入 Pending。
  • Pending:待认领任务,翻译组成员可以认领该任务。认领 Comment:/accept
  • Translating:翻译进行中,任务认领后 Issue 会指派给认领的翻译组成员。
  • Pushed:翻译基本完成后,译者发送 PR 到文档项目,在该 Issue 中输入 /pushed
  • Finished:PR 已经完成合并后,译者在 Issue 中加入 /merged,任务关闭。

Slack(chat) bot 的使用

运行配置

目录结构

为 Bot 新建目录,大致结构如下:

  • config:放置配置文件。
  • data:Bot 数据。
  • repository:代码仓库。下面可以有多个分支
配置文件

Bot 的配置文件是一段 yaml 代码,例如 Istio 项目目前使用的配置:

代码语言:javascript
复制
repositories:
 istio:
   github: # 任务仓库的信息
     owner: servicemesher
     repository: istio-official-translation
   valid_extensions: # 只使用扩展名为 .md 的文件作为任务素材
   - ".md"
   labels: # 新生成的任务,都会带有下列标签。
   - priority/P0
   branches: # 分支信息,每个分支都是一个 checkout 到指定分支的目录
   - name: "1.1" # 名称标识,在和 Bot 的对话中会用到。
     value: master
     path: "/errbot/repository/master" # 容器加载后的路径
     url_prefix: # 在新建任务时使用这一前缀生成源文件链接。
       source: "https://github.com/istio/istio.io/tree/master/content"
     labels: # 本分支新建任务的缺省标签组。
     - version/1.1
   source: # 源文件名称和相对路径
     name: en
     path: content
   languages: # 目标文件名称和相对路径
   - name: zh
     path: content_zh
     labels: # 该语言翻译任务的缺省标签
     - lang/zh
启动脚本

在启动脚本中需要为 Bot 的运行设置一些环境变量。

代码语言:javascript
复制
#!/bin/shdocker run -d --name=istio-slack-bot \
       --restart=always \        -e BOT_LOG_LEVEL=INFO \ # 日志输出级别
       -e BOT_ADMINS=@dustise \ # 管理员的 Slack 名称
       -e REPOSITORY="istio" \ # 配置文件中的 Repository 名称
       -e REPOSITORY_CONFIG_FILE="/errbot/config/repository.yaml" \ # 配置文件名称
       -e MAX_RESULT=10 \ # 单次最大输出数量
       -e MAX_WRITE=30 \ # 单次最大写入数量
       -e TARGET_LANG="zh" \ # 翻译语种名称
       -e BOT_TOKEN="xoxb-" \ # Slack Bot 的 Token
       -e BACKEND="Slack" \ # 指定使用 Slack 后端
       -e CRITICAL_COMMANDS="find_new_files_in,find_updated_files_in,cache_issue" \ # 关键命令列表
       -e OPERATORS="@dustise" \ # 可以执行关键命令的操作员
       -e PRIVATE_COMMANDS="whatsnew,github_bind,github_whoami" \ # 仅能在私聊窗口中使用的命令
       -v $(pwd)/data:/errbot/data \ # Bot 的存储路径
       -v $(pwd)/config:/errbot/config \ # Bot 的配置路径
       -v $(pwd)/repository:/errbot/repository \ # 代码库路径
       dustise/translat-chatbot:20190213-3 # 镜像名称

Bot 指令

Bot 启动之后,会在 Slack 中看到对应的 App 上线,可以对其发出指令,完成任务。指令前缀为 !

  • github bind [your github token]: 将你的个人 Token 绑定到 Bot 上,就可以用自己的身份来完成这些任务。
  • github whoami:校验指令,查看是否已经绑定。
  • cache issue:缓存所有开放任务。
  • find new files in [branch name]:从指定分支中查找新的未翻译文件,branch name 来自上文的配置文件,如果加入开关 --create_issue=1,则会根据新文件来创建任务。
  • find updated files in [branch name]:在指定分支中查找翻译后更新的内容,参数和开关和新建指令一致。新建批量大小受环境变量控制。
  • whatsnew:查找新建未确认任务。
  • show issue [issue id]:根据 issue 编号展示 issue 链接。
  • search issues [query]:按照 Github 语法,搜索 Issue。

Webhook 的使用

目前支持 Flask App 和 GCP Function 两种方式的部署,进入目录执行对应的 xxx-build.sh 即可完成打包。

GCP 日志写入需要使用 permission.json,这部分代码需要自行定制。

配置文件

目前的工作流定义通过一个 YAML 来完成。下面是 Istio 项目的配置说明

代码语言:javascript
复制
workflow:
- name: "istio" # 项目名称
 labels: # 可用标签
 - group: "status" # 标签分组,可以基于分组进行互斥设置。
   labels:
     - "welcome"
     - "pending"
     - "translating"
     - "pushed"
     - "finished"
 events:
   on_issue: # Webhook 的触发动作。
   - name: "new_issue"
     description: "A new issue had been created."
     regex: opened # 触发的具体事件
     conditions: [] # 执行动作的要求条件
     actions: # 执行动作
     - type: label # 打标签
       value:
         group: status # 标签分组
         label: welcome # 标签内容
         mutex: True # 互斥
   on_comment:
   - name: "confirm"
     description: "Accept an new issue as a task."
     regex: \/confirm # /confirm 指令
     conditions:
     - type: labels
       value: # 必须包含如下标签
       - "welcome"
       failed_actions: # 如果不满足条件,则执行
       - type: comment # 加入 Comment,内容见后
         value: "Sorry @%operator%, only issues with label `welcome` can be confirmed."
     - type: state # 状态必须是 open
       value: "open"
       failed_actions:
       - type: comment
         value: "Sorry @%operator%, only active issues can be accepted."
     - type: assigned # 尚未分派的任务
       value: False
       failed_actions:
       - type: comment
         value: "Sorry @%operator%, only issues had not been assigned can be confirmed."
     - type: user_in_list # 用户属于管理员组
       value:
       - "%admin%"
       failed_actions:
       - type: comment
         value: "Sorry @%operator%, you are not allowed to confirm this issue."
     actions: # 通过检查后,打标签 pending。
     - type: label
       value:
         group: status
         label: pending
         mutex: True
   ...

环境变量

  • GITHUB_TOKEN:用于完成 Issue 操作的 Token。
  • ADMINS:能完成管理指令的用户名称。
  • INTERVAL:写入操作的间隔时间,防止超限。
  • WORKFLOW:配置文件中的工作流名称。

Github 设置

将任务仓库的 Webhook 设置为部署地址,并选择 Issue 和 Issue_comment 触发。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总体工作流程
  • 任务(Issue)的状态转换
  • Slack(chat) bot 的使用
    • 运行配置
      • 目录结构
      • 配置文件
      • 启动脚本
    • Bot 指令
    • Webhook 的使用
      • 配置文件
        • 环境变量
          • Github 设置
          相关产品与服务
          服务网格
          服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档