1. 发布管理

1.1. 路径

  • 工具路径: /opt/mydan/dan/deploy/bin
  • 发布流程路径:/opt/mydan/etc/deploy/conf
  • 发布过程配置:/opt/mydan/etc/deploy/mould

一个conf下的配置对应一个发布流程。发布流程可以共用mould下的发布过程配置。

1.2. 编辑发布过程配置

root@feng-pc:~# cat /opt/mydan/etc/deploy/mould/apps.test
---
#-
#  title: show version
#  global: 1
#  check:
##  redo: 2
##  retry: 20
#  repeat: 1
#  delay: 2
##  sleep: 20
#  code: m.sync
#  goon: 25%
##  fix: 30
#  param:
#    bin: 'echo a b c d version: 011.1'
#    sp: /tmp/adas/a/sda/
#    user: search
#    proxy: foo
#    cont: '(version:.+)'
-
  title: Run a command
  code: m.exec
  goon: 25%
  param:
    bin: 'echo abc'
-
  title: ctrl apps
  code: m.apps
  goon: 25%
  param:
    name: project1
    ctrl: [ 'start' ]
-
  title: deploy
  code: m.deploy
  goon: 25%
  param:
    name: project1
    ctrl: [ 'deploy' ]
-
  title: mcmd
  code: m.mcmd
  goon: 25%
  param:
    bin: 'echo {}abc'
-
  title: check
  code: m.check
  goon: 25%
  param:
    check: [ 'project1' ]
  • 发布过程是一个数组,表示发布某一组机器的一系列动作。
  • title: 标题
  • code: 对应code目录中的插件
  • goon: 达到这个百分比才回继续往下走,否则会stuck,需要用ctrl去控制
  • param: 就是插件需要的参数

1.2.1. 统一参数

  • title 步骤的标题
  • global 是否是全局
  • redo 重做次数
  • retry 重试次数,重试完后还是不正常就stuck
  • repeat 执行部分失败的时候,是否在重试重做的时候把所有的都重复执行
  • delay 延时执行,sleep对应的秒数在执行
  • sleep 执行完后sleep
  • code 插件
  • goon 判断步骤是否可以继续的阈值,一个数字或者百分比(如 100%),默认是100%
  • fix 和重试类似,区别是在fix的时候,已经出现了stuck的信息
  • param 插件的参数

1.3. 编辑流程

root@feng-pc:~# cat /opt/mydan/etc/deploy/conf/apps.test
---
batch:
  code: b.node
  param:
    batch:
      - 1
      - 1:2
    target:
#      - 'localhost{1~10}'
      - '127.0.0.1'
maint:
  mould: apps.test
  macro:
    version: 0001
    aa: 0001
    bb: $env{bb}
    aabbcc: $env{aabbcc}
macro:
  a: 1
  b: 1
  bb: 22
  aabbcc: 11221

batch: 表示获取机器分组,

  • code: 分组的插件
  • param: 分组的参数

maint: 选择发布步骤配置

  • mould: 对应mould目录中的文件名
  • macro: 传递给mould的宏 macro: conf 中的宏

1.4. 运行一次发布

root@feng-pc:/opt/mydan/dan/deploy/bin# ./deploy  apps.test
[1]: [127.0.0.1]
===========================================================================
title: Run a command | step: 1| node:1
===========================================================================
###########################################################################
do ...
---------------------------------------------------------------------------
time: 2018-12-14_14:16:17
node[1]: 127.0.0.1
==============================
---
127.0.0.1[1]: "abc\n"
==============================
succ[1]:127.0.0.1
===========================================================================
title: ctrl apps | step: 1| node:1
===========================================================================
###########################################################################
do ...
---------------------------------------------------------------------------
time: 2018-12-14_14:16:17
node[1]: 127.0.0.1
==============================
---
127.0.0.1[1]: |
  start [1]: [#!/bin/bash
  echo start
  ]
  start
==============================
succ[1]:127.0.0.1
===========================================================================
title: deploy | step: 1| node:1
===========================================================================
###########################################################################
do ...
---------------------------------------------------------------------------
time: 2018-12-14_14:16:17
node[1]: 127.0.0.1
==============================
---
127.0.0.1[1]: |
  [stage]: wget -c -t 10  -q -O '/data/package/project1/v0.2/pack.md5' 'http://127.0.0.1:5555/download/package/project1/v0.2.md5'
  ERROR: run stage ERROR
==============================
[error]: goon: 0.25 succ: 0 err:
  • 其中apps.test 名字是conf中的文件名
  • 可以在命令后添加宏参数,如 ./deploy apps.test "abc=123"

1.5. 查看stuck情况

root@feng-pc:/opt/mydan/dan/deploy/bin# ./watch
---------------------------------------------------------------------------
name: apps.test
---
stuck:
  deploy:
    '1': 'error:goon: 0.25 succ: 0 err:'

1.6. 解锁

root@feng-pc:/opt/mydan/dan/deploy/bin# ./ctrl  -R apps.test
  • 解锁完后发布继续执行

2. 插件

  • 插件用前缀来区分类型,"b."开头的为分批插件,"m.“开头的是发布过程使用的插件
  • 分组插件要返回一个二维的数组
  • 发布流程插件返回的是操作成功的列表hash

2.1. b.node

batch:
  code: b.node
  param:
    batch:
      - 1
      - 1:2
    target:
      - 'localhost{1~10}'
      - '127.0.0.1'
  • 这是conf中的配置,param是插件的参数,b.node 需要两个参数 target和batch,target 是range表达式的range。batch是分批的方式,也是数组的方式,数组和target一一对应,如果batch比target短,由batch数组最后的元素补齐。对于每一个元素用“:”分隔着获取多少元素,可以是数组也可以是白分比(如10%),获取不全的用最后一个来补。如 1:5%:10 表示第一批是1台机器,第二批是5%的机器,第三批是10%的机器,如果海域哦机器,后面就都是10%一批

2.2. m.apps

-
  title: ctrl apps
  code: m.apps
  goon: 25%
  param:
    name: project1
    ctrl: [ 'start' ]
[root@feng-pc]# cat /opt/mydan/etc/project/apps/project1/start
#!/bin/bash
echo start
  • 执行应用操作

2.3. m.check

-
  title: check
  code: m.check
  goon: 25%
  param:
    check: [ 'project1' ]
[root@feng-pc]# cat /opt/mydan/etc/project/check/project1
-
  addr: http://127.0.0.1:5555
  check: 'mydan'
#  type: post # type: get  default
#  data: a=1&b=2
#  Host: abc.org
-
  port: 8080
#  type: tcp # type: udp  default
#  host: abc.foo.org # host: 127.0.0.1 default
  • 检查应用

2.4. m.deploy

  title: deploy
  code: m.deploy
  goon: 25%
  param:
    name: project1
    ctrl: [ 'deploy' ]
[root@feng-pc]# cat /opt/mydan/etc/project/deploy/project1
link: /data/apps/project1
path: /data/package/project1
  • 发布应用

2.5. m.exec

-
  title: Run a command
  code: m.exec
  goon: 25%
  param:
    bin: 'echo abc'
  • 调用agent的exec,即执行远程命令

2.6. m.lock

-
  title: Lock
  code: m.lock
  goon: 25%
  • stuck,让运行步骤在该位置停止

2.7. m.mcmd

-
  title: mcmd
  code: m.mcmd
  goon: 25%
  param:
    bin: 'echo {}abc'
  • 批量执行命令,和tools中的mcmd一样

2.8. m.sync

-
  title: sync
  code: m.sync
  goon: 25%
  param:
    sp: /tmp/file1
    dp: /tmp/file2
    src: 'localhost'
  • 同步数据
  • src 默认为中控机本地
  • timeout 超时时间,默认是60,单位秒
  • max 并发数,默认500
  • user 执行用户,默认root
  • sudo 真实的执行用户
  • chown 目标文件属主
  • chmod 目标文件权限
  • cc 等于1时继承源文件属性
Copyright 2017 - 2018. all right reserved,powered by Gitbook该文件修订时间: 2020-07-16 18:11:39

results matching ""

    No results matching ""