一.部署安装
(一)常用安装方式
1. curl https://syncd.cc/install.sh | bash
2. dockerfile安装方式正在测试中
(二)安装参考文档
1.https://syncd.cc/docs/#/install
2.https://github.com/dreamans/syncd
3.https://gitee.com/dreamans/syncd
二.使用规范
(一)服务地址
1. http://syncd.cascc.cn/login 账户:syncd 密码:111111
(二)使用操作
1.项目配置
项目空间是项目的基本组织单元,是进行项目和多用户隔离和访问控制的主要边界。
项目 -> 空间管理 -> 新增项目空间
项目管理
项目 -> 项目管理 -> [切换项目空间] -> 新增项目
成员管理
只有将用户添加到该项目空间,成为空间成员后才具有相应的权限。
项目 -> 成员管理 -> [切换项目空间] -> 添加新成员
在添加新成员
输入侧框中输入侧待加入成员的关键词,选中用户后点击添加。
2. 集群配置
添加集群
在创建项目前,需要先添加好项目所需的服务器集群,新建集群步骤如下:
服务器 -> 集群管理 -> 新增集群
按实际情况输入集群名称,如图:
添加服务器
在新建的集群中添加服务器信息,步骤如下:
服务器 -> 服务器管理 -> 新增服务器
秘钥配置
由于部署服务器(Syncd服务所在的服务器)与生产服务器(代码部署目标机)之间通过ssh协议通信,所以需要将部署服务器的公司(一般在这里:) $HOME/.ssh/id_rsa.pub
加入到生产机的信任列表中(一般在这里$HOME/.ssh/authorized_keys
)
可使用 ssh-copy-id
命令添加,或手动拷贝
设置完成后不要忘记进行测试连通性 ssh {生产机用户名}@{生产机地址}
注意:部署服务器的$ HOME必须与运行SYNCD的用户一致,否则SSH的免密登录将无效。
3. 构建配置
配置说明
通过项目列表中的 构建设置
来编辑构建脚本。脚本需在上线单中手动触发,系统会使用 /bin/bash -c {脚本文件}
执行。
构建脚本支持的变量
-
-
- ${env_workspace}
-
代码仓库本地副本目录
-
-
- ${env_pack_file}
-
打包文件绝对地址,构建完成后将需要部署到线上的代码打包到此文件中,必须使用 tar -zcf
命令进行打包。
部署模块会将此压缩包分发到目标主机并解压缩到指定目录,请按照要求打包,否则会部署失败。
简单构建示例
cd ${env_workspace}
tar --exclude='.git' -zcvf ${env_pack_file} *
Laravel构建示例
cd ${env_workspace}
composer install
tar --exclude='.git' -zcvf ${env_pack_file} *
前端项目构建示例
cd ${env_workspace}
yarn
yarn build
cd ./dist
tar -zcvf ${env_pack_file} *
Java项目构建示例
cd ${env_workspace}
mvn -U clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
cd ${env_workspace}/neon-xxx-web/target
tar -czvf ${env_pack_file} ./*.tar.gz
cd ${env_workspace}
mvn -U clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
cd ${env_workspace}/target
tar -czvf ${env_pack_file} ./*.tar.gz
Syncd构建示例
cd ${env_workspace}
make
cd ./output
tar -zcvf ${env_pack_file} *
4. Hook命令
python3 样例
#!/usr/bin/env python3
import json
import requests
import sys
# def send_msg(url, reminders, msg):
# headers = {'Content-Type': 'application/json;charset=utf-8'}
# data = {
# "msgtype": "text", # 发送消息类型为文本
# "at": {
# "atMobiles": reminders,
# "isAtAll": False, # 不@所有人
# },
# "text": {
# "content": msg, # 消息正文
# }
# }
# r = requests.post(url, data=json.dumps(data), headers=headers)
# return r.text
# if __name__ == '__main__':
# msg = sys.argv[1]
# reminders = []
# url = 'https://oapi.dingtalk.com/robot/send?access_token=185016f02b17a162ebba2cc5c781d1f4514778d58208b3bf42b3098adf7ae6b7'
# print(send_msg(url, reminders, msg))
# def send_msg(url, reminders, msg, env_apply_id, env_apply_name, env_pack_file, env_build_output, env_build_errmsg, env_build_status):
# headers = {'Content-Type': 'application/json;charset=utf-8'}
# data = {
# "msgtype": "link", # 发送消息类型为文本
# "at": {
# "atMobiles": reminders,
# "isAtAll": False, # 不@所有人
# },
# "link": {
# "title": "应用名称"+ msg,
# "text": "申请单ID:"+ env_apply_id +"--" +"申请单名称:"+ env_apply_name +"--" + "打包的文件绝对路径:"+ env_pack_file +"\n\n" +"构建脚本的原始输出:"+ env_build_output+"--" +"构建错误信息:"+ env_build_errmsg+"--" +"构建结果状态:"+ env_build_status,
# "messageUrl": "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
# }
# }
# r = requests.post(url, data=json.dumps(data), headers=headers)
# return r.text
# if __name__ == '__main__':
# msg = sys.argv[1]
# env_apply_id = sys.argv[2]
# env_apply_name = sys.argv[3]
# env_pack_file = sys.argv[4]
# env_build_output = sys.argv[5]
# env_build_errmsg = sys.argv[6]
# env_build_status = sys.argv[7]
# reminders = []
# url = 'https://oapi.dingtalk.com/robot/send?access_token=185016f02b17a162ebba2cc5c781d1f4514778d58208b3bf42b3098adf7ae6b7'
# print(send_msg(url, reminders, msg, env_apply_id, env_apply_name, env_pack_file, env_build_output, env_build_errmsg, env_build_status))
def send_msg(url, reminders, msg, env_apply_id, env_apply_name, env_pack_file, env_build_output, env_build_errmsg, env_build_status):
headers = {'Content-Type': 'application/json;charset=utf-8'}
data = {
"msgtype": "markdown", # 发送消息类型为文本
"at": {
"atMobiles": reminders,
"isAtAll": False, # 不@所有人
},
"markdown": {
"title": "应用名称"+ msg,
"text": "- 申请单ID:"+ env_apply_id +"\n" +"- 申请单名称:"+ env_apply_name +"\n" + "- 打包的文件绝对路径:"+ env_pack_file +"\n" +"- 构建脚本的原始输出:"+ env_build_output+"\n" +"- 构建错误信息:"+ env_build_errmsg+"\n" +"- 构建结果状态:"+ env_build_status,
}
}
r = requests.post(url, data=json.dumps(data), headers=headers)
return r.text
if __name__ == '__main__':
msg = sys.argv[1]
env_apply_id = sys.argv[2]
env_apply_name = sys.argv[3]
env_pack_file = sys.argv[4]
env_build_output = sys.argv[5]
env_build_errmsg = sys.argv[6]
env_build_status = sys.argv[7]
reminders = [15230505700]
url = 'https://oapi.dingtalk.com/robot/send?access_token=185016f02b17a162ebba2cc5c781d1f4514778d58208b3bf42b3098adf7ae6b7'
print(send_msg(url, reminders, msg, env_apply_id, env_apply_name, env_pack_file, env_build_output, env_build_errmsg, env_build_status))
(三)使用操作注意项
1.上线发布前需提交上线申请,申请需抄送审核人邮箱。
2.填写上线单要说明上线内容和上线分支,一般情况下会设置默认分支 develop qa release。
3.上线单填写前要指定回滚任务,防止上线失败无法快速回滚。
4.生产上线构建和部署操作失败时会有钉钉提醒,需尽快关注。
来源:oschina
链接:https://my.oschina.net/u/3729326/blog/3216670