jeremy_sg wrote:It actually does matter if the command line tool is running as a real user or the system user. The client needs to write cache files to its application data directory.
Ah ha! And, in retrospect, I should have thought of this, given that part of the installation for the product was to first log onto the server locally as the account which you planned to use for the Vault service. Gotcha.
jeremy_sg wrote:Do you see more information in the CC.net log file?
Yes, but as it turns out, I have a problem totally unrelated to Vault (which I doubt surprises you
), but Vault just happened to be the first step in the process, so it "barfed" first. Perhaps you have some insight, given your work with CCnet?
I have the locations of my various CLI tools (so far that's Vault, NAnt & FxCop) in the system's PATH variable. I can run any or all of these from the command window without issue and when I dump the PATH value, it contains the values I expect.
The problem, as it turns out, is that when I use the CCnet service and I do not use a FQ path to my EXEs (Vault, NAnt or FxCop), it throws the "can't find your program" embolism. This is the case even when I enable "interact with desktop" or set the CCnet service to run as the same user that I used for my Vault service. Should a service have access to the system PATH? Any ideas?
jeremy_sg wrote:Vault is already fully supported in CC.net.
You are correct, of course. I should have been more specific. I am using that CCnet task to check for version changes. What I was talking about was a task (either for CCnet, NAnt or both) that would take care of extracting the files out of Vault once a change was discovered and exporting XML that CCnet could merge into its report at the end.
jeremy_sg wrote:Also, I'm working on documenting everything that needs to be done to set up Vault and continuous integration, but I have to squeeze it in around coding for 3.1.
What? You have more than one task! You should quit.
Here are the settings I am using, in case it's of value to you or someone else. Or maybe you'll see somewhere that I'm going wrong.
In the ccnet.config file, I have the following:
Code: Select all
<nant>
<executable>nant.exe</executable>
<buildArgs>-find -D:vault.path=$/Customer/Project -D:vault.repository=ClientProjects -D:solution.name=TheProjectSolutionFile</buildArgs>
<nologo>true</nologo>
<buildTimeout>300000</buildTimeout>
</nant>
In the NAnt.exe.config (which is global to all builds), I have the following:
Code: Select all
<properties>
<!-- properties defined here are accessible to all build files -->
<!-- <property name="foo" value = "bar" readonly="false" /> -->
<property name="vault.client" value="vault.exe" readonly="true" />
<property name="vault.host" value="devbuild.mycompany.com" readonly="true" />
<property name="vault.user" value="AD_User" readonly="true" />
<property name="vault.password" value="UserPwd" readonly="true" />
<property name="vault.cmdline" value="-host ${vault.host} -username ${vault.user} -password ${vault.password} -makereadonly -merge overwrite -setfiletime checkin -performdeletions removeworkingcopy" readonly="true" />
</properties>
In the NAnt default.build (which is in a top-level directory and the default build file if the project doesn't have one of its own), I have the following:
Code: Select all
<target name="update">
<exec program="${vault.client}" failonerror="true" timeout="300000"
commandline="GET ${vault.path} -repository ${vault.repository} -destpath ${ccnet.working.directory} ${vault.cmdline}" />
</target>