构建系统

keas.build的Python项目详细描述


keas.build

轻松管理大型多包项目

keas.build是一个命令行工具,用于快速创建新的 为具有多个 相互依赖的软件包。例如,考虑一个web应用程序 这有助于你管理你的twitter追随者,称为twolo(简称 对于twitter追随者),您可能有几个不同的python包 它处理应用程序的不同方面:

  • twolo.integration -用于管理与 Twitter
  • twolo.web -twolo.integration的web前端 包装
  • twolo.rest -用于处理 Twollo.集成
  • twolo.utils -一个包含随机实用程序和 东西,

使用keas.build,您将能够管理这些 python包和任意数量的部署配置 连贯地。具体来说,keas.build将:

  • 允许您定义一个项目,它是 相互依存的卵通常一起释放。
  • 必要时自动创建每个包的新鸡蛋版本。
  • 将新鸡蛋上传到私人鸡蛋库。
  • 生成版本化的构建配置文件,这些文件将 鸡蛋放好。
  • 将构建配置文件上载到专用配置服务器。
  • 将依赖的构建配置文件上载到专用配置 服务器(通过检查extends=chain)

安装

安装keas.build的发布版本

您可以使用"简易安装"获得最新版本:

$ easy_install keas.build

安装keas.build的开发版本

签出代码:

$ svn checkout svn://svn.zope.org/repos/main/keas.build/trunk keas.build
$ cd keas.build

运行引导脚本并构建:

$ python bootstrap.py
$ ./bin/buildout

运行构建包脚本

安装完成后,您应该能够运行 构建包 脚本。(可在开发者的 /bin/build包中找到 安装):

$ build-package
Usage: build-package [options]

Options:
  -h, --help            show this help message and exit
  -c FILE, --config-file=FILE
                        The file containing the configuration of the project.
  -q, --quiet           When specified, no messages are displayed.
  -v, --verbose         When specified, debug information is created.
  -d, --use-defaults    When specified, no user input is required and the defaults are used.
  -o, --offline-mode    When set, no server commands are executed.
  -n, --next-version    When set, the system guesses the next version to generate.
  -b BRANCH, --use-branch=BRANCH
                        When specified, this branch will be always used.
  -i BRANCHES --independent-branches=BRANCH1 BRANCH2,
                        When specified, the system guesses the next version from all this branches.
  --no-upload           When set, the generated configuration files are not uploaded.
  --no-branch-update    When set, the branch is not updated with a new version after a release is created.

入门

假设

首先,我们需要从keas.build的一些假设开始 包裹的摆放方式。在中开发多个包时 串联,你的subversion存储库通常是有意义的 就像这样:

SVNROOT/packages/
    branches/
        Twollo-0.x/
            ...
        Twollo-1.x/
            twollo.integration/
            twollo.rest/
            twollo.utils/
            twollo.web/
    tags/
        twollo.integration-1.2/
        twollo.integration-1.3/
        twollo.web-1.7/
        twollo.web-1.8/
        twollo.web-1.9/
        ...
    trunk/
        twollo.integration/
        twollo.rest/
        twollo.utils/
        twollo.web/

重要的是每个包都有 拥有分支/标签/主干/目录,但只有一个 整个"项目"的集合。

定义项目配置文件

在您真正使用构建包之前, 必须定义配置文件。项目配置文件 使用ini文件格式。每个项目配置文件 必须有一个 [build] 部分。的项目配置文件 Twollo应该是这样的:

# Twollo.cfg

[build]
name = Twollo  #this has nothing to do with the twollo package namespace
version = +
template = Twollo-Release-Template.cfg
package-index = https://build.twollo.com/eggs/
package-index-username = someuser
package-index-password = somepass
buildout-server = https://build.twollo.com/buildouts/
buildout-server-username = someuser
buildout-server-password = somepass
svn-repos = https://svn.twollo.com/svn/packages/
svn-repos-username = somesvnuser
svn-repos-password = somepass
packages = twollo.integration
           twollo.web
           twollo.rest
           twollo.utils

让我们检查一下 twolo.cfg

  • 名称 -这是项目的名称。它可以是任何你 与构成 项目。该名称将作为生成构建的一部分 配置文件。
  • 版本 -这是制作新版本时要使用的版本 的T他计划。版本号成为 生成的构建配置文件。
    • 使用 + 作为版本只会增加版本 已存在的版本中的项目数 发布。
  • 模板 -这是要用于的基本构建配置文件 所有部署。创建新的项目版本时, [版本] 部分将自动更新为 每个 twoollow.* 包的正确版本。更多关于 以后再说。
  • 标记布局 -从 平面 子文件夹中选择
  • flat 将在svn as/tags/package版本中创建标记 这是默认设置。
  • 子文件夹 将在svn as/tags/package/version中创建标记
  • 上传类型 -从 内部 设置中选择。
  • 内部 使用 低于标准。这是默认设置。 (实际上执行python setup.py sdist并上传结果)
  • setup.py 执行 python setup.py sdist register upload , 不执行任何其他操作,因为此命令应负责上载。
  • 包索引 -指向启用了WebDAV的Web的URL 为每个 twolow.* 包生成鸡蛋的服务器 应该上传。仅当上传类型为内部时用于上传。 还用于检查/获取软件包的现有版本。
  • 包索引用户名 -用于访问WebDAV的用户名 服务器< / >
  • 包索引密码 -用于访问WebDAV的密码 服务器< / >
  • 构建上传类型 -从 webdav local mypypi
      中选择
    • webdav 将生成的构建文件上载到指定的url 使用WebDAV协议构建服务器
    • 本地 只生成构建文件,不上载它们。 如果 构建服务器被给定,则构建文件将被复制到 文件夹。
    • mypypi 将生成的构建文件上载到 构建服务器。url应该指向mypypi上传页面。 (类似于http://yourhost/++projects++/" rel="nofollow">http://yourhost/++projects++/)
  • 构建服务器 -指向启用WebDAV的Web的URL 应上载生成的构建文件的服务器。 如果构建上传类型是本地的,则这是本地 文件系统。构建文件将复制到此文件夹。 如果没有给出,则在释放软件包后停止该过程。
  • 构建服务器用户名 -用于访问WebDAV的用户名 服务器< / >
  • 构建服务器密码 -用于访问WebDAV的密码 服务器< / >
  • svn repos -subversion存储库的url,其中 源代码有效,包括发布标记。
  • svn repos用户名 -url存储库的用户名。 使用命令行选项强制所有SVN操作 使用此凭据。 否则将使用缓存的身份验证。
  • SVN回购密码 -URL存储库的密码。
  • 哈希配置文件 -将基于文件内容的哈希添加到依赖配置 文件名。
  • 是项目的一部分包的列表。 这些是svn存储库中的包 应与H彼此。
  • 定义发布模板

    正如我们在上一节中看到的, twolo.cfg 引用一个文件 调用了Twollo release template.cfg。这只是一个基地建筑 配置。除此之外,我们还可以定义不同的配置 阶段和生产部分定义的数据。这样的部分可以在 作为附加(共享)变量的产品部署。对于Twollo项目, 可能是这样的:

    # Twollo-Release-Template.cfg
    
    [buildout]
    extends = http://download.zope.org/zope3.4/3.4.0/versions.cfg
    parts = test
    find-links = https://build.twollo.com/eggs/
    
    [test]
    recipe = zc.recipe.testrunner
    eggs = twollo.web
           twollo.integration
           twollo.utils
           twollo.rest
    
    [twollo-app]
    recipe = zc.zope3recipes:app
    servers = zserver
    site.zcml = <include package="twollo.web" file="app.zcml" />
    eggs = twollo.web
    
    [zope3]
    location =
    
    [stage]
    memcached = 127.0.0.1:11211
    
    [production]
    memcached = 10.0.0.1:11211
    

    当Twollo项目的新版本发布时,a [版本] 节将添加到此配置文件中,其中包含 更正 twoollow.* 固定版本。

    定义多个部署配置

    每次发布项目时,您可能希望生成不同的 为所有不同的部署构建配置文件 你可能拥有的环境。例如,您可能有三个 不同的环境:开发、质量保证和生产。这些是 称为变体。每个环境都可能需要应用程序 在不同的端口上运行,在不同的日志级别上运行,或者有其他 差异。

    我们可以通过添加 添加到 twolo.cfg 文件的部分:

    # Twollo.cfg
    
    [Development]
    template = Twollo-Instance-Template.cfg
    vars = stage
    port = 9080
    logdir = /opt/twollo/dev/logs
    install-dir = /opt/twollo/dev
    loglevel = debug
    cache-size = 1000
    
    [QA]
    template = Twollo-Instance-Template.cfg
    vars = stage
    port = 9082
    logdir = /opt/twollo/qa/logs
    install-dir = /opt/twollo/qa
    loglevel = info
    cache-size = 1000
    
    [Production]
    template = Twollo-Instance-Template.cfg
    vars = production
    port = 8080
    logdir = /var/log/twollo
    install-dir = /opt/twollo/
    loglevel = warn
    cache-size = 200000
    

    然后我们可以有一个单独的twolo instance template.cfg文件 使用python内置的字符串模板来访问 在 twolo.cfg 中设置。对于Twollo项目,可能如下所示:

    # Twollo-Instance-Template.cfg
    
    [buildout]
    parts += twollo
    directory = %(install-dir)s
    
    [database]
    recipe = zc.recipe.filestorage
    
    [twollo]
    recipe = zc.zope3recipes:instance
    application = twollo-app
    zope.conf =
    
      <product-config memcached>
        memcached %(memcached)s
      </product-config>
    
      <zodb>
        cache-size %(cache-size)s
        <filestorage>
          path ${database:path}
        </filestorage>
      </zodb>
    
      <server>
        type WSGI-HTTP
        address %(port)s
      </server>
    
      <eventlog>
        level %(loglevel)s
        <logfile>
          formatter zope.exceptions.log.Formatter
          path %(logdir)s/twollo.log
        </logfile>
      </eventlog>
    
      <accesslog>
        <logfile>
          level info
          path %(logdir)s/twollo-access.log
        </logfile>
      </accesslog>
    

    如您所见,twolo.cfg使用额外的vars(stage,production),其中 使在 发布模板并在实例模板中使用它们。注意,副作用 在python配置解析器中,您将继承 在通过(buildout)extends加载的模板中定义重复的节。

    发布项目

    一旦创建了所有必需的配置文件,就可以 发布你的第一个项目。这里是 构建包的位置 剧本开始播放了。第一次运行构建包时 脚本,您需要传入的唯一选项是配置 文件

    构建包脚本将提示您输入版本信息 关于它将作为 Twollo.cfg项目。你与脚本的第一次交互可能看起来 像这样:

    $ easy_install keas.build
    
    0

    下次发布时,您可以设置 生成包以自动猜测下一个版本 被释放。它首先查找所有的发布标签 找到一个给定包的最后修改版本 一个给定的包。如果给定包的任何代码被更改 自从上次发行以来,它会撞到最轻微的 版本号自动。如果没有发生变化,它将 选择最新的现有版本。

    您还可以使用 -d 标志使生成包不提示 在创建新版本之前。

    如果您需要从特定分支创建新版本,可以 使用 -b选项。例如,如果对 Twollo-1.x分支,我们可以使用下面的代码创建一个新版本 像这样的分支:

    $ easy_install keas.build
    
    1

    计算新包版本时,将对其进行版本控制 沿着1.x线,即使您已经创建了2.x版本,通过 正在分析分支的名称。

    在分支上使用 -n -d 时应注意结束语 版本号是你需要有包的版本 与分支版本匹配。 例如,有一个分支: 分支/twolo-1.9 将假设包如下 twolow.web-1.9.x 和twolow.utils-1.9.x 等等。 当从主干释放包时,您也应该注意到这一点。 很有可能你会在主干上驱动开发,然后在 稳定的。在这种情况下,分支上的包版本应保持内联。

    安装已发布的项目

    keas.build还附带了一个非常简单的安装脚本 可用于快速安装已发布项目的任何变体:

    $ easy_install keas.build
    
    2

    例如,要安装最新的qa版本的twolo项目, 您可以运行:

    < Buff行情> $install-u https://build.twolo.com/buildouts/ -p twolo-v qa–最新

    创建助手脚本

    有时记住所有命令行 选项是生成项目时需要通过的选项。 幸运的是,很容易创建助手脚本 一些默认设置。

    例如,要创建Build Twollo脚本,可以添加 以下是构建配置文件:

    $ easy_install keas.build
    
    3

    作为另一个例子,您可以创建一个install twolo dev脚本 自动安装最新的开发版本:

    $ easy_install keas.build
    
    4

    可能性是无穷的!

    脚注

    < COL/> < COL/> <正文> < > <表>
    [1] 请参见http://en.wikipedia.org/wiki/ini_file" rel="nofollow">http://en.wikipedia.org/wiki/ini_file
    < COL/> < COL/> <正文> < > <表>

    更改

    0.4.1(2013-11-28)

    • 错误修复:防止生成错误的构建选项键/值分隔符。生成 += 而不是用于构建部件选项的 += 。否则它 自BuildOut 2.0之后失败

    0.4.0(2013-11-24)

    • 功能:在部署模板部分实现了一个新的参数 vars 。这个 新的 vars 参数可用于定义发布模板部分。如果 定义后,生成过程将应用此部分中的所有参数,因为它们 将是项目部分的一部分。这允许继承一个 项目定义中的参数数量,而不是在 每个项目。这是有用的,如果你有一个阶段和许多生产变种 实例使用配置数据,就像数据库设置一样,您需要 分享它们。对于这样的用例,您可以简单地定义一个阶段和产品 部分并定义所有共享参数,并在 您的产品部署设置。参见index.txt中的memcached示例

      注意,这个新产品部署模板的vars参数可能有问题 对于现有的设置,如果您使用的vars参数的值与 节模板中定义的节名称。

    0.3.1(2013-09-25)

    • 改进:添加了默认包版本 避免对新软件包提出交互式问题

    0.3.0(2012-12-27)

    • 特点:增加了-i-独立分支选项。此选项将强制 检查最后一个版本是否来自我们所在的同一个分支 从中释放。这是要求如果你开发新一代软件 在独立于树干的树枝上。以前版本的 keas.build,其中只能将分支版本作为错误修复版本处理 也不确定我们是否混合了主干和分支版本。现在用 i选项我们强制所有发布的包都将被生成或重用 基于当前主干或分支(-B trunk,branch)
    • 为查找或跳过下一个版本添加了更多日志信息,这使得 看看发生了什么

    0.2.2(2011-08-29)

    • 改进:添加 当前日期时间 当前日期 当前时间 变量

    0.2.1(2011-04-07)

    • 修正rawconfigparser的用法,它通过使选项值 全部小写。

    0.2.0(2011-04-06)

    • 将版本提升到ZTK 1.1
    • 改进:将svn repo信息添加到项目配置文件中。 是的,我知道这个可以随时检查,但是添加这个可以节省很多时间。
    • 改进:添加选项hash配置文件

    0.1.8(2010-05-11)

    • 修正:不要用python setup.py注册
    • 修复:bump setuptools和zc.buildout版本
    • 修复:0.1.7 tar.gz已损坏

    0.1.7(2010-04-26)

    • 错误修复:依赖配置文件收集终止了版本pin 在主配置文件中
    • 改进:检查包版本时支持类似pypi的简单索引
    • 改进:检查相关配置,将所有配置上载到服务器。
    • 改进:添加 --强制版本 选项。
    • 改进:将版本添加到svn日志注释。使生活更轻松(至少 带乌龟vn)
    • 改进:增加选项。
    • 改进:将 --目录 选项添加到 安装

    0.1.6(2009-11-2)

    • 改进:在确定分支的发布版本时,支持 分支名称以.x结尾,如myproject-0.3.x中所示

    0.1.5(2009-10-16)

    • 改进:在安装时将用户名和密码添加到构建的url 获取.cfg文件的 希望BuildOut不会留下密码。
    • 改进(?)或者修复:删除部署中使用的Twisted依赖项 对于SSH
    • 改进:消除了对lxml的依赖。现在我们只用蟒蛇 内置XML库。
    • 改进:增加了构建上传类型选项。 有关详细信息,请参见文档
    • 错误修复:多行模板选项值在分析时崩溃
    • 错误修复:re不喜欢来自beautifulsoup的非文本参数
    • 改进:添加了要安装的 --超时选项
    • 改进:增加了mypypi buildout文件上传支持
    • 错误修复:恢复到签出完整的源代码树

    0.1.4(2009-10-01)

    • 错误修复:当-u选项缺少 尾随/
    • 错误修复:没有找到变体时,安装程序脚本将崩溃。
    • 改进:构建包将不再签出整个 分支只是用新版本更新setup.py文件 号码。只签出顶级目录。
    • 错误修复:当变量 配置缺少其模板所需的信息。现在 将打印一条有用的错误消息,并且不会上载任何文件 直到所有文件都成功创建。
    • 错误修复:在命令行上键入ctrl+c将不再导致 键盘中断要弹出的回溯。
    • 错误修复:运行安装程序时,如果buildout命令提示 用户输入后,安装程序将不再占用提示。

    0.1.3(2009-09-30)

    • 首次公开发行。

    0.1.1(内部)

    • 错误修复:如果指定的项目变量没有版本 生成后,构建脚本现在可以很好地退出,并具有可读性 错误信息。

    0.1.0(内部)

    • 初始版本。
    [2] 请参见http://en.wikipedia.org/wiki/webdav" rel="nofollow">http://en.wikipedia.org/wiki/webdav

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java soap在实现applicationContext后失败。xml   java为什么不能解析这个方法?   国际化java。util。MissingResourceException:找不到基名称的捆绑包   当使用SpringJDBC时,用java干净的方式外部化长(+20行sql)?   映射值中的java类型不匹配:应为组织。阿帕奇。hadoop。木卫一。可空写,接收组织。阿帕奇。hadoop。木卫一。文本   java组织。冬眠MappingException:无法确定抽象类表的类型   java如何从子类构造函数调用超类的私有构造函数?   将iBeacon主ID从Java类传递到Android Studio中的活动   与通配符匹配的java KeyValue参数   java用集合实例化多重映射?   java在单独的类中编辑和更新正在运行的实例变量   java Struts html:复选框查询   java日志中西里尔文日志显示不正确   使用apacheavro的javaavro阵列   CacheBuilder中的java NoSuchMethodError(checkState)