in agent/src/main/kotlin/org/jetbrains/teamcity/sccache/SCCacheBuildFeature.kt [86:134]
override fun buildStarted(runningBuild: AgentRunningBuild) {
val feature = runningBuild.getBuildFeaturesOfType(BuildFeatureSettings.FEATURE_TYPE).firstOrNull()
?: return
val settings = SCCacheBuildFeatureSettings(feature.parameters)
val logger = runningBuild.buildLogger
logger.activity("Configuring and starting sccache server", BuildFeatureSettings.FEATURE_TYPE) {
if (settings.port == -1) settings.port = NetworkUtil.getFreePort(4226)
val backendConfig = getBackendConfigFromSharedParameters(runningBuild.sharedConfigParameters, settings.backendId)
settings.backendConfig = backendConfig
// user may override parameter in build configuration, otherwise use agent one
val executable = runningBuild.sharedConfigParameters[SCCacheConstants.AGENT_SCCACHE_PATH_PARAMETER]
?: runningBuild.agentConfiguration.configurationParameters[SCCacheConstants.AGENT_SCCACHE_PATH_PARAMETER]
?: findExecutableInPath()
?: "sccache"
val server = SCCacheServer(settings, executable)
// stop any running server
try {
server.stop(logger, true)
} catch (e: Exception) {
LOG.warn("Failed to stop running sccache server before starting our", e)
}
if (backendConfig != null) {
if (!backendConfig.validate(HashMap())) {
logger.internalError(feature.type, "Remote backend configuration is incorrect, check build and project feature settings: $backendConfig", null)
return@activity
}
backendConfig.getSecureValues().forEach {
runningBuild.passwordReplacer.addPassword(it)
}
}
try {
servers[runningBuild.buildId] = server
server.start(logger, runningBuild)
logger.message("Server successfully started on port ${settings.port}")
} catch (e: Exception) {
logger.error("Failed to start server on port ${settings.port}: " + e.message)
logger.exception(e)
return@activity
}
runningBuild.addSharedEnvironmentVariable(AgentEnvironment.SCCACHE_SERVER_PORT, settings.port.toString())
}
}