expect一键部署方案

一、背景介绍

在本地修改代码之后,部署的步骤往往比较繁琐(编译–scp–输入密码–重启服务),笔者想简化流程,但是使用 Jenkins 之类的工具比较麻烦,因此笔者采用 expect 来实现一键部署,在本地代码开发完毕之后,执行下文中index.sh即可完成“编译–编译后文件的上传–重启服务”的流程。

特别说明:

  1. 笔者文中流程适用于前端或者node项目,如果您的项目不是前端或者node项目,请根据您的需要参照本文中的代码稍作修改,即可满足您的需求
  2. 笔者的文中仅包含基础的一键部署流程,如需增加额外的流程可以基础流程中的代码稍作修改,即可满足您的需求

二、如何实现一键部署

1. 文件结构

|── deploy
|----└── index.sh # 入口文件
|----└──restart-server.sh # 重启服务器的服务,纯前端项目可略过此项
|----└──scp-dist.sh # 上传 dist 目录下的文件到服务器

2. 文件内容

2.1 index.sh

#!/bin/bash

password=您的ssh密码
ip=您的服务器IP
targetPath=您的目标部署路径

yarn run build

$(pwd)/deploy/scp-dist.sh $(pwd) $password $ip $targetPath
$(pwd)/deploy/restart-server.sh $(pwd) $password $ip $targetPath

2.2 restart-server.sh

#!/usr/bin/expect

set projectPath [lindex $argv 0]
set password [lindex $argv 1]
set ip [lindex $argv 2]
set targetPath [lindex $argv 3]

spawn bash -c "ssh -p 29521 root@$ip"
expect "password: "
send "$password\r"
# 登录完成会显示"]#"
expect "]#"
send "cd $targetPath && forever restart  --minUptime 100  --spinSleepTime 100 app.js\r"
expect "]#"
send "exit\r"
expect eof

2.3 scp-dist.sh

#!/usr/bin/expect

set projectPath [lindex $argv 0]
set password [lindex $argv 1]
set ip [lindex $argv 2]
set targetPath [lindex $argv 3]

spawn bash -c "scp -P 29521 -r ${projectPath}/dist/* root@$ip:$targetPath"

expect {
        "(yes/no)?" {
            send "yes\r"
            expect "password:" {
                send "$password\r"
            }
        }
        "password:" {
            send "$password\r"
        }
}
expect eof
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿祥_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值