Is it mandatory to have the capability on Server?
Asked by Jobin Kuruvilla [Adaptavist]:

I am looking to create a Bamboo plan where the Source respository is Perforce. I have a remote agent that has the Perforce executable created as a capability.

However I still can't create the plan because Bamboo is looking for Perforce Client executable defined as a server capability.  
Is this expected? Do we need the executable on the Server side even if it is there on the remote agent? Does it mean the source will be downloaded on the server? Can I instead force the build to use the remote agent and its capability?


Answers:
author: PiotrA
body: I think yes, you need the p4 executable on the Server side. Bamboo server needs to collect the code changes since last build and this operation is performed server-side, prior to the build execution (on local or remote agents). Does this mean the p4 repository source will be downloaded on the server? I think no - the Bamboo server will just poll remote the p4 repository for relevant changes - source content is irrelevant.

comments: author: Jobin Kuruvilla [Adaptavist]
body: > Bamboo server needs to collect the code changes since last build and this operation is performed server-side, prior to the build execution (on local or remote agents)

Ah ok, that makes sense.

Regarding the last part of the question - which agent will the build run on? I have a local Agent (default one) and the remote agent. Can I force the build to always run on the Remote Agent?


author: PiotrA
body: Yes, you can (however it's a kind of workaround). You need to add custom capability to the remote agent (bamboo-\>administration-\>agents-\>the agent-\>somewhere there). For example add custom capability "isRemote". Simultaneously you have to add requirement to all your plan jobs (bamboo -\> all plans -\> configure the plan -\> jobX -\> requirements) which would require the "isRemote" custom capability to be present on the building agent. That way the Bamboo will dispatch the plan's jobs only to remote agents (assuming you don't add "isRemote" custom capability to the local agents as well :) ).

Does it make sense?


author: Jobin Kuruvilla [Adaptavist]
body: Yup, that will work for me. Thanks Piotr!


author: Nic Brough -Adaptavist-
body: Yes, I think you need the Perforce executable on the remote machine (to get the files from the repo) as well as the Bamboo machine (to get the repo information about what's being built).

What I don't know is if they can share the executable somehow. ou could rig it so the Bamboo server uses the p4 client to drop files onto shared storage so the remote doesn't need it, but I still think Bamboo needs the executable client to enable it to talk to the repo.

comments: author: Jobin Kuruvilla [Adaptavist]
body: Thanks Nic, for the quick answer. It would have been awesome if the server could share the execuatble on the Remote. I think it is the other way that is possible now.


author: Nic Brough -Adaptavist-
body: Yes, it would be nice. The closest I think I can get is getting the Bamboo server to fetch the stuff to be built from Perforce (i.e with a p4 client), and then pushingit to the build server, so you don't need p4 there. Not sharing, but making it unnecessary.

I don't think there's any getting away from having p4 access of some sort on the Bamboo server, and as it's a proprietary thingy, it's really hard to build into a CI service (on the brighter side, Perforce are much more friendly than other non-open SCM providers and say "help yourself to the client side stuff", and their binaries are monolithic, so you drop one executable on your system, do a tiny bit of config, and it works)