支持应用程序部署和安装的构建系统

p01.build的Python项目详细描述


这个包提供了一个基于使用zc.buildout的
包版本的产品构建、发布和部署系统。核心概念取自keas.build
,并提供相同的配置语法。主要区别在于,我们不会将安装脚本设置为"install",因为与popen配方(p01.recipe.setup:popen)使用的ubuntu(pycairo,python waf install)上的gnu install脚本调用存在冲突。此实现将提供
install脚本作为"deploy"入口点。名为deploy
的部署入口点已被删除,不受支持。使用salt或其他概念来调用服务器的部署方法。



==
readme
=


``p01.build``是快速创建新(egg)发行版的命令行工具。



sample
----

服务器:

-``p01.cdn`-css和javascript文件等cdn资源为了一致地管理这些
python包的生命周期和任意数量的部署配置:

-允许您定义一个项目,它是通常一起发布的
相互依赖的鸡蛋的集合。

-自动部署每个pa的新鸡蛋版本必要时打包。

-将新的egg上载到私有egg存储库(请参阅mpypi)。

-生成正确组合
egg的版本化构建配置文件。

-将构建配置文件上载到私有配置服务器。
(mypypi内置了支持这种上载)

-将依赖的构建配置文件上载到私有配置
服务器(通过检查extends=chain,mypypi支持这种上载)



installation
----


安装p01.build

您还可以安装p01的开发版本。build


签出代码:

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


运行引导脚本并构建::

$python bootstrap.py
$./bin/buildout



release
----


一旦有了可用的开发人员版本,就应该能够运行
"build package"脚本。(在*/bin/build package*中找到,开发者
安装::

$build package
用法:build package[选项]


选项:
-h,--帮助显示此帮助消息并退出
-c文件,--config file=file
项目的配置。
-q,--指定时安静,不显示消息。
-v,--详细指定时,创建调试信息。
-d,--使用默认值指定时,不需要用户输入,使用默认值。
-o,--offline模式设置时,不执行服务器命令。
-n,--下一个版本设置时,系统猜测下一个版本将生成。
-b分支,--use branch=branch
指定时,将始终使用此分支。
-i branchs--independent branchs=branch1 branch2,
如果指定,系统将从所有这些分支猜测下一个版本。如果
您从不同的分支释放,这一点很重要。它将防止从另一个分支释放的包被使用!!!!
--不上载设置时,生成的配置文件不会上载。r/>--不更新分支设置时,在创建发布后,分支不会用新版本进行更新。
-s path,--storage path=path
将生成的文件存储在该文件夹中,而不是存储在全局根目录中。这只是为了提供一个干净的设置,并防止放置所有生成的配置文件



当以
的顺序开发多个包时,通常需要将subversion存储库布置成这样:


svnroot/myserver/packages/
branch/
branch-0.x/

branch-1.x/
p01.cdn/
p01.core/
p01.web/

>p01.cdn-0.5.0/
>p01.core-0.5.0/
>p01.core-0.5.1/
>p01.web-0.5.0/
>p01.web-0.5.1/
>p01.web-0.5.1/

……
>trunk/
>p01.cdn/
>p01.core/
>p01.web/

>p01.cdn/
>p01.core/
>p01.web/


>要注意的重要的是,每个包装都有一个包d.core-0.5是的oes*没有自己的分支/标记/主干/目录,而是整个"项目"只有一个
集。




项目配置文件
使用ini[ini]文件格式。每个项目配置文件
都必须有一个"`[build]`"节。
myserver的项目配置文件如下所示:




myserver.cfg

[build]
name=myserver;这与包命名空间无关
version=+
template=release.cfg
tag layout=subfolder
upload type=setup.py
package index=https://pypi.projekt01.ch/private
package index username=username
package index password=password
buildout server=https://pypi.projekt01.ch/+projects++/
buildout server username=username
buildout server password=password
svn repos=https://svn.projekt01.ch/svn/myserver/packages/
svn repos username=somesv用户
svn repos password=somepass
svn trust server cert=1
packages=p01.cdn
p01.core
p01.web


-**name**-这是项目的名称。它可以是您想要的任何东西,与组成
项目的包无关。该名称将是生成buildout
配置文件的一部分。

-**版本**-这是在生成项目的新版本时使用的版本。版本号成为
生成的构建配置文件的文件名的一部分。

-使用**+**作为版本,只需从已发布的版本中增加项目的版本号即可。

-**模板**-这是用于
所有部署。创建新的项目版本时,
``[versions]``部分将自动更新为每个``p01.``包的
正确版本。有关
的详细信息,请稍候。

-**标记布局**-从"平面"或"子文件夹"中选择

-**平面**标记将在svn as/tags/package version中创建
这是默认设置。

-**子文件夹**标记将在svn as/tags/package/version中创建

-**上载类型**-从"内部"或"设置"中选择。py``

-**内部**使用
低于标准。这是默认设置。
(实际执行"python setup.py sdist"并上载结果)

-**setup.py**执行"python setup.py sdist register upload`,
不执行任何其他操作,因为此命令应负责上载。

-**upload format**-setup.py release format选项用作--formats参数。
从"zip"、"gztar"、"bztar"、"ztar"或"tar"中选择。注意,
只允许一个格式选项。

-**包索引**-指向启用了WebDAV[WebDAV]的Web服务器的URL,其中应上载为每个"p01.*"包生成的鸡蛋。仅当"上载类型"是"内部"时用于上载。
还用于检查/获取包的现有版本。

-**包索引用户名**-用于访问WebDAV的用户名
服务器

-**包索引密码**-用于访问WebDAV的密码

-**构建上载类型**-从中选择`` webdav``,``local``或``mypypi`

-**webdav**将生成的构建文件上载到具有webdav协议的
``buildout server``指定的url。

-**local**只生成构建文件,不上载它们。
如果给定了``buildout server``的构建文件将复制到该
文件夹。


-**mypypi**将生成的构建文件上传到
``buildout server``指定的url。url应该指向mypypi上载页。
(类似于http://yourhost/++projects++/)

-**构建服务器**-指向启用webdav的web的url
应该上载生成的构建文件的服务器。
如果"构建上载类型"是"本地",则这是本地
文件系统上的路径。构建文件将被复制到此文件夹中。
如果未给定,则在释放包后停止进程。

-**构建服务器用户名**-访问WebDAV的用户名

-**构建服务器密码**-访问WebDAV的密码

-**SVN repos**-子服务器的URL所有
源代码所在的ion存储库,包括释放标记。

-**svn repos username**-url存储库的用户名。
使用命令行选项``--force svnauth``强制所有svn操作
使用此凭据。
否则将使用缓存的身份验证。

-**svn repos password**-url存储库的密码。

-**svn trust server cert""-信任svn服务器证书。

-**hash config files**-将基于文件内容的哈希添加到从属配置文件名中。

-**packages**-项目的一部分包列表。
这些包位于svn存储库中。而且
应该相互结合发布。




定义一个发布模板
----


正如我们在上一节中看到的,*myserver.cfg*指的是一个名为*release.cfg*的文件。这只是一个基本的构建配置。除此之外,我们还可以定义stage和production部分中定义的不同配置数据。这些部分可以作为附加(共享)变量在产品部署中使用。对于myserver项目来说,这可能看起来像是
>这:





[buildout]
extextends=http://dowdownl下载,zope.org/zope3.4/3.4.0/versions.cfg
parts=test
parts=test
find links=https://pypi.projekt01.ch/privat


[test]
>recipe=zc.recipe.testruner
>egeggs=p01.cdn
>p01.core
>p01.core
>是的网站


[app]
recipe=zc.zope3recipe:app
>servers=zserver
site.zcml=<;include package="p01.web"file="app.zcml//>;
>鸡蛋=p01.web


[zope3]
location=



[stage]
[stage]
>memcached=127.0.0.0.0.1:11211




<生产



当myserver项目的新版本发布时,此配置文件中将添加一个``[versions]`
部分,并锁定所有
正确的``p01.``版本。




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


我们可以通过向*myserver.cfg*文件添加

myserver.cfg

[开发]
template=instance.cfg
vars=stage
port=9080
logdir=/opt/myserver/dev/logs
install dir=/opt/myserver/dev
loglevel=debug
cache size=1000

[stage]
template=instance.cfg
vars=stage
port=9082
log dir=/opt/myserver/stage/logs
install dir=/opt/myserver/stage
loglevel=info
cache size=1000

[production]
template=instance.cfg
vars=production
port=8080
logdir=/var/log/myserver
install dir=/opt/myserver/
loglevel=warn
cache size=200000

对于
myserver项目,可能如下所示:

=服务器应用程序
zope.conf=

<;产品配置memcached>;
memcached%(memcached)s
<;产品配置>;

<;zodb>;
缓存大小(缓存大小)s
<;文件存储>;
路径${数据库:路径}
<;文件存储>;
<;zodb>;

<;server>;
键入wsgi-http
地址%(端口)s
<;服务器>;

<;事件日志>;
级别%(日志级别)s
<;日志文件>;
格式化程序zope.exceptions.log.formatter
路径%(日志目录)s/server.log
<;logfile>;
<;eventlog>;

<;access log>;
<;logfile>;
level info
path%(logdir)s/server access.log
<;logfile>;
<;accesslog>;


(stage,production),这使得在发布模板中定义大量共享属性并在实例模板中使用它们变得非常简单。注意,python配置分析器的一个副作用是,您将继承通过(buildout)extends加载的模板中定义的
duplicated节中定义的参数。



文件,您可以制作您的第一个项目版本。这就是"build package"脚本的作用。第一次运行``build package`
脚本时,您需要传入的唯一选项是配置
文件。

您与脚本的第一次交互可能看起来像这样:


$build package-c myserver.cfg--quiet
"p01.cdn"的版本:1.0.0
版本p01.cdn-1.0.0不存在。
是否要创建它?是/否[是]:是
"p01.core"的版本:1.0.0
版本p01.core-1.0.0不存在。
是否要创建它?是/否[是]:是
"p01.web"的版本:1.0.0
版本p01.web-1.0.0不存在。
是否要创建它?是/否[是]:是

它首先查找给定包的所有release标签
,然后查找给定包的trunk
的最后更改版本。如果给定包的任何代码自上次发布后已更改,则它将自动碰撞最次要的版本号。如果没有发生任何更改,它将
选择最新的现有版本。

您还可以在创建新版本之前使用`-d``标志使``build package``不提示


如果您需要从特定分支创建新版本,则可以
使用`-b`选项。例如,如果对
myserver-1.x分支进行了错误修复,我们可以使用此
分支中的代码创建一个新版本,如下所示:


$build package-c myserver.cfg-nb myserver-1.x


计算新的包版本时,它们将沿着1进行版本控制。x行,即使您已经创建了2.x版本,也可以通过分析分支的名称来实现。


ng一个分支:``branchs/myserver-1.9``将假设包类似于
``p01.core-1.9.x``和``p01.web-1.9.x``等等。
当从主干释放包时,您也应该意识到这一点。
很可能您将在主干上驱动开发,并为一个
稳定的分支。在这种情况下,分支上的包版本应该保持内联。



install a released project
/>$deploy--help
用法:deploy[options]

options:
-h,--help显示此帮助消息并退出
-u url,--url=url可以找到发行版的基url。
-p project,--project=project
proje的名称要安装的CT。
-v variant,--variant=variant
要安装的项目的变体。
-v version,--version=version
要安装的项目的版本。
--directory=folder override installation tar获取文件夹
-l,--最新-指定时,将选择最新版本。
--username=用户访问站点所需的用户名。
--password=密码访问站点所需的密码。
-b path,--buildout path=path
生成可执行文件的路径。
--指定时安静,不显示任何消息。
--详细指定时,创建调试信息。
--超时=传递给生成的超时套接字超时。

stage版本的"myserver"项目,
您将运行:

$deploy-u https://pypi.projekt01.ch/+projects++/-p myserver-v stage--latest




选项是生成项目时需要传递的。
幸运的是,创建助手脚本非常容易,只需为您设置一些默认值即可。

例如,要创建Build MyServer脚本,您可以将下面的
添加到Buildout配置文件:

[uploads]
recipe=p01.recipe.setup:mkdir
path=${buildout:directory}/parts/uploads

[build myserver]
recipe=zc.recipe.egg
eggs=p01.build
scripts=build myserver
initialization=
sys.argv[1:1]=['-c','myserver.cfg',
'-o','${buildout:directory}/parts/uploads']



脚注[ini]见http://en.wikipedia.org/wiki/ini_file
。网络达沃斯:见http://en.wikipedia.org/wiki/wiki/webdav





==


=

=
==

<0.7.1(2018-09-04)
----
>

































-错误修复:调整beautifulsoup dependency,切换到beautifulsoup4



0.6.0(2018-02-10)
----


-功能:为build zip或tar.gz版本文件添加了uploadformat生成选项

项目设置文件。使用"zip"、"gztar"、"bztar"、"ztar"或
"tar"中的一个。注意,只允许有一个格式选项。



0.5.1(2015-08-26)
----


-feature:添加了选项-s,--存储路径,它定义了一个目录,在将创建的文件上载到pypi、webdav等之前,我们将在该目录中存储这些文件。这将防止
所有文件都被生成。更新到包根目录中。

-清除代码,删除pkg_资源。parse_version不推荐消息。
暂时移植parse_version方法。

-删除了p01/build/install.py并将代码移到p01/build/deploy.py。切换要部署的
入口点。py



>0.5.0(2015-04-15)
---------

-bugfix:按原样分析给定的构建部件内容,只有rstrip继续
行。这允许在脚本内容等部分中使用任何内容。
无需任何有意的麻烦。parse概念与zc.buildout>;2.0中使用的


-这个包提供了一个基于使用zc.buildout的包版本的产品构建、发布和安装系统。核心概念取自
keas.build,并提供相同的配置语法。主要区别是我们没有将安装脚本设置为"install",因为
与popen配方(p01.recipe.setup:popen)使用的ubuntu(pycairo,python waf
install)上的gnu install脚本调用有冲突。此实现
将提供安装脚本作为"deploy"入口点。您只需在服务器上安装带有"easy_install p01.build"的部署脚本即可。
有关详细信息,请参阅p01/build/readme.txt。

-keas.build 0.4.1的初始分支

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

推荐PyPI第三方库


热门话题
java如何通过jamod读取控制器的输入状态?   java Back bean方法在使用两个h的单一表单时未调用:selectonemenus和command button   mockitojava中的单元测试Mock继承方法   java在不传递到构造函数的情况下,将一个类的实例使用到另一个类中的最佳方法是什么   java Spring MVC:如何通过API在Dozer的toplevel字段中允许空值?   java hibernate到MSSQL服务器的连接被拒绝:连接   java动态调用现有变量   在java中扩展多个类的泛型   java使用JNA Ptrace获取linux中外部进程的信息?   eclipse获取Java项目中所有构建错误的最快方法是什么?   java将动态数组拆分为多个数组   java安卓:将json保存到sqlite   java获取最近时间Android   java如何为多对多关联编写HQL查询?   java Docker compose for mysql和spring应用程序拒绝访问   java查找数组(如果它是另一个数组的子集)   java如何在另一个具有相同数据类型参数的泛型类(或接口)中使用泛型类(或接口),而无需强制转换   Apache POI java。lang.NoClassDefFoundError:org/apache/commons/compress/utils/InputStreamStatistics   java使用Jackson将JSON反序列化为异构元素列表   使用MapReduce实现java规范化