V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kysida
V2EX  ›  Python

python 发布代码的方式问题请教

  •  1
     
  •   kysida · 2016-09-08 16:33:07 +08:00 · 2973 次点击
    这是一个创建于 3000 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情景:开发机-跳板机-线上,需要把代码从开发机打包推送到线上

    目前我实现的方法是用 python 和 ansible 工具在开发机和跳板机上写两个 ansible playbook 推送代码,可以实现,但是比较繁琐,而且代码的可移植性很差,希望请教各位大神能否有个更加简单的方法提高代码的移植性

    17 条回复    2016-09-09 13:43:30 +08:00
    7sDream
        1
    7sDream  
       2016-09-08 19:09:28 +08:00
    可以内网自建一个 pypi ,然后走 pypi 的发布流程。

    或许也可以尝试下 Docker ?

    (还没工作过,不太清楚生产环境还有些什么坑……提个想法而已
    binux
        2
    binux  
       2016-09-08 19:23:46 +08:00
    你们没有源码仓库和构建系统吗?
    kysida
        3
    kysida  
    OP
       2016-09-08 19:26:48 +08:00
    @binux 有 git 仓库并不在内网
    kysida
        4
    kysida  
    OP
       2016-09-08 19:31:27 +08:00
    @7sDream docker 是容器或者源仓库, pypi 是第三方包管理工具和发布代码有啥关系,我了解的不是很深,能解释下吗?感谢您的回复
    kysida
        5
    kysida  
    OP
       2016-09-08 19:31:39 +08:00
    @binux 感谢您的回复
    binux
        6
    binux  
       2016-09-08 19:32:27 +08:00
    @kysida 内网连 outbound 都封吗?那让跳板机部署呗,跳板机总能连接外网了吧。
    kysida
        7
    kysida  
    OP
       2016-09-08 19:37:05 +08:00
    @binux outbound 到没封但是访问都得经过跳板机~~~公司规定跳板机不能够随便跑其他的代码,没办法,目前只能通过二级跳来实现了,感谢您的回复
    aec4d
        8
    aec4d  
       2016-09-08 19:38:04 +08:00
    可能没必要搞那么复杂 fabric 就支持跳板机
    我以前都是直接 fabric 用 rsync 同步上去就搞定部署了
    kysida
        9
    kysida  
    OP
       2016-09-08 19:44:03 +08:00
    @aec4d 长见识了,我去研究研究这玩意,十分感谢~。~
    binux
        10
    binux  
       2016-09-08 19:45:31 +08:00
    @kysida outbound 没封就可以从仓库拖代码了啊,就不用打包推送了啊,再加一个 CI hook ,构建了自动部署,就不用登陆。
    loryyang
        11
    loryyang  
       2016-09-08 19:53:28 +08:00
    完全自建的方法:从开发到自动测试构建到上线:
    代码目录除了代码,再搞两个目录: test 、 production 。 test 写好测试脚本, production 写好构建脚本(把程序组装成线上的环境)。
    然后 ci 之后,测试机器的脚本通过 CI hook 启动测试,如果测试通过,执行构建脚本,将环境打包,往一个地方,比如 ftp 或者 NFS 之类的文件共享系统推送。
    线上一个脚本循环查看这个文件系统是否有新的包传上来,如果有就 pull 过来部署
    7sDream
        12
    7sDream  
       2016-09-08 20:19:02 +08:00
    @kysida

    没有用过 DaoCloud 之类的容器云么?

    Github Repo WebHook 到 DaoCloud 项目,之后有新 release 前缀的 Tag Release 的时候, DaoCloud 自动触发 Test CI ,如果成功了进行 Image Build , Build 成功之后自动部署到应用(也可以部署到你们自己的主机上)。

    可以注册一个试试看。

    至于自建 PyPi ,参见这个问题吧: https://www.zhihu.com/question/38081354 ,里面也介绍了 Docker 的方法。
    Shawdon
        13
    Shawdon  
       2016-09-09 12:37:12 +08:00
    一直 fabric ,没有遇到不够用的情景
    kysida
        14
    kysida  
    OP
       2016-09-09 13:37:18 +08:00
    @binux 代码库拉下的代码还要分环境呀,测试预发布和线上环境,对应的环境不同配置要做修改
    kysida
        15
    kysida  
    OP
       2016-09-09 13:40:14 +08:00
    @loryyang 感谢你的回复,我现在做的就是用脚本实现的自动发布使用的不是 ftp 和 nfs 传输而是用 ansible playbook 同步,但是移植性比较差,我现在也在学习 hook 的知识,对这方面知之甚少,学习了
    kysida
        16
    kysida  
    OP
       2016-09-09 13:41:47 +08:00
    @7sDream 感谢您的回复,在这之前没怎么用过容器,用了一点 docker 仅仅是学习,关于使用 pypi 这方面没怎么了解,感谢您提供的资源,收获不少,正在学习~
    kysida
        17
    kysida  
    OP
       2016-09-09 13:43:30 +08:00
    @Shawdon 感谢您的回复, fabric 我还是第一次接触,没怎么了解,我刚 google 了一下,确实很有意思,已经加入了学习列表感谢您的建议
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1135 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:55 · PVG 06:55 · LAX 14:55 · JFK 17:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.