通过 Bamboo 有效地使用 Perforce 工作空间
Using Perforce workspaces effectively with Bamboo
我的雇主在我们的持续集成环境中使用 Perforce 和 Bamboo,我们在 Perforce 工作空间方面一直存在一个问题:维护起来很麻烦!
我们的环境是这样设置的:
- 1 台 Perforce 服务器,100 个 depot,每个 depot 10 个项目。有时项目使用来自多个软件仓库的代码。
- 开发人员为其本地计算机维护自己的工作区。
- 工作区是为 Bamboo 构建计划创建的。
- Bamboo 工作区仅包含构建项目所需的路径。
- 由于 Bamboo 和 Perforce 的交互方式,一个构建计划通常有多个工作区。并行作业不能使用相同的工作区,因为 Bamboo 设置工作区根目录以匹配构建代理。
- 构建计划分支也有自己的工作空间。
任何时候开发人员想要将一个位置添加到他们需要更新许多工作区的工作区。这很烦人,而且很容易搞砸。
有什么办法可以减少工作区的数量吗?我们是否可以改变构建事物的方式以使维护更容易?
最简单的解决方案是使用流,它本质上是动态工作区模板。
一个流定义了一组库路径,一个工作空间可以链接到一个流而不是有一个手动指定的视图。更新流时,链接到它的所有工作区都会立即更新以匹配。因此,如果您的项目被定义为流,则更新项目的开发人员将触发指向同一流的所有构建工作区中的自动更新。
手动替代方法是为每个项目指定一个主客户端工作区用作模板,并使用 "p4 client -t" 命令复制其视图——诀窍是这不会自动发生,因为它适用于流工作区,因此您可能希望在构建系统上设置自己的自动化以确保其工作区是最新的。
Parallel jobs cannot use the same workspace, since Bamboo sets the
workspace root to match the build agent.
他们可以使用相同的工作空间,但需要权衡 - 与构建时间(强制同步)相比,构建简单性(单一工作空间)。
一个'build simplicity'解决方案(这似乎是你所要求的)
Bamboo 从仓库(构建区域)同步客户端规范。
规格文件看起来像:
Host: **<leaveThisBlank>**
Description: Blah
Root: /some/default/ws/<wsName>
AltRoots: D:/01/xml-data/build-dir
D:/02/xml-data/build-dir
D:/03/xml-data/build-dir
Options: $yourOptions rmdir
SubmitOptions: nosubmitunchanged
LineEnd: local
View:
//depot/... //$wsName/depot/...
以上文件假定您有 3 个代理(编号 1-3)
将$BAMBOO-HOME/bamboo.cfg.xml中bamboo代理的BuildRoot设置为D:/$agentNumber/xml-data/build-dir
构建执行 p4 客户端 -i < /path/to/spec/file
构建代理将查找默认根目录,找不到,查找第一个 altroot,再次找不到,查找第二个 altroot,找到它然后......好吧,然后你就会有强制同步。
(Perforce 跟踪它在服务器上的 db.have 列表中提供的最新更改列表,如果构建的最新代理是 #03,现在它是 #02 上的 运行 ,你只会得到最后一个更改列表#) 之间不同的文件,所以 FORCE 是唯一的答案。
Build plan branches also get their own workspaces.
他们的 bamboo key 不同,所以他们会在 D:/$agentNumber/xml-data/build-dir/$PROJECT-(branch)PLAN-JOB
的不同子目录中
我的雇主在我们的持续集成环境中使用 Perforce 和 Bamboo,我们在 Perforce 工作空间方面一直存在一个问题:维护起来很麻烦!
我们的环境是这样设置的:
- 1 台 Perforce 服务器,100 个 depot,每个 depot 10 个项目。有时项目使用来自多个软件仓库的代码。
- 开发人员为其本地计算机维护自己的工作区。
- 工作区是为 Bamboo 构建计划创建的。
- Bamboo 工作区仅包含构建项目所需的路径。
- 由于 Bamboo 和 Perforce 的交互方式,一个构建计划通常有多个工作区。并行作业不能使用相同的工作区,因为 Bamboo 设置工作区根目录以匹配构建代理。
- 构建计划分支也有自己的工作空间。
任何时候开发人员想要将一个位置添加到他们需要更新许多工作区的工作区。这很烦人,而且很容易搞砸。
有什么办法可以减少工作区的数量吗?我们是否可以改变构建事物的方式以使维护更容易?
最简单的解决方案是使用流,它本质上是动态工作区模板。
一个流定义了一组库路径,一个工作空间可以链接到一个流而不是有一个手动指定的视图。更新流时,链接到它的所有工作区都会立即更新以匹配。因此,如果您的项目被定义为流,则更新项目的开发人员将触发指向同一流的所有构建工作区中的自动更新。
手动替代方法是为每个项目指定一个主客户端工作区用作模板,并使用 "p4 client -t" 命令复制其视图——诀窍是这不会自动发生,因为它适用于流工作区,因此您可能希望在构建系统上设置自己的自动化以确保其工作区是最新的。
Parallel jobs cannot use the same workspace, since Bamboo sets the workspace root to match the build agent.
他们可以使用相同的工作空间,但需要权衡 - 与构建时间(强制同步)相比,构建简单性(单一工作空间)。
一个'build simplicity'解决方案(这似乎是你所要求的)
Bamboo 从仓库(构建区域)同步客户端规范。 规格文件看起来像:
Host: **<leaveThisBlank>**
Description: Blah
Root: /some/default/ws/<wsName>
AltRoots: D:/01/xml-data/build-dir
D:/02/xml-data/build-dir
D:/03/xml-data/build-dir
Options: $yourOptions rmdir
SubmitOptions: nosubmitunchanged
LineEnd: local
View:
//depot/... //$wsName/depot/...
以上文件假定您有 3 个代理(编号 1-3)
将$BAMBOO-HOME/bamboo.cfg.xml中bamboo代理的BuildRoot设置为D:/$agentNumber/xml-data/build-dir
构建执行 p4 客户端 -i < /path/to/spec/file
构建代理将查找默认根目录,找不到,查找第一个 altroot,再次找不到,查找第二个 altroot,找到它然后......好吧,然后你就会有强制同步。
(Perforce 跟踪它在服务器上的 db.have 列表中提供的最新更改列表,如果构建的最新代理是 #03,现在它是 #02 上的 运行 ,你只会得到最后一个更改列表#) 之间不同的文件,所以 FORCE 是唯一的答案。
Build plan branches also get their own workspaces.
他们的 bamboo key 不同,所以他们会在 D:/$agentNumber/xml-data/build-dir/$PROJECT-(branch)PLAN-JOB
的不同子目录中