TeamCity Agent has "lost" its environment path - continuous-integration

I've been happily working with a TeamCity Build server for a while now, but all of a sudden things went wrong...
It seems the build agent no longer has anything in it's path. So, for example, if my build script (I use NANT) calls xcopy to copy files, this has suddenly started failing because xcopy can not be found - so the build will fail unless I change it to c:\windows\system32\xcopy.
I can manually browse to the build agent folder and run the nant script from there, and it all works (because the path is set correctly).
I've not upgraded TeamCity, so I'm baffled as to why this could have borked. I don't override anything in the environment parameters of the builds in TeamCity. I've not changed anything in the build settings either. The only thing I've done to this PC that contains the build agent is to install the RC of Visual Studio 2012.
Any ideas?
EDIT
Further investigation - I've found the agent settings in TeamCity - in there the environment variable called "path" is just set to C:\Program Files (x86)\Nmap (Recently installed). This is odd and quite possibly the cause of the issue. I just need to work out how to make TeamCity revert to the "real" path.

Figured it out - this may well be useful to someone else...
When I installed Nmap recently, it added a new "User Variable" for my account, which it called "path" and set to C:\Program Files (x86)\Nmap. This overrides the "System Variable" called path, and was causing all the havoc. Removed the user variable, and all working.

Related

Maven isn't installing properly

I've tried everything I could find on this topic, yet I'm not able to install Maven.
I'm at the following point:
I have java installed
I unzipped the files from the apache website
I have set up environment variables and added requirement parameters to the path (had to use the escape character in the path, because of the space in Program Files folder name: C:\Program^ Files\apache-maven-3.6.3)
what could be the problem?
cmd
From the attached image all requirements are OK. Try one of those two solutions:
Close the CMD window and reopen it (if you didn't this already).
Restart your computer in in order to apply the environment variables you've just added.

Change jenkins directory path in OSX. Settings JENKINS_HOME did not work

I have an old jenkins installation in an OS X (version 10.11.3). Today I tried to access it and it showed a welcome message without any jobs or plugins installed.
Apparently directory path its pointing to /Users/my_user/.jenkins and after some search for my old jobs they are located at /Users/Shared/Jenkins/Home/jobs.
I tried settings JENKINS_HOME to /Users/Shared/Jenkins/Home and restarting jenkins but without any success. I also search around, but nothing seems to be changing the home directory of jenkins.
Any tip?

Jenkins is not picking up Environment variable to be used in windows batch script

I am building a visual studio solution containing number of project. I wanted to disable multiprocess build, so , i tried setting an enviroment variable CL to /MP1. But it didn't worked in Jenkins while working in running the batch script for building solution using command line.
Good morning,
Log to your Jenkins server, and stop the Jenkins from the command line. While doing this, open your web-browser and refresh the Jenkins webpage to make sure it stopped(it will take around 5 seconds to stop the service). Then start again from the command line, it will update the variable. I did yesterday, to run my unit tests. It should work.
To set environment variables for individual projects, use the checkbox 'Prepare an environment for the run' and set what environment variables you want in the format 'ENV=value' in the Properties content box.
Otherwise, all I can suggest is that you haven;t restarted the Jenkins service after setting your variable in Windows.
You can also used the EnvInject plugin, it works well.
https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin

Syntax: Setting the environment variables in Visual Studio 2008

I have been trying to add some environment variables in the Visual Studio 2008 for debugging purpose.
This is because I got this warning:
Warning The following environment variables were not found:
$(DEV_PATH)
$(APPFRAMEWORK_INC)
Here's what I did:
I went to Project > Properties > Configuration Properties > Debugging > Environment
And I have tried adding the following (one by one):
DEV_PATH="\ProjectName\source\"
"DEV_PATH=\ProjectName\source\"
$(DEV_PATH)="\ProjectName\source\"
"$(DEV_PATH)=\ProjectName\source\"
Because this is the path I need to set.
But unfortunately it does not work.
What exactly is the syntax?
As per the link: http://msdn.microsoft.com/en-us/library/ms173406.aspx, it is:
DEV_PATH=\ProjectName\source
But, I need to add multiple such environment variables; so, what must be the separator?
Also, please don't tell me that I can right-click on "My Computer" and modify the environment variables there; I want these environment variables only temporarily for this workspace specifically.
I have written a script that looks like:
set DEV_PATH=\ProjectName\source
set APPFRAMEWORK_INC=\ProjectName\app\framework\inc
And I run the script in a command console before launching Visual Studio.
Hence, the environment variables are temporary, as they are lost as soon as the console and Visual Studio windows are closed.
I have found that this can happen if you have a pending Windows Update. Rebooting seems to fix the problem, as then the Update gets a chance to be applied.

Command copy exited with code 4 when building - Visual Studio restart solves it

Every now and then when I build my solution here (with 7 projects in it) I get the dreaded 'Command copy exited with code 4' error, in Visual Studio 2010 Premium ed.
This is because of the post-build event not being able to go through.
Here's what solves the problem, temporarily
Sometimes: A restart of Visual Studio and I'm able to build the solution
Sometimes: Both a restart of Visual Studio and my file manager of choice (Q-Dir 4.37) solves it.
Here's what the post-build event looks like:
xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y
When you get the command copy exited with code [insert value] error, it's normally because of the following:
read / write permissions
missing files
wrong directories
However - obviously at times when I build the solution, there's no problem.
FYI, I uninstalled ReSharper 5.1.1 two weeks ago and Visual Studio's been giving me some errors since then (among them not being able to debug). I re-installed Visual Studio and it's working better since then, but still get this problem. Could it have to do with some ReSharper stuff being somewhere?
Have you had the same problem and solved it? Or do you have any possible solution to it?
While /C may ignore errors, it might not be the real solution as there could be files that MUST be copied in order for the build to be successful.
The most common issue is the missing quotes around the pre-defined command tags (such as $TargetDir). When one creates various branches and paths in code or TFS, there is a very high chance for this to occur.
Sometimes if the file is read only, it will cause issues too. Add the /R option to allow read only files to be copied over. You can find list of available options at:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true
Another possible issue is that the underlying folder cannot be accessed. If so, trying performing "start xcopy" instead of "xcopy". This will open another command window but with admin priveleges.
I've invariably found this to be a file locking issue. Code 4 is Cannot Access File. One partial solution I found is to use the /C option for xcopy (which continues on error). Not really a solution but mostly it has stopped my builds from failing.
Another solution which only works on 32 bit is to use the unlocker tool to release the windows handles on the file before the copy.
Edit: I've just realised that it works under 64 bits too.
I crossed the same error, but it is not due to the file is locked, but the file is missing.
The reason why VS tried to copy an not existing file, is because of the Post-build event command.
After I cleared that, problem solved.
UPDATE:
As #rhughes commented:
The real issue is how to get the command here to work, rather than to
remove it.
and he is absolutely right.
I have also faced this problem.Double check the result in the error window.
In my case, a tailing \ was crashing xcopy (as I was using $(TargetDir)). In my case $(SolutionDir)..\bin. If you're using any other output, this needs to be adjusted.
Also note that start xcopy does not fix it, if the error is gone after compiling. It might have just been suppressed by the command line and no file has actually been copied!
You can btw manually execute your xcopy commands in a command shell. You will get more details when executing them there, pointing you in the right direction.
In case the post build event contains copy/xcopy command for copying build output to some directory(which usually is the most common post build operation) the problem can occur in case the full directory path either of source or target destinations contain folder names which include spaces. Remove space for the directory name(s) and try.
As mentioned in many sites, there are various reasons for this. For me it was due to the length of Source and Destination (Path length). I tried xcopy in the command prompt and I was unable to type the complete source and path (after some characters it wont allow you to type). I then reduced the path length and was able to run.
Hope this helps.
This can happen in multiple cases:
When the complete string path is longer than 254 chars.
When the name of the file to be copied is wrong.
When the target path is wrong.
When the readonly attribute is set on the copied file or target folder.
I got this error because the user account that TFS Build Service was running under did not have permissions to write to the destination folder. Right-click on the folder-->Properties-->Security.
Run VS in Administrator mode and it should work fine.
I got this error because of the file was opened in another instance.
when i closed the file and again re-build the solution, it was successfully copied.
I faced the same issue in case of XCOPY after build is done. In my case the issue was happening because of READ-ONLY permissions set on folders.
I added attrib -R command before XCOPY and it solved the issue.
Hope it helps someone!
I had the same error with xcopy in connection with the Test Engine. I am using VisualStudio Professional 2013. By default Test -> Test Settings -> Keep Test Execution Engine Running seems to be the reason for my error code 4 with xcopy. Switching it off solved the problem. The execution engine seems to keep hold on some .dlls.
I had the same problem.
A simple 'Clean Solution' in VS cleared the error, but it was a temporary solution.
I found that setting the file's Copy To Output Directory parameter to Copy Always seems to have cleared up the locking issue. Although now I have 2 copies of the files and need to delete one.
I had the same problem. However, nothing worked for me. I solved the issue by adding
exit 0
to my code. The problem was that while I was doing copying of the files, sometimes the last file could not be found, and the bat returned a non-zero value.
Hope this helps someone!
If you are running Windows 7 onward, you can try the new 'robocopy' command:
robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)"
More information about robocopy can be found here.
I faced same issue.
I deleted post-build events and it started working.
Some times when we add some SQL components it may add post build commands also.
I am getting something similar using an xcopy with the /exclude option. In my case, I found that editing the post-build event (something harmless like a newline after the command) and saving the project causes the error to happen. Re-saving the file specified in the /exclude option causes it to work again.
As I am writing a DLL library I used the xcopy command to copy the library where the program can find and load it. After several times of opening and closing the program there was still an open process of it in taskmanager which i did not recognized.
Look for any process from which the file may be used and close it.
What fixed it for me:
dig down to the specific solution for the project you want i.e NOT the overall solution file for all the projects.
Do try - I tried everything else mentioned here but to no avail.
I don't see anything in here to suggest that this is a web-app but I have experienced this issue myself - I've got two xcopy commands on a post-build event and only one of them was failing. Something had a lock on the file, and it wasn't Visual Studio (as I tried restarting it.)
The only other thing that would have used the dll I built was IIS. And lo and behold,
A simple iisreset did the trick for me.
I had the same issue.
It was caused by having the same flag twice, for example:
if $(ConfigurationName) == Release (xcopy "$(TargetDir)." "$(SolutionDir)Deployment\$(ProjectName)\" /e /d /i /y /e)
Observe that the "/e" flag appears twice. Removing the duplicate solved the issue.
In my case my $(OutDir) was simply ..\..\Build\ i.e. some relative path. And, when I was trying to xcopy as follows
xcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\" I was getting the exit code error 4.
What's happening was, this command was getting executed in the $(OutDir) (in my case build folder) itself and not the directory where the csproj file of the project was located (as we would normally expect). Hence, I kept getting File not found error (corresponding to exit code 4).
I couldn't figure this out until I wrote cd in the Post Build events, to print which directory this was getting executed in.
So, to summarize, if we're wishing to copy / xcopy files from the $(OutDir), either use "$(TargetDir)" (which is complete path for output directory) or need not specify any path at all.
Can be caused by VMWare Workstation with Shared Folders
I have the problem always when the destinatinon folder of the xcopy is also mapped as Shared Folder in a VM.
I solved it with a script running in the vm and deleting the content of the shared folder.
To expand on rhughes answer,
The robocopy works beautifully, just incase you need to include sub directories you can use /e to include subs and copy empty directories or /s to include subs excluding empty directories.
Also robocopy will report back a few things like if new files were copied, this will cause VS to complain since anything above 0 is a failure and robocopy will return 1 if new files have been found. Its worth to mention that robocopy first compares the Source/Dest and only copies the updated/new files.
To get around this use:
(robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)") ^& IF %ERRORLEVEL% LEQ 4 exit /B 0
If you are here because your project fails to build on a build server, but builds fine "manually" on a dev machine, and you are doing xcopy only for debugging and to emulate a production environment on a dev machine, then you may want to look at this solution:
https://stackoverflow.com/a/1732478/2279059
You simply turn off post build events on the build server using
msbuild foo.sln /p:PostBuildEvent=
This is not good enough if you have other post build events that also need to run on the build server, and it is not a general solution. However, since there are so many different causes of this problem, there cannot be a general solution. One of the many answers to this question (and its duplicates) will probably help, but be careful with approaches that only somehow circumvent error handling (such as xcopy /C). Those may work for you, particularly also in the build server scenario, but I think this one is more reliable, IF it can be used.
It has also been suggested that with newer versions of Visual Studio, the problem no longer exists, so if you are using an old version, consider updating your build tools.
Error code 4 can mean a lot of things, so I recommend reading the other answers as well until you find a solution that works for you AND you understand WHY it works (some solutions only disable error handling, which may only mask the problem but not solve it).
This can be a file locking issue related to parallel building. A workaround is to not use parallel building. This is the default behavior, but if you are using the -m option, then projects will be built in parallel. The following variations should not build projects in parallel, so you will not run into the file locking problem.
msbuild -m:1
msbuild -maxcpucount:1
msbuild
Note that, contrary to what has been said here, this even happens with the "latest" version of MSBuild (from Build Tools for Visual Studio 2019).
The best solution is probably to make sure you don't need to copy files in a post-build step. In some situations, you can also disable post-build steps when building with MSBuild on a build server: https://stackoverflow.com/a/55899347/2279059
I want to amplify and crystallize these two answers: #Vemul's, #Srihari Chinna's.
Make sure that your source path exists and that the process has access to it.
This is especially true if you're using variable substitution to assemble the source path.

Resources