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)
}
最後直接部署成功!