Syncd - 开源自动化部署工具

640?wx_fmt=png

官网地址:https://gitee.com/dreamans/syncd/issues

syncd是一款开源的代码部署工具,它具有简单、高效、易用等特点,可以提高团队的工作效率.

目前只支持类Linux系统.

特性

  • Go语言开发,编译简单、运行高效

  • Web界面访问,交互友好

  • 灵活的角色权限配置

  • 支持Git仓库

  • 分支、tag上线

  • 部署hook支持

  • 完善的上线工作流

  • 邮件通知机制

原理

640?wx_fmt=png

Git

Syncd服务通过git-ssh(或password)方式从仓库中拉取指定tag(分支)代码.

构建

运行配置好的构建脚本, 编译成可上线的软件包

在这一环节中,可运行单元测试 (例如 go test php phpunit, 下载依赖 (如 go: glide install php: composer install), 编译软件包 (如 js: npm build go: go build xx.go java: javac xx.java c: cc xx.c) 等.

分发

通过 scp 命令分发软件包到各机房生产服务器的临时目录, 远程执行 pre-deploy 配置的命令, 执行完毕后解压缩软件包到目标目录,然后执行 post-deploy 命令

分发上线过程是串行执行,并且任意步骤执行失败整个上线单会终止上线并将状态置为上线失败,需要点击 再次上线 重试.

将来会支持同一集群服务器并行执行, 集群之间串行发布的特性

SSH信任

生产服务器与部署服务器之间通过ssh-key建立信任

配置方法请参考 秘钥配置 章节

安装

准备工作

  • Go

推荐Go1.10以上版本, 用来编译源代码

  • Git

请保持部署Syncd服务器的git版本为最新(>=2.20)

  • Nginx

Web服务依赖Nginx

  • MySQL

系统依赖Mysql存储持久化数据, 推荐版本 Mysql 5.7

  • Linux + Bash

系统会使用到 gitsshscp 等命令,所以目前只推荐在Linux上使用, 并且需要提前安装或更新这些命令道最新版本

  • 秘钥配置

由于部署服务器(Syncd服务所在的服务器)与生产服务器(代码部署目标机)之间通过ssh协议通信,所以需要将部署机的公钥 (一般在这里: ~/.ssh/id_rsa.pub)加入到生产机的信任列表中(一般在这里 ~/.ssh/authorized_keys)

可使用 ssh-copy-id 命令添加,或手动拷贝. 拷贝后不要忘记进行测试连通性 ssh {生产机用户名}@{生产机地址}

最后建议将以下配置加入到部署服务器ssh配置/etc/ssh/ssh_config中,关闭公钥摘要的显示提示,防止后台脚本运行失败

Host *    StrictHostKeyChecking no

请注意: ssh目录权限需按此设置,否则会出现无法免密登录的情况

~/.ssh  0700~/.ssh/authorized_keys 0600

安装

  • 二进制包安装

二进制包下载地址:https://github.com/dreamans/syncd/releases

  • 源码编译安装

    curl https://raw.githubusercontent.com/dreamans/syncd/master/install.sh |bash

当前路径中若生成 syncd-deploy 或者 syncd-deploy-xxx 目录则表明安装成功

生成的 syncd-deploy 目录可拷贝或移动到你想要的地方,但不要试图将此目录拷贝到其他服务器上运行,会造成不可预料的结果.

  • 数据库依赖

你需要将 github.com/dreamans/syncd/syncd.sql 数据表结构和数据导入到MySQL数据库中

  • 修改配置文件

修改 syncd-deploy/etc/syncd.ini 中相关配置信息, 具体配置描述可参考注释

  • 启动服务

cd syncd-deploy➜  syncd-deploy ./bin/syncd -c ./etc/syncd.ini                                          __   _____   __  __   ____     _____   ____/ /  / ___/  / / / /  / __    / ___/  / __  / (__  )  / /_/ /  / / / /  / /__   / /_/ //____/   __, /  /_/ /_/   ___/   __,_/        /____/Service:              syncdVersion:              1.0.0Config Loaded:        ./etc/syncd.iniLog:                  stdoutDatabase:             127.0.0.1Mail Enable:          0HTTP Service:         :8868Start Running...
  • 添加Nginx配置

upstream syncdServer {    server 127.0.0.1:8868 weight=1;}server {    listen       80;    server_name  deploy.syncd.cc; # 此处替换成你的真实域名    access_log   logs/deploy.syncd.cc.log;    location / {        try_files $uri $uri/ /index.html;        root /path/syncd-deploy/public; # 此处/path请替换成真实路径        index index.html index.htm;    }    location ^~ /api/ {        proxy_pass          http://syncdServer;        proxy_set_header    X-Forwarded-Host $host:$server_port;        proxy_set_header    X-Real-IP     $remote_addr;        proxy_set_header    Origin        $host:$server_port;        proxy_set_header    Referer       $host:$server_port;    }}

重启nginx服务

修改hosts

若域名未解析,可修改hosts进行临时解析

sudo vim /etc/hosts127.0.0.1  deploy.syncd.cc;

安装完成

打开浏览器,访问 http://deploy.syncd.cc

初始账号:

用户名: syncd邮箱: syncd@syncd.cc密码: syncd.cc

!!!登录后请尽快修改密码

使用

系统使用流程图

640?wx_fmt=png

使用截图

640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png
640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png
640?wx_fmt=png

帮助

遇到问题请提 issue:https://gitee.com/dreamans/syncd/issues

LICENSE

本项目采用 MIT 开源授权许可证,完整的授权说明已放置在 LICENSE 文件中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式C语言基础(二)

指针是分类型的: 指针根据类型不同,偏移值也不同。指针和数组,如何让指针指向数组? ①用数组名 :int array[10],int* p,parray ②用第一个元素的地址:int array[10],int* p,p&array[0] 注意&#xff1a…

Linus中帮助命令man

使用方法:man 可以查看想要使用命令的详细使用方法 man 命令

大牛是怎么思考设计SQL优化方案的?

作者:惨绿少年https://www.cnblogs.com/clsn/p/8214048.html在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。图-MySQL查询过程…

嵌入式C语言基础(三)

字符串的定义方式及输出&#xff1a; #include <stdio.h> #include <stdlib.h> void strPrint(char* data,int size) {int i;for(i0;i<size;i){printf("函数打印数组&#xff1a;%c\n",*data);}putchar(\n); } int main() {int i0;int a[3]{1,2,3};c…

web.config配置数据库连接

第一种&#xff1a;获取连接字符串 首先要定义命名空间 system.configuration 1. string connstr string constr ConfigurationManager.AppSettings["connstring"]; web.config文件:加在<appsettings>和</appsettings> 之间 <appsettings> <a…

用 Git 和 Github 提高效率的 10 个技巧!

Git 和 GitHub 都是非常强大的工具。即使你已经使用他们很长时间&#xff0c;你也很有可能不知道每个细节。我整理了 Git 和 GitHub 可能提高日常效率的10个常用技巧。GitHub1、快捷键: t 和 w在你的源码浏览页面&#xff0c;按 t 可以快速进入模糊文件名搜索模式&#xff1a;在…

docker显示镜像的摘要信息

显示镜像的摘要信息 docker images --digests

嵌入式C语言基础(四)

为什么要用结构体&#xff1f; 在实际问题中&#xff0c;一组数据往往具有不同的数据类型。例如&#xff0c;在学生登记表中&#xff0c;姓名应为字符型;学号可为整型或字符型&#xff1b;年龄应为整型&#xff1b;性别应为字符型&#xff1b;成绩可为整型或实型。显然不能用一…

命令行分析java线程CPU占用

1.使用top命令找出占用cpu最高的JAVA进程pid号 2. 找出占用cpu最高的线程&#xff1a; top -Hp pid -d 1 -n 1 3. 打印占CPU最高JAVA进程pid的堆栈信息 jstack pid > /tmp/stacktrace.log 4. 把占CPU最高线程号码换算成16进制到stacktrace.log中寻找相应线程16进制值找到…

docker搜索镜像

docker search 要下载的 OFFICIAL 为ok的表示是官方镜像

C#操作HttpClient工具类库

using System; using System.Collections.Generic; using System.Net.Http; using System.Windows.Forms; using System.Configuration; using System.IO; using Newtonsoft.Json; namespace Dcflow { public class HttpHelper { //获取Configuration对象 public static string…

docker从仓库找镜像

docker search -s 数量 要下载的 数量表示仓库start数

bzoj 1911: [Apio2010]特别行动队 2011-12-26

1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 892 Solved: 359[Submit][Status][Discuss] DescriptionInputOutputSample Input4 -1 10 -20 2 2 3 4 Sample Output9HINT Source _________________________________________ 很简单的动规方程&a…

嵌入式C语言基础链表

什么是链表&#xff1f; 链表其实就是一种数据结构&#xff0c;所谓的数据结构就是数据存放的思想。 数组、链表优缺点&#xff1a; 增加一个元素或者删除一个元素都很难&#xff0c;因为地址是连续的&#xff0c;删除一个元素可能会挪动多个元素&#xff0c;不灵活。但是对于链…

docker pull 从仓库拉取镜像

docker pull 要拉取的镜像名 等价于 docker pull 要拉取的镜像名:lastest 拉取固定的镜像&#xff1a;docker pull 要拉取的镜像名:版本号 省略lastest表设计就是拉取的最新的

理解js中的原型链,prototype与__proto__的关系

说到prototype&#xff0c;就不得不先说下new的过程。 我们先看看这样一段代码&#xff1a; 1<script type"text/javascript">2 var Person function () { };3 var p new Person();4</script>很简单的一段代码&#xff0c;我们来看看这个new究竟做了什…

C#抓取网页HTML内容

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.Text; using System.IO; using System.Text.RegularExpressions; namespace Web { /// <summary> /// 公共方法类 /// </summary> p…

项目一感应垃圾桶(Wemos)

硬件材料&#xff1a; Wemos D1、SG90舵机、HC-SR04、杜邦线若干、蜂鸣器3.3V&#xff08;可有可无&#xff09; 软件材料&#xff1a; arduino IDE编译器、USB转串口驱动 Wemos D1&#xff1a; 特性&#xff1a; 基于ESP-8266EX及arduino做的一个融合arduino兼容&#xff0…

docker删除本地所有镜像

docker rmi -f ${docker images -qa}