我有一个Azure网站连接到BitBucket进行部署。该站点知道部署MyProject repo ..
但是,该repo中的解决方案文件还引用了来自另一个名为SharedLibs的repo(也在BitBucket上)的另外两个.csproj。在SharedLibs repo内部有大约10个库,MyProject解决方案文件引用了其中的2个--DBAccess csproj和ExcelFileMaker csproj。我将SharedLibs克隆到MyProject的对等文件夹的方式意味着MyProject.csproj引用了“.... \ SharedLibs \ DBAccess \ DBAccess.csproj”和ExcelFileMaker的类似路径
+- MyProject //on bitbucket in a repo called 'MyProject'
| +- MyProject.csproj //references DBAccess.csproj and ExcelFileMaker.csproj
|
+- SharedLibs //on bitbucket in a repo called 'SharedLibs'
+- DBAccess
| +- DBAccess.csproj
|
+- ExcelFileMaker
+-ExcelFileMaker.csproj
Azure不部署MyProject,因为当它从bitbucket中拉出MyProject后,它会尝试通过部署位置中的相对路径访问这两个不存在的目录DBAccess和ExcelFilemaker
这似乎是使用子回购的情况。我的理解是,在mercurial中,子仓库是一种“链接仓库”,因此mercurial每次从MyProject仓库获取时都知道它还必须从SharedLibs仓库中提取最新代码。
..事情是我无法让子回购与Azure一起工作..我不知道如何让Azure在部署时拉出N个回购的内容
到目前为止,我发现使其工作的唯一方法是将库从共享中取出并直接放在我的项目下(直接复制文件,然后将它们添加到MyProject仓库的源代码控制中,如以及在SharedLibs repo中有源代码控制下的副本。这不太理想,因为这意味着必须使用手动差异将对SharedLibs repo内项目的更改复制到MyProject正在使用的少数lib的重复代码库中
我确信这个问题必须已经解决,因为代码重用和模块化是大多数编码人员的首要任务。有人可以告诉我如何在Azure上完成这项工作吗?
答案 0 :(得分:1)
您可以创建自定义部署脚本[1],然后添加一个步骤以将这些存储库拉下来,并在构建步骤发生之前将文件复制到源目录。
在部署脚本中,您可以访问一些可用于复制文件的环境变量[2]。
[1] http://blog.amitapple.com/post/38417491924/azurewebsitecustomdeploymentpart1/#.VBtuFvldUZw [2] https://github.com/projectkudu/kudu/wiki/Deployment-hooks
答案 1 :(得分:0)
为了解决这个问题,我们最终彻底解决了这个问题,拿走了所有这些库并将它们制作成NuGet包并将它们托管在我们的私有服务器上。 Azure现在将在构建主项目时恢复它们,我们可以独立于主项目更新库并随意构建