一个文档平台相关的技术

组成

外部用户:查看文档
内部用户:编写、管理文档
开发:管理平台建设、用户文档页展示、文档到页面的发布

管理平台建设

  • 权限管理
  • 文档内容编写
  • 评审、合入流程

用户文档展示

  • markdown文档 -> 特定渲染的web页面
  • 用户勾选内容进行反馈、文档评分等
  • 页面header,切换不同文档的导航,页面锚点导航等

发布工具

  • 内部用户在管理平台调用发布
  • 后端根据用户操作生成发布时所需要的信息,掉起发布任务
  • 掉起drone流水线执行操作:在docker镜像中运行编译命令

发布

1、内部用户编写合入文档后,在管理平台点击发布,调用后端接口,生成发布所需要的配置json保存在CI_CONF_URL文件中
2、同时触发drone流水线,拉取编译需要的代码,结合配置json执行编译
3、编译结束后执行webhook回调,通知到管理平台更新发布状态,成功or失败。

.drone.yml配置

kind: pipeline
name: build

clone:
  disable: true

steps:
  - name: clone
     image: alpine/git:1.0.7
     network_mode: drone-runner
     commands:
       - git clone $DRONE_GIT_HTTP_URL
       - git checkout $DRONE_COMMIT
  - name: build
     image: node-git-python2:12-alpine-bash
     network_mode: drone-runner
     environment:
       http_proxy: http://x.x.x.x:80
       no_proxy: xxx.baidu.com, xxx.baidu.com
     commands:
        - echo "http_proxy=$http_proxy"; echo "no_proxy=$no_proxy"; echo "CI_CONF_URL=$CI_CONF_URL"
        - export CI_CONF_URL=$CI_CONF_URL && sh scripts/build.sh

---
kind: pipeline
name: after

clone:
  disabled: true

depends_on
  - build

trigger:
  status:
    - success
    - failure

steps:
  - name: webhook
     image: plugins/webhoook:1.1.0
     network_mode: drone_runner
     environment:
       http_proxy: https://x.x.x.x:80
       no_proxy: xxx.baidu.com, xxx.baidu.com
     settings:
       urls:
         - http://${doc_host}/api/deploy/drone_hook
         - http://${doc_sandbox_host}/api/deploy/drone_hook
       headers:
         - Authorization=${auth_token}
       templates: 
          {
              "buildNumber": "{{repo.owner}}/{{repo.name}}/{{build.number}}@drone",
              "status": "{{build.status}}"
          }
       when:
         status:
           - success
           - failure

发布脚本build.sh

set -e
echo "node: ${node -v}"
echo "npm: v${npm -v}"

function load_conf() {
  local conf_url=$1
  local conf=''
  for i in $(seq 1 3)
  do
    conf=${curl -s $conf_url}
    if [ -n "$conf" ]; then
      break
    fi
  done

  echo $conf
}
ci_info=${load_conf $CI_CONF_URL}

if [ -z "$ci_info"]; then
  echo "加载配置任务失败"
  exit 1
fi

builder_number=${python -c "import json; result=json.loads('${ci_info}'); print result['builder']['name']"}
builder_version=${python -c "import json; result=json.loads('${ci_info}'); print result['builder']['version']"}

echo $ci_info > ci.json
echo $builder_name@builder_version

npm i $builder_name@builder_version

node ./node_modules/.bin/wj-build -c ci.json wj-build-task | ./node_modules/.bin/bunyan

build_exit_code="${PIPESTATUS[0]}"
echo "exit_code=${build_exit_code}"
exit build_exit_code

命令行工具

import program from 'commander'

program
  .version(1.0.0.0)
  .opotion('-c, --config [value]', ' specify path of the config file')
  .action(async function (cmd, env) {
    // do the compile work
  })
posted @ 2022-03-05 21:11  lyk_109  阅读(32)  评论(0编辑  收藏  举报