微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有python edge软件更新工具吗?

如何解决有python edge软件更新工具吗?

因此,我有一个用python编写的简单应用程序,可在10台RaspBerry Pi上运行。

  • 这是一个带有可运行脚本的文件夹。
  • 我想在具有公共IP的外部服务器上使用某种类似CI / CD的服务,该服务会将更新部署到所有边缘节点并在它们上重新启动我的应用。
  • 边缘设备上很少有Internet,因此我想在按下服务器上的某些按钮时推送更新

打算在边缘设备上运行的python程序有这种东西吗?

解决方法

据我了解,主要问题是在多个Raspberry Pi板上更新并运行一些脚本,对吗?

有很多现成的解决方案,例如dokkupiku。两者都允许您将git push部署(手动)部署到自己的服务器上。

或者,您可以使用GitHub webhooks或一些HTML表单(用于手动推送)和Flask网络服务器来开发自己的解决方案,它们将在内部执行CI / CD步骤。

您需要在每个节点/板上运行上述脚本。并使用类似于http://your-domain-or-IP.com:8000/deploy-webhook的URL配置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),' '.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脚本“推送更新并重新启动” 按照树莓派的设置。请先配置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 \"$1\" with content to ip: ${i} and perform"
     echo "scp -r $1 ${username}@${i}:${destDir}"
     scp -r $1 ${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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。