有没有python edge软件更新工具?

Is there a python edge software update tool?

所以我在一组 (10) Raspberry Pis 上用 python 和 运行ning 编写了一个简单的应用程序。

在边缘设备上 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