One of my TeamCity v7.0 build projects relies on using a diff between the current development branch and the master branch to determine what needs to be run. I've written a small script that uses something like:
git diff origin/master..origin/QA --name-only --diff-filter=AM | DoSomethingWithThoseFiles
Unfortunately, the build log indicates that git diff
is not working. When I go into the buildAgent/work directory for this project, I see that there is no .git
folder, so it cannot perform the git operations required.
I've put teamcity.git.use.local.mirrors=true
in the buildAgent.properties
file as mentioned at TW-15873, but that does not seem to help in any way.
Is there anything I can do to get the list of files changed between two branches in a script for my build step?
Try changing the VCS checkout mode to "Always checkout files on agent" as documented here. That should give the build script access to the .git folder.
@Mike Two's answer is correct, one needs to configure the VCS root to use Checkout mode Automatically on Agent -not- on the server. The TC docs do not mention that this required setting is hidden by default as 'advanced'. So here is a picture of what to look for.
FYI, My specific VS2013 Solution step error was from MSBuild, as below. I am using the latest TeamCity Enterprise 9.0 EAP (build 31963).
[PreBuildEvent] Exec
[14:21:55][Exec] git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\MYPROJECT\bin\Debug\version.txt"
[14:21:55][Exec] fatal: Not a git repository (or any of the parent directories): .git
[14:21:55][Exec] C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1131, 5): error MSB3073: The command "git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\Higgens\bin\Debug\version.txt"" exited with code 128.
[14:21:55]
//edit; I didn't know how to add this to a comment.
来源:https://stackoverflow.com/questions/11632624/using-git-commands-in-a-teamcity-build-step