自动化部署工具syncd

拜拜、爱过 提交于 2020-04-06 03:42:11

一.部署安装

(一)常用安装方式

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.生产上线构建和部署操作失败时会有钉钉提醒,需尽快关注。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!