drone

package module
v0.1.4 Latest Latest
Warning

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

Go to latest
Published: Jan 28, 2022 License: Apache-2.0 Imports: 11 Imported by: 20

README

drone

Drone插件基础框架,提供如下功能

  • 基础配置
    • 重试
    • 背压
    • 配置解析
    • 命名
  • 接口抽象
    • 步骤
    • 配置
    • 插件

编写插件

使用drone库编写插件非常简单,只需要两步

插件主文件plugin.go

用于描述插件的主文件,主要是实现drone.Plugin接口,大致代码如下

package main

import (
    `github.com/dronestock/drone`
    `github.com/storezhang/simaqian`
)

type plugin struct {
    config *config

    envs                  []string
    fastGithubExe         string
    fastGithubSuccessMark string
    gitExe                string
}

func newPlugin() drone.Plugin {
    return &plugin{
        config: new(config),

        envs:                  make([]string, 0),
        fastGithubExe:         `/opt/fastgithub/fastgithub`,
        fastGithubSuccessMark: `FastGithub启动完成`,
        gitExe:                `git`,
    }
}

func (p *plugin) Configuration() drone.Configuration {
    return p.config
}

func (p *plugin) Steps() []*drone.Step {
    return []*drone.Step{
        drone.NewStep(p.github, drone.Name(`Github加速`)),
        drone.NewStep(p.clear, drone.Name(`清理Git目录`)),
        drone.NewStep(p.ssh, drone.Name(`写入SSH配置`)),
        drone.NewStep(p.pull, drone.Name(`拉代码`)),
        drone.NewStep(p.push, drone.Name(`推代码`)),
    }
}

// 业务逻辑代码
func (p *plugin) github(logger simaqiang.Logger) (undo bool, err error) {
    return
}

// 业务逻辑代码
func (p *plugin) clear(logger simaqiang.Logger) (undo bool, err error) {
    return
}

// 业务逻辑代码
func (p *plugin) ssh(logger simaqiang.Logger) (undo bool, err error) {
    return
}

// 业务逻辑代码
func (p *plugin) pull(logger simaqiang.Logger) (undo bool, err error) {
    return
}

// 业务逻辑代码
func (p *plugin) push(logger simaqiang.Logger) (undo bool, err error) {
    return
}

其中,需要实现的方法步骤有

  • github
  • clear
  • ssh
  • pull
  • push
配置文件config.go

配置文件用于插件运行过程中的配置,并实现drone.Configuration接口,大致代码如下

package main

import (
	`github.com/dronestock/drone`
)

type config struct {
	drone.Config

	// 远程仓库地址
	Remote string `default:"${PLUGIN_REMOTE=${REMOTE=${DRONE_GIT_HTTP_URL}}}" validate:"required"`
	// 模式
	Mode string `default:"${PLUGIN_MODE=${MODE=push}}"`
	// SSH密钥
	SSHKey string `default:"${PLUGIN_SSH_KEY=${SSH_KEY}}"`
	// 目录
	Folder string `default:"${PLUGIN_FOLDER=${FOLDER=.}}" validate:"required"`
	// 目录列表
	Folders []string `default:"${PLUGIN_FOLDERS=${FOLDERS}}"`
	// 分支
	Branch string `default:"${PLUGIN_BRANCH=${BRANCH=master}}" validate:"required_without=Commit"`
	// 标签
	Tag string `default:"${PLUGIN_TAG=${TAG}}"`
	// 作者
	Author string `default:"${PLUGIN_AUTHOR=${AUTHOR=${DRONE_COMMIT_AUTHOR}}}"`
	// 邮箱
	Email string `default:"${PLUGIN_EMAIL=${EMAIL=${DRONE_COMMIT_AUTHOR_EMAIL}}}"`
	// 提交消息
	Message string `default:"${PLUGIN_MESSAGE=${MESSAGE=${PLUGIN_COMMIT_MESSAGE=drone}}}"`
	// 是否强制提交
	Force bool `default:"${PLUGIN_FORCE=${FORCE=true}}"`

	// 子模块
	Submodules bool `default:"${PLUGIN_SUBMODULES=${SUBMODULES=true}}"`
	// 深度
	Depth int `default:"${PLUGIN_DEPTH=${DEPTH=50}}"`
	// 提交
	Commit string `default:"${PLUGIN_COMMIT=${COMMIT=${DRONE_COMMIT}}}" validate:"required_without=Branch"`

	// 是否清理
	Clear bool `default:"${PLUGIN_CLEAR=${CLEAR=true}}"`
}
启动文件main.go

启动文件负责启动整个程序,是一个非常轻量的壳

package main

import (
	`github.com/dronestock/drone`
)

func main() {
	panic(drone.Bootstrap(newPlugin, drone.Configs(`FOLDERS`)))
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Aliases added in v0.1.2

func Aliases(aliases ...*alias) *optionAliases

Aliases 别名

func Args added in v0.1.1

func Args(args ...string) *optionArgs

Args 参数

func Async added in v0.0.3

func Async() *optionAsync

Async 配置异步执行

func Bootstrap

func Bootstrap(constructor constructor, opts ...option) (err error)

Bootstrap 启动插件

func Break added in v0.0.7

func Break() *optionBreak

Break 遇到错误中断执行

func Configs

func Configs(configs ...string) *optionConfigs

Configs 配置组

func Contains added in v0.1.3

func Contains(contains string) *optionContains

Contains 检查是否包含字符串

func Continue added in v0.0.6

func Continue() *optionBreak

Continue 遇到错误继续执行

func Dir added in v0.1.0

func Dir(dir string) *optionDir

Dir 配置命令执行目录

func Equal added in v0.1.3

func Equal(equal string) *optionEqual

Equal 检查是否字符串相等

func Fields added in v0.1.1

func Fields(fields ...gox.Field) *optionFields

Fields 字段

func Interrupt added in v0.0.6

func Interrupt() *optionRetry

Interrupt 遇到错误中断执行

func Name

func Name(name string) *optionName

Name 配置插件名称

func NewAlias added in v0.1.2

func NewAlias(name string, value string) *alias

NewAlias 创建别名

func NewOptions

func NewOptions(options ...option) []option

NewOptions 创建选项

func Retry added in v0.0.8

func Retry() *optionRetry

Retry 遇到错误重试

func Sync added in v0.0.3

func Sync() *optionAsync

Sync 配置同步执行

Types

type Config

type Config interface {
	// Setup 设置配置信息
	Setup() (unset bool, err error)

	// Fields 导出所有字段
	Fields() gox.Fields

	// Base 基础配置
	Base() *PluginBase
}

Config 配置

type Plugin added in v0.0.2

type Plugin interface {
	// Config 加载配置
	Config() (config Config)

	// Steps 插件运行步骤
	Steps() []*Step
}

Plugin 插件

type PluginBase added in v0.1.2

type PluginBase struct {
	simaqian.Logger

	// 是否启用默认配置
	Defaults bool `default:"${PLUGIN_DEFAULTS=${DEFAULTS=true}}"`
	// 是否显示详细信息
	Verbose bool `default:"${PLUGIN_VERBOSE=${VERBOSE=false}}"`
	// 是否显示调试信息
	Debug bool `default:"${PLUGIN_DEBUG=${DEBUG=false}}"`

	// 是否重试
	Retry bool `default:"${PLUGIN_RETRY=${RETRY=true}}"`
	// 重试次数
	Counts int `default:"${PLUGIN_COUNTS=${COUNTS=5}}"`
	// 重试间隔
	Backoff time.Duration `default:"${PLUGIN_BACKOFF=${BACKOFF=5s}}"`
}

PluginBase 插件基础配置

func (*PluginBase) Base added in v0.1.2

func (pb *PluginBase) Base() *PluginBase

func (*PluginBase) Exec added in v0.1.2

func (pb *PluginBase) Exec(command string, opts ...execOption) (err error)

func (*PluginBase) Fields added in v0.1.2

func (pb *PluginBase) Fields() gox.Fields

func (*PluginBase) Parse added in v0.1.2

func (pb *PluginBase) Parse(to map[string]string, configs ...string)

func (*PluginBase) Parses added in v0.1.2

func (pb *PluginBase) Parses(to map[string][]string, configs ...string)

func (*PluginBase) Setup added in v0.1.2

func (pb *PluginBase) Setup() (unset bool, err error)

type Step added in v0.0.2

type Step struct {
	// contains filtered or unexported fields
}

Step 步骤

func NewStep added in v0.0.2

func NewStep(do do, opts ...stepOption) *Step

NewStep 创建一个步骤

Jump to

Keyboard shortcuts

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