跳转至

15. 部署静态网站python脚本

1. 本地py脚本

cd jenkins-scripts
vim localtest.py
#!/usr/bin/python
import os, time
try:
    os.system("hostname")
    time.sleep(1)
    os.system("echo 'success!'")
except:
        print("Error")

测试结果

(env) root@4c16g:/jenkins-scripts# python localtest.py
4c16g
success!
分析了一下,只适合ssh远程登陆后执行,此脚本可以配合ansible使用,这样的话感觉多此一举了!

2. 远程操作py脚本

1. 安装paramiko包

# 10.0.8.5
cd jenkins-scripts
virtualenv env 
source env/bin/activate
pip install paramiko

2. 测试

cd jenkins-scripts
vim test.py
#!/usr/bin/python
import paramiko

# 创建一个ssh模块
ssh = paramiko.SSHClient()

# 设置连接方式
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接远程主机 ip地址 ,端口号,用户名,密码(在远程你主机真实存在的)
ssh.connect("10.0.8.2", 22, "ubuntu", "123456")
# ssh.connect("ip地址", 端口号, "用户名", "密码")

# 标准输入文件、标准输出文件、标准错误文件
# 在Linux上执行命令,返回结果
stdin, stdout, stderr = ssh.exec_command("hostname")
# stdin, stdout, stderr = ssh.exec_command("ifconfig")

# 查看命令执行结果
print(stdout)
print(stdout.read().decode('utf8'))

# 释放资源
ssh.close()

3.执行结果

(env) root@4c16g:/jenkins-scripts# python test.py
<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0x56071910 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>
zabbix

3. 思路分析

1.远程登录到web服务器
2.执行操作

4. 定义函数测试

vim exec_cmd_func.py
#!/usr/bin/python
import paramiko

def exec_cmd(cmd):
    # 创建一个ssh模块
    ssh = paramiko.SSHClient()    
    # 设置连接方式
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   
    # 连接远程主机 ip地址 ,端口号,用户名,密码(在远程你主机真实存在的)
    ssh.connect("10.0.8.2", 22, "ubuntu", "123456")
    # ssh.connect("ip地址", 端口号, "用户名", "密码")

    # 标准输入文件、标准输出文件、标准错误文件
    # 在Linux上执行命令,返回结果
    stdin, stdout, stderr = ssh.exec_command(cmd)

    # 查看命令执行结果
    print(stdout)
    print(stdout.read().decode('utf8'))
    # 释放资源
    ssh.close()

exec_cmd("sudo docker ps |grep openvpn")
(env) root@4c16g:/jenkins-scripts# python exec_cmd_func.py
<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0x9195d910 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>
f17971d434a4   kylemanna/openvpn:2.4                                 "ovpn_run"               7 weeks ago   Up 7 weeks   0.0.0.0:1194->1194/udp, :::1194->1194/udp   openvpn

多个ip时的函数

#!/usr/bin/python
import paramiko

def ssh_exec_cmd(ip,cmd):
    # 创建一个ssh模块
    ssh = paramiko.SSHClient()    
    # 设置连接方式
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   
    # 连接远程主机 ip地址 ,端口号,用户名,密码(在远程你主机真实存在的)
    ssh.connect(ip, 22, "ubuntu", "123456")
    # ssh.connect("ip地址", 端口号, "用户名", "密码")

    # 标准输入文件、标准输出文件、标准错误文件
    # 在Linux上执行命令,返回结果
    stdin, stdout, stderr = ssh.exec_command(cmd)

    # 查看命令执行结果
    print(stdout)
    print(stdout.read().decode('utf8'))
    # 释放资源
    ssh.close()

# 定义web服务器ip列表,有多少都写这里!
ip_lst=['10.0.8.2','10.0.8.3']
# 循环执行
for ip in ip_lst:
  ssh_exec_cmd(ip,"sudo docker ps |grep openvpn")
(env) root@4c16g:/jenkins-scripts# python test2.py
<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0x2c587970 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>
f17971d434a4   kylemanna/openvpn:2.4                                 "ovpn_run"               7 weeks ago   Up 7 weeks   0.0.0.0:1194->1194/udp, :::1194->1194/udp   openvpn

<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0x2e1ba790 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>
f524fca7dcb2   kylemanna/openvpn:2.4                                 "ovpn_run"               2 months ago   Up 5 days   0.0.0.0:1194->1194/udp, :::1194->1194/udp                                                                                         openvpn

5. 脚本编写

vim update_webserver.py
#!/usr/bin/python
import paramiko

def ssh_exec_cmd(ip,cmd):
    # 创建一个ssh模块
    ssh = paramiko.SSHClient()    
    # 设置连接方式
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   
    # 连接远程主机 ip地址 ,端口号,用户名,密码(在远程你主机真实存在的)
    ssh.connect(ip, 22, "ubuntu", "123456")
    # ssh.connect("ip地址", 端口号, "用户名", "密码")

    # 标准输入文件、标准输出文件、标准错误文件
    # 在Linux上执行命令,返回结果
    stdin, stdout, stderr = ssh.exec_command(cmd)

    # 查看命令执行结果
    print(stdout)
    print(stdout.read().decode('utf8'))
    # 释放资源
    ssh.close()

# 定义web服务器ip列表,有多少都写这里!
ip_lst=['10.0.8.2','10.0.8.3']
# 循环执行
for ip in ip_lst:
  print("step1:删除旧网站内容")
  try:
    ssh_exec_cmd(ip,"cd /service/chupeng130 && sudo rm -rf *")
    print("step1完成")
  except:
    print("failer")
    exit
  print("step2:拉取最新代码")
    try:
    ssh_exec_cmd(ip,"cd /service/chupeng130 && git clone https://gitee.com/chupeng130/chupeng130.git")
    print("step2完成")
  except:
    print("failer")
    exit


最后更新: 2022-02-23 13:04:43