Continuous integration 利用竹子有效利用Performce工作空间

Continuous integration 利用竹子有效利用Performce工作空间,continuous-integration,perforce,bamboo,Continuous Integration,Perforce,Bamboo,我的雇主在我们的持续集成环境中使用Perforce和Bambol,我们的Perforce工作区一直存在问题:它们很难维护 我们的环境设置如下: 1台Performce服务器,100个仓库,每个仓库10个项目。有时项目使用来自多个站点的代码 开发人员为本地机器维护自己的工作区 工作空间是为竹子构建平面创建的。 竹子工作区仅包括构建项目所需的路径 由于Bambon和Performance的交互方式,单个构建计划通常有多个工作区。并行作业不能使用相同的工作区,因为竹将工作区根设置为与生成代理匹配

我的雇主在我们的持续集成环境中使用Perforce和Bambol,我们的Perforce工作区一直存在问题:它们很难维护

我们的环境设置如下:

  • 1台Performce服务器,100个仓库,每个仓库10个项目。有时项目使用来自多个站点的代码
  • 开发人员为本地机器维护自己的工作区
  • 工作空间是为竹子构建平面创建的。
    • 竹子工作区仅包括构建项目所需的路径
    • 由于Bambon和Performance的交互方式,单个构建计划通常有多个工作区。并行作业不能使用相同的工作区,因为竹将工作区根设置为与生成代理匹配
    • 构建计划分支也有自己的工作空间
每当开发人员想要向工作区添加位置时,他们都需要更新许多工作区。这很烦人,很容易搞砸


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

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

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

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

并行作业不能使用相同的工作空间,因为竹设置 与生成代理匹配的工作区根目录

他们可以使用相同的工作区,但有一个折衷办法——与构建时间(强制同步)相比,构建简单(单个工作区)

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

竹从仓库(建筑区域)同步客户规范。 等级库文件如下所示:

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/...
主机:****
描述:废话
Root:/some/default/ws/
altroot:D:/01/xml数据/build目录
D:/02/xml数据/生成目录
D:/03/xml数据/生成目录
选项:$yourOptions rmdir
提交:无提交
LineEnd:本地
视图:
//仓库///$wsName/depot/。。。
上述文件假定您有3个代理(编号1-3)

将$bambor-HOME/bambor.cfg.xml中的bambor代理上的BuildRoot设置为D://$agentNumber/xml data/build dir

构建执行p4客户机-i 构建代理将查找默认根,但未找到它,查找第一个altroot,再次未找到它,查找第二个altroot,找到它,然后。。。那么,你必须强制同步

(Perforce跟踪它在服务器上的db.have列表中提供的最新变更列表,如果构建的最新代理是#03,而现在它在#02上运行,那么您将只获得与上一个变更列表不同的文件),因此强制是唯一的答案

构建计划分支也有自己的工作空间


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

Streams将很好地工作。。。除了竹子不支持它们。我将我的Bambol构建计划配置为管理工作区,以便Bambol可以根据构建代理的配置设置工作区根。启用此选项后,Bambor将重写工作区规范并删除流条目。。。失败的目的(将流的更新传播到链接的工作区)。有两个选项:(1)修复Bambol(2)在触发器中添加一个表单,在Bambol删除流后立即重新添加它。