Commit file back to repository from build server in Visual Studio Team Services

时间:2016-04-15 11:00:33

标签: tfs continuous-integration azure-devops azure-pipelines

I'm currently setting up continuous integration using TFS/Visual Studio Team Services (was VS Online), and I'm using the Team Foundation Build 2015 tasks. So not the XAML builds.

I'm using it to build a Xamarin Android project, but that's pretty irreverent I guess,

The process should be like this:

  • After a check-in:
  • TFS should download the sources
  • TFS should increment the version number within AndroidManifest.xml
    • I've managed to do this by making a PowerShell script for this.
  • After the AndroidManifest.xml file is modified, it should be committed back into the TFS repository

Then the rest, build deploy into hockeyapp etc

The first steps are all configured, but I'm struggling with the commit part. How do I get TFS to commit the file? I don't really see any task suitable for it. I've tried using the Copy and Publish Build Artifacts Utility - But that did not seem to work, and I'm not even sure if that's the right utility

I'm using the default hosted build agent btw. Any help would be appreciated

1 个答案:

答案 0 :(得分:8)

警告

我想指出,在构建过程中检入更改可能会导致VSTS / TFS的某些功能无法正常工作。将工作项与签入,源和符号生成的关联,从构建到发布的更易处理以及与Test Manager的集成,远程调试,可能不会产生预期的结果,因为te build中记录的Changeset / commit可能与实际不匹配源。这可能会导致意想不到的有趣行为。

此外,如果在构建开始后已经提交/签入任何新更改,则可以在源代码管理中更新版本号,以查找在该版本下实际未发布的代码。

所以:首先,从构建过程中更改源代码被认为是一种不好的做法。

替代

有更好的方法,一种是使用构建版本(Build_BuildNumber或Build_BuildID变量)。或者,您可以使用task like GitVersion根据git存储库中的分支和标记生成语义版本。这样,您的构建将生成正确的版本号,并且如果多次构建相同的源,将增加修订。

我理解,但我仍然希望将代码作为构建的一部分进行检查

如果这些内容对您不起作用,并且您仍希望在构建过程中检查更改,则可以使用TFVC Build Tasks如果您正在使用TFVC或使用Git Build Tools将远程数据库添加到本地存储库,然后使用git命令行工具提交并将更改推送回存储库。

这些扩展需要安装TFS Update 2。但是您可以使用tfx commandlien工具推送单个构建任务。 For the TFVC tasks the process is explained here

在Mac上

在mac上,由于你正在使用TFVC,它会变得更难。我的TFVC任务利用TFS客户端对象模型和Powershell与TFS服务器进行通信。当您在构建环境中时,tf.exe工具甚至不能在Windows上工作,这就是我需要直接调用VersionControlServer对象的原因。鉴于我依赖这些技术,这些任务不会在Mac或Linux代理上运行。

您可以尝试查看Team explorer Everywhere X-platform commandline是否可以从构建代理(使用shell脚本)工作。我无法在真正的Mac上测试它。

考虑到项目的跨平台性质,我建议转移到Git,它集成到XCode和Android Studio中,使得更容易做本机UI或构建在本机库之上。

备选方案2

您可以设置一个构建,对代码进行必要的更改,然后检入修改后的代码。然后让(CI)构建运行Android,并使用修改后的代码构建Mac。