nocd

package module
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2018 License: MIT Imports: 10 Imported by: 14

README

NoCD 持续交付系统

Go Report Card Build Status

NoCD 是一个 Go 实现的轻便可控的持续交付系统。

界面预览

首页截图 服务器管理 项目管理
交付记录 管理中心 查看日志

功能特色

  • 服务器:可以添加多个部署服务器。
  • 项目:支持解析 Gogs、GitHub、Gitlab、BitBucket 的 WebHook
  • 通知:部署成功或失败经 Server酱 推送到您的微信
  • 交付记录:可以查看部署记录,用户可以停止部署中的流程
  • 管理面板:查看系统状态,管理用户,管理部署中的流程

部署指北

Docker
  1. 创建配置文件(如/data/nocd文件夹)

    nano /data/nocd/app.ini
    

    文件内容参考下面( web_listen = 0.0.0.0:8000 配置不要改)

  2. 运行NoCD

    docker run -d --name=nocd -p 8000:8000 -v /data/nocd/:/data/conf naiba/nocd
    
源码编译
  1. Clone 源代码

  2. 进入应用目录 cd nocd/cmd/web

  3. 打包资源文件并编译

    go get -u github.com/tmthrgd/go-bindata/go-bindata
    go-bindata resource/...
    go build
    
  4. conf/app.ini 创建配置文件

    [nocd]
    cookie_key_pair = example
    debug = true
    domain = cd.git.cm
    web_listen = 0.0.0.0:8000
    loc = Asia/Shanghai
    google_analysis = "NB-XXXXXX-1"
    [third_party]
    github_oauth2_client_id = example
    github_oauth2_client_secret = example
    sentry_dsn = "https://example:xx@example.io/"
    
  5. 运行

    ./web
    
  6. GitHub 设置回调:https://cd.git.cm/oauth2/callback

常见问题

  1. 为什么我的部署脚本总是执行失败 或者 根本没有执行?

    请检查您的 PATH 路径是否引入,建议提前 export 一下路径,自动部署的时候不会

    source .bash_profile

  2. 如何保持后台运行?

    可以使用 systemd 。 更推荐使用docker方式运行。

版权声明

FOSSA Status

Copy © 2017-2018 Naiba

Documentation

Index

Constants

View Source
const (

	//PipeLogStatusSuccess 成功
	PipeLogStatusSuccess
	//PipeLogStatusErrorServerConn 服务器链接失败
	PipeLogStatusErrorServerConn
	//PipeLogStatusErrorShellExec 脚本错误
	PipeLogStatusErrorShellExec
	//PipeLogStatusRunning 正在执行部署
	PipeLogStatusRunning
	//PipeLogStatusHumanStopped 人工停止
	PipeLogStatusHumanStopped
	//PipeLogStatusErrorTimeout 执行超时
	PipeLogStatusErrorTimeout
)
View Source
const (

	//RepoPlatGitHub GitHub
	RepoPlatGitHub
	//RepoPlatBitBucket BitBucket
	RepoPlatBitBucket
	//RepoPlatGitlab Gitlab
	RepoPlatGitlab
	//RepoPlatGogs Gogs
	RepoPlatGogs
)

Variables

View Source
var Conf *ini.File

Conf of NoCD config

View Source
var Debug bool

Debug debuggable

Loc system time location

View Source
var RepoEvents map[int]map[string]string

RepoEvents 各平台支持的事件索引

View Source
var RepoPlatforms map[int]string

RepoPlatforms 平台信息索引

View Source
var RunningLogs map[uint]*Running

RunningLogs 系统中在运行的任务

Functions

func InitStats

func InitStats(d *gorm.DB)

InitStats 初始化系统统计

func InitSysConfig

func InitSysConfig(file string)

InitSysConfig system: load common config

func Logger

func Logger() *log.Entry

Logger 带行号文件名方法名的Logger

Types

type PipeLog

type PipeLog struct {
	ID         uint
	StartedAt  time.Time
	StoppedAt  time.Time
	Pipeline   Pipeline
	PipelineID uint
	Pusher     string
	Log        string
	Status     int
}

PipeLog 部署日志

type PipeLogService

type PipeLogService interface {
	Create(plog *PipeLog) error
	Update(plog *PipeLog) error
	LastServerLog(sid uint) PipeLog
	LastPipelineLog(pid uint) PipeLog
	UserLogs(uid uint, page, size int64) ([]PipeLog, int64)
	Pipeline(log *PipeLog) error
	GetByUID(uid, lid uint) (PipeLog, error)
	GetByID(lid uint) (PipeLog, error)
	Logs(status int, page, size int64) ([]PipeLog, int64)
	LastLogs(num uint) []PipeLog
}

PipeLogService 部署日志服务

type Pipeline

type Pipeline struct {
	ID           uint   `form:"id" binding:"min=0"`
	Name         string `form:"name" binding:"required,min=1,max=12"`
	Branch       string `form:"branch" binding:"required,alphanum,min=1,max=30"`
	Events       string
	EventsSlice  []string `gorm:"-" form:"events[]" binding:"required,min=1"`
	Shell        string   `form:"shell" binding:"required,min=3,max=1000"`
	UserID       uint
	User         User       `form:"-" binding:"-"`
	ServerID     uint       `form:"server" binding:"required,min=1"`
	Server       Server     `form:"-" binding:"-"`
	RepositoryID uint       `form:"repo" binding:"required,min=1"`
	Repository   Repository `form:"-" binding:"-"`
	PipeLog      []PipeLog  `form:"-" binding:"-"`
}

Pipeline 部署流程

type PipelineService

type PipelineService interface {
	Create(p *Pipeline) error
	Update(p *Pipeline) error
	Delete(pid uint) error
	RepoPipelines(r *Repository) []Pipeline
	UserPipelines(u *User) []Pipeline
	UserPipeline(uid, pid uint) (Pipeline, error)
	GetPipelinesByRidAndEventAndBranch(rid uint, event string, branch string) ([]Pipeline, error)
	Server(p *Pipeline) error
	User(p *Pipeline) error
}

PipelineService 部署流程服务

type Repository

type Repository struct {
	ID       uint `form:"id"`
	UserID   uint
	User     User `form:"-" binding:"-"`
	Secret   string
	Name     string     `form:"name" binding:"required,min=1,max=12"`
	Platform int        `form:"platform" binding:"required,min=1,max=4"`
	Pipeline []Pipeline `form:"-" binding:"-"`
}

Repository 项目

type RepositoryService

type RepositoryService interface {
	Create(repo *Repository) error
	Update(repo *Repository) error
	Delete(rid uint) error
	GetRepoByUser(user *User) []Repository
	GetRepoByID(id uint) (Repository, error)
	GetRepoByUserAndID(user *User, id uint) (Repository, error)
}

RepositoryService 项目服务

type Running

type Running struct {
	Finish     chan bool
	Closed     bool
	Log        *PipeLog
	RunningLog []string
}

Running 运行中的任务

type Server

type Server struct {
	ID        uint `form:"id" binding:"min=0"`
	UserID    uint
	User      User       `form:"-" binding:"-"`
	Pipelines []Pipeline `form:"-" binding:"-"`
	Name      string     `form:"name" binding:"required,min=1,max=12"`
	Address   string     `form:"address" binding:"required,address,min=1,max=30"`
	Port      int        `form:"port" binding:"required,min=1"`
	Login     string     `form:"login" binding:"required,alphanum,min=1,max=30"`
	Status    int
}

Server 服务器

type ServerService

type ServerService interface {
	CreateServer(s *Server) error
	DeleteServer(sid uint) error
	UpdateServer(s *Server) error
	GetServersByUser(user *User) []Server
	GetServersByUserAndSid(user *User, sid uint) (Server, error)
}

ServerService 服务器服务

type Stats

type Stats struct {
	UserCount     int64
	ServerCount   int64
	PipelineCount int64
	RepoCount     int64
	RunningCount  int64
	PipeLogCount  int64
	Update        time.Time
}

Stats 系统统计信息

func GetStats

func GetStats() Stats

GetStats 获取系统统计

type User

type User struct {
	gorm.Model
	//用户GitHubID
	GID        uint `gorm:"unique_index"`
	GName      string
	GLogin     string
	Pubkey     string
	PrivateKey string
	//Server酱推送Key
	Sckey        string       `form:"sckey" binding:"alphanum,min=20"`
	PushSuccess  bool         `form:"push_success" binding:"exists"`
	Servers      []Server     `form:"-"`
	Repositories []Repository `form:"-"`
	Pipelines    []Pipeline   `form:"-"`
	IsBlocked    bool
	IsAdmin      bool
	// 用户Token
	Token string
}

User 用户

type UserService

type UserService interface {
	UserByGID(gid int64) (*User, error)
	Create(u *User) error
	Update(u *User) error
	Verify(uid, token string) (*User, error)
	Users(page, size int64) ([]*User, int64)
}

UserService 用户服务

Directories

Path Synopsis
cmd
web
utils
ssh

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL