private Work createWork(final AgentInstance agent, final JobPlan job) {
try {
return (Work) transactionTemplate.transactionSurrounding(() -> {
final String agentUuid = agent.getUuid();
final Pipeline pipeline;
try {
pipeline = scheduledPipelineLoader.pipelineWithPasswordAwareBuildCauseByBuildId(job.getJobId());
} catch (StaleMaterialsOnBuildCause e) {
return NO_WORK;
}
List<Task> tasks = goConfigService.tasksForJob(pipeline.getName(), job.getIdentifier().getStageName(), job.getName());
final List<Builder> builders = builderFactory.buildersForTasks(pipeline, tasks, resolver);
return transactionTemplate.execute((TransactionCallback) status -> {
if (scheduleService.updateAssignedInfo(agentUuid, job)) {
return NO_WORK;
}
EnvironmentVariableContext contextFromEnvironment = environmentConfigService.environmentVariableContextFor(job.getIdentifier().getPipelineName());
final ArtifactStores requiredArtifactStores = goConfigService.artifactStores().getArtifactStores(getArtifactStoreIdsRequiredByArtifactPlans(job.getArtifactPlans()));
BuildAssignment buildAssignment = BuildAssignment.create(job, pipeline.getBuildCause(), builders, pipeline.defaultWorkingFolder(), contextFromEnvironment, requiredArtifactStores);
return new BuildWork(buildAssignment, systemEnvironment.consoleLogCharset());
});
});
} catch (PipelineNotFoundException e) {
removeJobIfNotPresentInCruiseConfig(goConfigService.getCurrentConfig(), job);
throw e;
}
}