Это довольно измененная версия того, что я нашел в https://bitbucket.org/atlassian/per-build-container, которой поделился @mkleint. Я добавил запрос, чтобы получить список агентов на основе требований к работе.
import com.atlassian.bamboo.plan.ExecutableAgentsHelper;
import com.atlassian.bamboo.buildqueue.manager.AgentManager;
import com.atlassian.bamboo.v2.build.agent.AgentCommandSender;
import com.atlassian.bamboo.v2.build.agent.BuildAgent;
import com.atlassian.bamboo.v2.build.agent.messages.StopAgentNicelyMessage;
class DeleteAgent{
private AgentManager agentManager;
private AgentCommandSender agentCommandSender;
//Atlassian managed object and will be auto injected when this setter is found
public void setAgentManager(AgentManager agentManager) {
this.agentManager = agentManager;
}
//Atlassian managed object and will be auto injected when this setter is found
public void setAgentCommandSender(AgentCommandSender agentCommandSender) {
this.agentCommandSender = agentCommandSender;
}
public static void main(String[] args) {
RequirementSetImpl reqs = new RequirementSetImpl();
reqs.addRequirement(new RequirementImpl("requirement-key","requirement-value");
reqs.addRequirement(new RequirementImpl("requirement-key","requirement-value");
Collection<BuildAgent> agentsToBeDeleted = executableAgentsHelper.getExecutableAgents(ExecutableAgentsHelper.ExecutorQuery.newQuery(reqs));
Iterator<BuildAgent> agentsToBeDeletedIterator = agentsToBeDeleted.iterator();
while(agentsToBeDeletedIterator.hasNext()) {
this.deleteSingleAgentOnBambooServer(agentsToBeDeletedIterator.next());
}
}
private void deleteSingleAgentOnBambooServer(BuildAgent agent) {
if(agent!=null) {
this.stopAgentRemotely(agent.getId());
this.removeAgent(agent);
}
}
public void stopAgentRemotely(BuildAgent buildAgent) {
Long agentId = buildAgent.getId();
String agentName = buildAgent.getName();
buildAgent.setRequestedToBeStopped(true);
agentCommandSender.send(new StopAgentNicelyMessage(), agentId);
}
public void stopAgentRemotely(long agentId) {
BuildAgent ba = agentManager.getAgent(agentId);
if (ba != null) {
stopAgentRemotely(ba);
}
}
public void removeAgent(BuildAgent agent) {
if (agent != null) {
removeAgent(agent.getId());
}
}
public synchronized void removeAgent(long agentId) {
BuildAgent ba = agentManager.getAgent(agentId);
if (ba != null) {
String agentName = ba.getName();
try {
agentManager.removeAgent(agentId);
} catch (TimeoutException e) {
System.out.println(String.format("timeout on removing agent %s (id: %s)", agentName, agentId), e);
}
}
}
}
Хороший вопрос, вы нашли решение тем временем? –