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 下可能需要后台执行
go get github.com/kardianos/service
安装依赖- 修改
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
相关异常处理
- 重新安装后 webhook 失效问题解决
重新安装 drone ci 后 之前的 webhook 会失效, 这是需要删除仓库中的旧webhook
, 然后重新激活该仓库
- windows 下
scp
的执行错误问题.
windows scp 可能报错UNPROTECTED PRIVATE KEY FILE!
。
需要禁用 权限继承, 只保留 administrator ,
private key 文件设为下图所示.(与drone-runner-exec
权限保持一致, 不得不说 windows 有点坑...)