前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】:自动化部署??Python 也是可以的!!

【Python】:自动化部署??Python 也是可以的!!

作者头像
WEBJ2EE
发布2023-09-02 10:07:48
3290
发布2023-09-02 10:07:48
举报
文章被收录于专栏:WebJ2EE

提要

哈喽,大家好!

有没有还在每天都手动打包、部署应用的小伙伴?如果你暂时还切换不到 Jenkins 或 Docker,那可以考虑考虑 Python 哟。

TL;DR

* subprocess:用于执行本地 CMD 命令

* Fabric:用于 SSH 连接远程服务器

* webbrowser:用于打开本地浏览器

一、背景

持续集成、持续部署,业界已经有很多成熟、可靠的工具可以使用,例如:Jenkins、Docker、GitLab CI/CD、CircleCI、Travis CI等等。

如果你手边恰好有这些专业的工具,而且你恰好也擅长使用这些工具,那很好。

本文提供了一种思路,在你手边没有那些专业工具或者你暂时还不想接触那些专业工具的时候,也能帮你从繁琐的打包、部署工作中解放出来。

Python 就是个很好的选择。

二、为什么打包、部署很繁琐?

场景1:打包、部署基于 Webpack、React 的前端应用;

每完成一个新功能或每修正一个bug,就需要:

  1. npm run build:在本地对项目进行构建;
  2. tar:将构建结果(dist)压缩为 tar 包;
  3. sftp:上传 tar 包到远程服务器;
  4. ssh:在远程服务器上,停止运行中的旧应用;启动新应用;
  5. browser:打开浏览器,看升级是否成功;

场景2:打包、部署基于 Maven、SpringBoot 的后端应用;

每完成一个后新功能或每修正一个bug,就需要:

  1. mvn clean package:在本地对项目就行构建;
  2. sftp:上传构建结果(jar)到远程服务器;
  3. ssh:在远程服务器上,停止运行中的旧应用;启动新应用;
  4. ssh:查看启动日志,观察启动是否成功;
  5. brower:打开浏览器,看升级是否成功;

上面这两个场景,每天都需要重复进行很多次

emmm...

而且:

某一条命令记不清了...可能需要百度一下...

某一环操作失误了...可能得重新来一次...

远程服务器密码忘了...可能得查查...

...

三、本地 CMD 执行:subprocess

subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

subprocess 模块首先推荐使用的是它的 run 方法,更高级的用法可以直接使用 Popen 接口。

例如:

代码语言:javascript
复制
def npm_build(prj_path):
    subprocess.run([r'C:\Program Files\nodejs\npm.cmd', 'run', 'build'], cwd=prj_path)

三、远程 SSH 执行: Fabric

3.1. Paramiko?Fabric?

  • paramiko 是基于Python实现的 SSH2 远程安装连接,支持认证及密钥方式。可以实现远程命令执行,文件传输,中间SSH代理等功能。
  • Fabric在 paramiko 的基础上做了更高一层的封装,简化了 SSH 的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程 shell 命令,包括命令执行,文件上传,下载及完整执行日志输出等功能。

很显然,我们应该用 Fabric 进行 SSH 操作。

3.2. 上传文件到远程服务器

代码语言:javascript
复制
def sftp_upload(local_file_path, remote_file_path):
    print('uploading [%s] to [%s] ...' % (local_file_path, remote_file_path))
    with fabric.Connection(host=hostname, user=username, connect_kwargs={'password': password}) as c:
        c.put(local_file_path, remote_file_path)
    print('done.')

3.3. 在远程服务器上执行命令

代码语言:javascript
复制
def ssh_exec(cwd, cmd):
    with fabric.Connection(host=hostname, user=username, connect_kwargs={'password': password}) as c:
        with c.cd(cwd):
            r = c.run(cmd, encoding='utf-8')
            print(r)

四、本地浏览器:webbrowser

webbrowser 模块提供了一系列接口,用于控制用户的默认浏览器,以及调用系统默认浏览器打开网页或文件。

API:

只需要很简单的封装:

参考:

subprocess — Subprocess management: https://docs.python.org/3/library/subprocess.html#module-subprocess Paramiko: https://github.com/paramiko/paramiko Fabric: https://github.com/fabric/fabric https://docs.fabfile.org/en/stable/ webbrowser: https://docs.python.org/3/library/webbrowser.html?highlight=webbrowser#module-webbrowser


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebJ2EE 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、为什么打包、部署很繁琐?
  • 三、本地 CMD 执行:subprocess
  • 三、远程 SSH 执行: Fabric
    • 3.1. Paramiko?Fabric?
      • 3.2. 上传文件到远程服务器
        • 3.3. 在远程服务器上执行命令
        • 四、本地浏览器:webbrowser
        相关产品与服务
        持续集成
        CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档