drone 编译问题

drone-server 编译

  • 编译命令: go install -tags "oss nolimit" github.com/drone/drone/cmd/drone-server

  • 编译命令: go install github.com/drone/drone/cmd/drone-server (上面的那条命令有问题, 编译的版本是 oss, 有限制, 功能缺失)

  • sqlite 编译错误问题

# github.com/mattn/go-sqlite3
sqlite3-binding.c: In function 'sqlite3SelectNew':
sqlite3-binding.c:121469:10: warning: function may return address of local variable [-Wreturn-local-addr]
121469 |   return pNew;
       |          ^~~~
sqlite3-binding.c:121431:10: note: declared here
121431 |   Select standin;

解决: set CGO_CFLAGS=-g -O2 -Wno-return-local-addr
来源: https://github.com/golang/go/issues/28095

drone-server 后台运行

windows 下可能需要后台执行

  1. go get github.com/kardianos/service 安装依赖
  2. 修改 main.go
// 其实就是包装原来的 go main 函数
// 参考地址: https://www.jianshu.com/p/0fc3dea24786
// 主要是用了一个依赖库: github.com/kardianos/service

------------


type program struct{}

func (p *program) Start(s service.Service) error {
	go p.run()
	return nil
}

func (p *program) run() {
	// 代码写在这儿
	mainOld()
}

func (p *program) Stop(s service.Service) error {
	return nil
}

func main() {
	svcConfig := &service.Config{
		Name:             "drone-server",          //服务显示名称
		DisplayName:      "drone-server",          //服务名称
		Description:      "drone-server - 轻量级 CI", //服务描述
		Arguments:        []string{},
		WorkingDirectory: "",
	}

	// 安装时, 直接以当前目录作为工作目录 !
	path, err := os.Executable()
	if err != nil {
		log.Printf(err.Error())
	}
	dir := filepath.Dir(path)
	svcConfig.Arguments = append(svcConfig.Arguments, "-env-file="+dir+"/.env")
	svcConfig.WorkingDirectory = dir

	prg := &program{}
	s, err := service.New(prg, svcConfig)
	if err != nil {
		logger := logrus.WithError(err)
		logger.Fatal(err)
	}

	if err != nil {
		logger := logrus.WithError(err)
		logger.Fatal(err)
	}

	if len(os.Args) > 1 {
		if os.Args[1] == "install" {
			s.Install()
			logger := logrus.WithError(err)
			logger.Println("服务安装成功")
			return
		}

		if os.Args[1] == "remove" {
			s.Uninstall()
			logger := logrus.WithError(err)
			logger.Println("服务卸载成功")
			return
		}
	}

	err = s.Run()
	if err != nil {
		logger := logrus.WithError(err)
		logger.Error(err)
	}
}

包装为服务后需要注意的点

windows 下 service 工作目录默认为 C:\Windows\System32, 其 sqlite 对应的路径为 C:\Windows\System32\core.sqlite

相关异常处理

  1. 重新安装后 webhook 失效问题解决
    重新安装 drone ci 后 之前的 webhook 会失效, 这是需要删除仓库中的旧 webhook, 然后重新激活该仓库
    image
  2. windows 下 scp 的执行错误问题.
    windows scp 可能报错 UNPROTECTED PRIVATE KEY FILE!
    需要禁用 权限继承, 只保留 administrator ,
    private key 文件设为下图所示.(drone-runner-exec 权限保持一致, 不得不说 windows 有点坑...)
    image

posted on 2022-01-19 09:46  正义的伙伴!  阅读(615)  评论(0编辑  收藏  举报

导航

//增加一段JS脚本,为目录生成使用