使用Perforce工作区有效地使用Bamboo

时间:2015-06-05 12:53:09

标签: continuous-integration perforce bamboo

我的雇主在我们的持续集成环境中使用Perforce和Bamboo,我们在Perforce工作区中遇到了持续存在的问题:维护它们很难!

我们的环境设置如下:

  • 1个Perforce服务器,100个软件仓库,每个软件仓库10个项目。有时项目使用来自多个仓库的代码。
  • 开发人员为本地计算机维护自己的工作空间。
  • 为Bamboo构建计划创建工作区。
    • Bamboo工作区仅包含构建项目所需的路径。
    • 由于Bamboo和Perforce的交互方式,单个构建计划通常具有多个工作区。并行作业不能使用相同的工作空间,因为Bamboo将工作空间根设置为与构建代理匹配。
    • 构建计划分支也可以获得自己的工作区。

任何时候开发人员都希望向工作区添加位置,他们需要更新许多工作区。这很麻烦,容易搞砸。

有没有办法减少工作空间的数量?我们可以对构建事物的方式进行更改以使维护更容易吗?

2 个答案:

答案 0 :(得分:2)

最简单的解决方案是使用流,这些流本质上是动态工作空间模板。

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

手动替代方法是为每个项目指定一个主客户端工作区以用作模板,并使用" p4客户端-t"复制其视图的命令 - 诀窍在于它不会像流工作区那样自动发生,因此您可能希望在构建系统上设置自己的自动化以确保其工作区是最新的。

答案 1 :(得分:0)

  

并行作业不能使用相同的工作区,因为Bamboo设置了   工作区根目录以匹配构建代理。

他们可以使用相同的工作空间,但是需要权衡-与构建时间(强制同步)相比,构建简单性(单个工作空间)。

“构建简单性”解决方案(这似乎是您要的)

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

构建代理将寻找默认根目录,找不到它,寻找第一个altroot,再次找不到它,寻找第二个altroot,找到它,然后……好吧,那么您必须强制同步。

(Perforce跟踪服务器上的db.have列表中提供的最新更改列表,如果该构建的最新代理是#03,而现在它在#02上运行,则您只会获取文件在最后一个变更列表中#有所不同),因此,FORCE是唯一的答案。

  

构建计划分支也拥有自己的工作区。

他们的竹键是不同的,因此它们将位于D:/ $ agentNumber / xml-data / build-dir / $ PROJECT-(branch)PLAN-JOB的子目录中