有没有python edge软件更新工具?
Is there a python edge software update tool?
所以我在一组 (10) Raspberry Pis 上用 python 和 运行ning 编写了一个简单的应用程序。
- 这是一个包含一个 运行可用脚本的文件夹。
- 我想在具有 public IP 的外部服务器上安装某种 CI/CD 类似的服务,可以将更新部署到所有边缘节点并在其上重启我的应用程序。
- 互联网在边缘设备上很少见,因此我想在按下服务器上的某个按钮时推送更新
在边缘设备上 python 程序有这样的东西吗?运行?
据我了解,主要问题是更新 运行 多个 Raspberry Pi 板上的一些脚本,对吗?
有很多 ready-made 解决方案,例如 dokku or piku。两者都允许您 git 将部署推送到您自己的服务器(手动)。
或者您可以开发自己的解决方案,使用 GitHub webhooks 或某些 HTML 形式(用于手动推送)和 Flask web-server 将在内部执行 CI/CD 步骤。
您需要在每个 node/board 上 运行 像上面那样编写脚本。并使用 URL 配置 Webhook,类似于:http://your-domain-or-IP.com:8000/deploy-webhook
但每个节点具有不同的端口。
或者您可以从浏览器手动打开该页面。或者创建单独的页面,允许您异步执行此操作。如你所愿。
from flask import Flask
import subprocess
app = Flask(__name__)
script_proc = None
src_path = '~/project/src/'
def bash(cmd):
subprocess.Popen(cmd)
def pull_code(path):
bash('git -C {path} reset --hard'.format(path=path))
bash('git -C {path} clean -df'.format(path=path))
bash('git -C {path} pull -f'.format(path=path))
# or
# If need just to copy files to remote machine:
# (example of remote path "pi@192.168.1.1:~/project/src/")
bash('scp -r {src_path} {dst_path}'.format(src_path=src_path, dst_path=path))
def installation(python_path):
bash('{python_path} -m pip install -r requirements.txt'.format(python_path=python_path))
def stop_script():
global script_proc
if script_proc:
script_proc.terminate()
def start_script(python_path, script_path, args=None):
global script_proc
script_proc = subprocess.Popen(
'{} {} {}'.format(str(python_path), script_path, ' '.join(args) or '')
)
@app.route('/deploy-webhook')
def deploy_webhook():
project_path = '~/project/some_project_path'
script_path = 'script1.py'
python_path = 'venv/bin/python'
pull_code(project_path)
installation(python_path)
stop_script()
start_script(python_path, script_path)
return 'Deployed'
如果您不需要用户界面并使用 linux,我建议您使用 bash 脚本。
我写了一个简单的 bash 脚本“推送更新并重新启动”到
为 raspberry pi 设置。请在ssh with key-less login.
前配置
#!/bin/bash
listOfIps=(
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
)
username="pi"
destDir="work/"
pythonScriptName="fooScript.py"
for i in "${listOfIps[@]}"
do
echo "will copy folder \"\" with content to ip: ${i} and perform"
echo "scp -r ${username}@${i}:${destDir}"
scp -r ${username}@${i}:${destDir}
echo "will kill all python scripts unfriendly"
ssh ${username}@${i} "pkill python"
echo "will restart my python scripts ${pythonScriptName} in dir ${destDir} "
ssh ${username}@${i} "python3 ${destDir}/${pythonScriptName} &"
done
exit 0
将代码保存到文件 copyToAll.sh 编辑用户名 destDir 和您的脚本名称并使其可执行:
chmod 755 copyToAll.sh
通话
copyToAll.sh myFileToSend
所以我在一组 (10) Raspberry Pis 上用 python 和 运行ning 编写了一个简单的应用程序。
- 这是一个包含一个 运行可用脚本的文件夹。
- 我想在具有 public IP 的外部服务器上安装某种 CI/CD 类似的服务,可以将更新部署到所有边缘节点并在其上重启我的应用程序。
- 互联网在边缘设备上很少见,因此我想在按下服务器上的某个按钮时推送更新
在边缘设备上 python 程序有这样的东西吗?运行?
据我了解,主要问题是更新 运行 多个 Raspberry Pi 板上的一些脚本,对吗?
有很多 ready-made 解决方案,例如 dokku or piku。两者都允许您 git 将部署推送到您自己的服务器(手动)。
或者您可以开发自己的解决方案,使用 GitHub webhooks 或某些 HTML 形式(用于手动推送)和 Flask web-server 将在内部执行 CI/CD 步骤。
您需要在每个 node/board 上 运行 像上面那样编写脚本。并使用 URL 配置 Webhook,类似于:http://your-domain-or-IP.com:8000/deploy-webhook
但每个节点具有不同的端口。
或者您可以从浏览器手动打开该页面。或者创建单独的页面,允许您异步执行此操作。如你所愿。
from flask import Flask
import subprocess
app = Flask(__name__)
script_proc = None
src_path = '~/project/src/'
def bash(cmd):
subprocess.Popen(cmd)
def pull_code(path):
bash('git -C {path} reset --hard'.format(path=path))
bash('git -C {path} clean -df'.format(path=path))
bash('git -C {path} pull -f'.format(path=path))
# or
# If need just to copy files to remote machine:
# (example of remote path "pi@192.168.1.1:~/project/src/")
bash('scp -r {src_path} {dst_path}'.format(src_path=src_path, dst_path=path))
def installation(python_path):
bash('{python_path} -m pip install -r requirements.txt'.format(python_path=python_path))
def stop_script():
global script_proc
if script_proc:
script_proc.terminate()
def start_script(python_path, script_path, args=None):
global script_proc
script_proc = subprocess.Popen(
'{} {} {}'.format(str(python_path), script_path, ' '.join(args) or '')
)
@app.route('/deploy-webhook')
def deploy_webhook():
project_path = '~/project/some_project_path'
script_path = 'script1.py'
python_path = 'venv/bin/python'
pull_code(project_path)
installation(python_path)
stop_script()
start_script(python_path, script_path)
return 'Deployed'
如果您不需要用户界面并使用 linux,我建议您使用 bash 脚本。 我写了一个简单的 bash 脚本“推送更新并重新启动”到 为 raspberry pi 设置。请在ssh with key-less login.
前配置#!/bin/bash
listOfIps=(
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
)
username="pi"
destDir="work/"
pythonScriptName="fooScript.py"
for i in "${listOfIps[@]}"
do
echo "will copy folder \"\" with content to ip: ${i} and perform"
echo "scp -r ${username}@${i}:${destDir}"
scp -r ${username}@${i}:${destDir}
echo "will kill all python scripts unfriendly"
ssh ${username}@${i} "pkill python"
echo "will restart my python scripts ${pythonScriptName} in dir ${destDir} "
ssh ${username}@${i} "python3 ${destDir}/${pythonScriptName} &"
done
exit 0
将代码保存到文件 copyToAll.sh 编辑用户名 destDir 和您的脚本名称并使其可执行:
chmod 755 copyToAll.sh
通话
copyToAll.sh myFileToSend