通过 Bamboo 有效地使用 Perforce 工作空间

Using Perforce workspaces effectively with Bamboo

我的雇主在我们的持续集成环境中使用 Perforce 和 Bamboo,我们在 Perforce 工作空间方面一直存在一个问题:维护起来很麻烦!

我们的环境是这样设置的:

任何时候开发人员想要将一个位置添加到他们需要更新许多工作区的工作区。这很烦人,而且很容易搞砸。

有什么办法可以减少工作区的数量吗?我们是否可以改变构建事物的方式以使维护更容易?

最简单的解决方案是使用流,它本质上是动态工作区模板。

一个流定义了一组库路径,一个工作空间可以链接到一个流而不是有一个手动指定的视图。更新流时,链接到它的所有工作区都会立即更新以匹配。因此,如果您的项目被定义为流,则更新项目的开发人员将触发指向同一流的所有构建工作区中的自动更新。

手动替代方法是为每个项目指定一个主客户端工作区用作模板,并使用 "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

的不同子目录中