Go通过SSH部署项目到服务器
学习了Go语言后,打算利用最近比较空一点,写一个前端部署工具,不需要每次都复制粘贴的麻烦,这篇是主文件,利用利用之前写的几个方法完成部署
下面直接看代码,使用了上面封装的这几种方法
func main() {
var conf = config.GetConfig()
var (
err error
sftpClient *sftp.Client
)
var startStr = "各单位请注意!开始部署%服务器啦!"
var endStr = "完成部署%服务器啦!请注意清除缓存!"
//获取命令行输入的mode字段,我们能用来区分部署到哪个服务器上
mode := flag.String("mode", "local", "部署的服务器模式")
flag.Parse()
var remoteDir string
var localFilePath string
//下面就是对不同mode的不同处理
switch *mode {
case "test":
//开始推送消息
dingmsg.SendDingMsg(strings.Replace(startStr,"%","测试",1))
//结束推送消息
defer dingmsg.SendDingMsg(strings.Replace(endStr,"%","测试",1))
//连接服务器
sftpClient, err = connect.Connect(conf.TestUser, conf.TestPassWord, conf.TestHost, conf.TestPort)
//设置本地/远程文件夹路径
remoteDir = conf.TestRemotePath
localFilePath = conf.TestLocalPath
case "prod":
dingmsg.SendDingMsg(strings.Replace(startStr,"%","正式",1))
defer dingmsg.SendDingMsg(strings.Replace(endStr,"%","正式",1))
sftpClient, err = connect.Connect(conf.ProdUser, conf.ProdPassWord, conf.ProdHost, conf.ProdPort)
remoteDir = conf.ProdRemotePath
localFilePath = conf.ProdLocalPath
case "local":
Fallthrough
default:
dingmsg.SendDingMsg(strings.Replace(startStr,"%","本地",1))
defer dingmsg.SendDingMsg(strings.Replace(endStr,"%","本地",1))
sftpClient, err = connect.Connect(conf.LocalUser, conf.LocalPassWord, conf.LocalHost, conf.LocalPort)
remoteDir = conf.LocalRemotePath
localFilePath = conf.LocalLocalPath
}
// 这里换成实际的 SSH 连接的 用户名,密码,主机名或IP,SSH端口
if err != nil {
log.Fatal(err)
}
//结束关闭服务
defer sftpClient.Close()
//先删除文件
remove.Remove(sftpClient,remoteDir)
//再上传文件
upload.Upload(sftpClient,localFilePath,remoteDir)
}
最后直接部署成功!