Expect 实现用户名密码自动输入


项目服务部署:

1、cd   进入 项目根目录

2、git pull  拉取分支代码 (这里需要输入代码仓库的访问用户名和密码)

3、maven 编译代码

4、进入 docker-compose 的相关路径

5、执行docker-compose 的香瓜服务更行部署操作

根据以上需求,编写了脚本:(服务器需要预先安装 expoet )

expect 使用可以参考:https://www.runoob.com/w3cnote/linux-autologin-shell.html
#!/bin/bash
# git 登录的用户名 和 密码
git_username="你代码仓库登录的用户名"
git_password="你代码仓库登录的密码"

cd /xxx/git/xxx

# 代码库根路径执行 git pull 弹出输入密码和用户名的提示复制下来的
# Username for 'https://codeup.aliyun.com'"
# Password for 'https://用户名@codeup.aliyun.com':

# 避免服务区中修改与提交的代码冲突
expect -c "
  # 防止服务器修改过本地的分支数据,放弃修改
  spawn git reset --hard FETCH_HEAD
  interact
"

# 拉取代码
expect -c "
  # 拉取代码 git pull [origin/远端分支] [本地分支]
  spawn git pull

  # 自动输入代码仓库用户名
  expect {

    # 可以模糊匹配 *Username*
    \"Username for 'https://codeup.aliyun.com'\" {

      # 发送用户名字符串,\n 等于输入字符串后的 回车
      send \"${git_username}\n\";

      # 继续执行 expect
      exp_continue
    }

    # 自动输入代码仓库密码,可以模糊匹配 *Password*
    \"Password for 'https://${git_username}@codeup.aliyun.com'\" {

      # 发送密码字符串,\n 等于输入字符串后的 回车
      send \"${git_password}\n\"

    }
  }
  interact
"

# 编译代码 Maven 命令
mvn clean install -Dmaven.test.skip=true

# 以下是 docker-compose 相关的命令操作
cd /xxx/git/xxx/docker

############################# Master ####################################
# 构建服务镜像
docker-compose -f /xxx/git/xxx/docker/docker-compose.yml build 主服务名

# 停止服务
docker-compose -f /xxx/git/xxx/docker/docker-compose.yml stop 主服务名

# 启动服务
docker-compose -f /xxx/git/xxx/docker/docker-compose.yml up -d 主服务名

# 睡眠分钟,这里测试的只有一主一从,为了确保主服务和从服务不同时停止,睡眠几分钟确保主服务完全启动
sleep 3m

############################# Slave从服务 ######################################
# 构建服务镜像
docker-compose -f /xxx/git/xxx/docker/docker-compose.yml build 从服务名

# 停止服务
docker-compose -f /xxx/git/xxx/docker/docker-compose.yml stop 从服务名

# 启动服务
docker-compose -f /xxx/git/xxx/docker/docker-compose.yml up -d 从服务名