我们有一个团队城,其构建配置为“Build(Trunk)”和“Deploy CI(Trunk)”。
“构建(中继)”具有VCS触发器“在检测到VCS签入后触发构建”,其目标是构建用于部署的程序集。
“部署CI(主干)”具有完成构建触发器“等待成功构建:构建(主干)”并依赖于“构建(主干)”选项“在同一代理上运行构建”
有时候“Build(Trunk)”成功,dll就在那里(有一个构建步骤可以检查)和“Deploy(Trunk)”失败,因为它缺少已经构建的部署的一些dll(和选中)。
我最终在“部署(中继)”中出错 [MSBuild.ExtensionPack.Framework.Assembly] D:\ TeamCity \ buildAgent \ work \ d11b43f69b1be1cb \ Source \ Product \ Build.xml(191,9):找不到文件:D:\ TeamCity \ buildAgent \ work \ d11b43f69b1be1cb \ Source \产物\输出\推出\应用\服务器\ BIN \ Product.Server.dll
dll位于“Build(Trunk)”的末尾,但在“Deploy(trunk)”中缺少某些内容。另一个构建配置(单元测试)也会出现同样的问题。
当发生这种情况时,我通常运行Build(Trunk)机智“在构建之前清理checkout目录中的所有文件”并且它可以工作。我们目前正在使用TeamCity 10,但它发生在TeamCity 9上。
我不知道如何确定根本原因,并希望就此提出建议。
答案 0 :(得分:0)
您需要设置第一个构建配置,以将创建的工件发布到公共"工件"目录,然后在部署构建配置中创建快照依赖项,该构建将在创建工件后运行。在第二个构建配置中,访问公共位置中的工件。
答案 1 :(得分:0)
我想通了(感谢方向)。基本上它是快照依赖和多个触发器的麻烦。部署必须具有所需的正确版本的快照依赖关系。如果Build再次运行(它具有独立的部署触发器:build on new revision),则在运行前者的部署之前(单独的触发器:构建完成时),Deploy会检测它并执行VCS的干净检查:
[16:26:52]:将执行干净的结账。原因:代理上的项目来源比请求的更新
但是干净的结账将删除已经在结账目录中的dll,因此它们不会被部署。
示例(为什么"部署#4257"失败) - 只有一个代理:
[16:17:25] Build#4257被触发,因为SVN有新的提交,构建已经开始 [16:21:05]由于新的提交,Build#4258被触发,但只有一个代理可以构建,所以构建现在等待。
[16:22:39] Build#4257完成。
[16:22:39] Build#4258开始,因为代理现在是免费的 [16:22:45]部署#4257被触发,因为Build#4257已经完成,但无法启动,因为Build#4258现在正在运行。
[16:26:51]构建#4258完成。
[16:26:51]部署#4257启动,但检测到快照中的版本比预期更新。根据它的触发器,应该从Build#4257进行修订,而是从Build#4258进行修订。它将在运行其构建步骤之前执行快照的清理检查,并且已删除构建的dll(来自构建#4258的错误的新dll)。