in aws-codedeploy-agent/src/main/java/jetbrains/buildServer/runner/codedeploy/CodeDeployRunner.java [30:128]
public BuildProcess createBuildProcess(@NotNull final AgentRunningBuild runningBuild, @NotNull final BuildRunnerContext context) throws RunBuildException {
return new SyncBuildProcessAdapter() {
@NotNull
@Override
protected BuildFinishedStatus runImpl() throws RunBuildException {
final Map<String, String> runnerParameters = patchParams(validateParams(), runningBuild);
final Map<String, String> configParameters = context.getConfigParameters();
final Mutable m = new Mutable(configParameters);
m.problemOccurred = false;
m.s3ObjectVersion = nullIfEmpty(configParameters.get(S3_OBJECT_VERSION_CONFIG_PARAM));
m.s3ObjectETag = nullIfEmpty(configParameters.get(S3_OBJECT_ETAG_CONFIG_PARAM));
return withAWSClients(runnerParameters, new WithAWSClients<BuildFinishedStatus, CodeDeployRunnerException>() {
@Nullable
@Override
public BuildFinishedStatus run(@NotNull AWSClients clients) throws CodeDeployRunnerException {
final AWSClient awsClient = createAWSClient(clients.createS3Client(), clients.createCodeDeployClient(), runningBuild).withListener(
new ServiceMessageLoggingDeploymentListener(runnerParameters, runningBuild.getCheckoutDirectory().getAbsolutePath()) {
@Override
protected void problem(int identity, @NotNull String type, @NotNull String descr) {
super.problem(identity, type, descr);
m.problemOccurred = true;
}
@Override
void uploadRevisionFinished(@NotNull File revision, @NotNull String s3BucketName, @NotNull String s3ObjectKey, @Nullable String s3ObjectVersion, @Nullable String s3ObjectETag, @NotNull String url) {
super.uploadRevisionFinished(revision, s3BucketName, s3ObjectKey, s3ObjectVersion, s3ObjectETag, url);
m.s3ObjectVersion = s3ObjectVersion;
m.s3ObjectETag = s3ObjectETag;
}
@Override
protected void log(@NotNull String message) {
runningBuild.getBuildLogger().message(message);
}
});
final String s3BucketName = getS3BucketName(runnerParameters);
String s3ObjectKey = getS3ObjectKey(runnerParameters);
if (isUploadStepEnabled(runnerParameters) && !m.problemOccurred && !isInterrupted()) {
final File readyRevision = new ApplicationRevision(
isEmptyOrSpaces(s3ObjectKey) ? runningBuild.getBuildTypeExternalId() : s3ObjectKey,
getRevisionPaths(runnerParameters),
context.getWorkingDirectory(), runningBuild.getBuildTempDirectory(),
configParameters.get(CUSTOM_APPSPEC_YML_CONFIG_PARAM),
isRegisterStepEnabled(runnerParameters) || isDeployStepEnabled(runnerParameters)).withLogger(runningBuild.getBuildLogger()).getArchive();
if (isEmptyOrSpaces(s3ObjectKey)) {
s3ObjectKey = readyRevision.getName();
}
awsClient.uploadRevision(readyRevision, s3BucketName, s3ObjectKey);
}
final String applicationName = getAppName(runnerParameters);
final String bundleType = "" + getBundleType(s3ObjectKey);
if (CodeDeployUtil.isRegisterStepEnabled(runnerParameters) && !m.problemOccurred && !isInterrupted()) {
awsClient.registerRevision(s3BucketName, s3ObjectKey, bundleType, m.s3ObjectVersion, m.s3ObjectETag, applicationName);
}
if (CodeDeployUtil.isDeployStepEnabled(runnerParameters) && !m.problemOccurred && !isInterrupted()) {
final String deploymentGroupName = getDeploymentGroupName(runnerParameters);
final String deploymentConfigName = nullIfEmpty(getDeploymentConfigName(runnerParameters));
awsClient.deployRevision(
s3BucketName, s3ObjectKey, bundleType, m.s3ObjectVersion, m.s3ObjectETag,
applicationName, deploymentGroupName,
getEC2Tags(runnerParameters), getAutoScalingGroups(runnerParameters),
deploymentConfigName,
Boolean.parseBoolean(getRollbackOnFailure(runnerParameters)),
Boolean.parseBoolean(getRollbackOnAlarmThreshold(runnerParameters)),
getFileExistsBehavior(runnerParameters));
return m.problemOccurred ? BuildFinishedStatus.FINISHED_WITH_PROBLEMS : BuildFinishedStatus.FINISHED_DETACHED;
}
return m.problemOccurred ? BuildFinishedStatus.FINISHED_WITH_PROBLEMS : BuildFinishedStatus.FINISHED_SUCCESS;
}
});
}
@NotNull
private Map<String, String> validateParams() throws RunBuildException {
final Map<String, String> runnerParameters = context.getRunnerParameters();
final Map<String, String> invalids = ParametersValidator.validateRuntime(runnerParameters, context.getConfigParameters(), runningBuild.getCheckoutDirectory());
if (invalids.isEmpty()) return runnerParameters;
throw new CodeDeployRunnerException(CodeDeployUtil.printStrings(invalids.values()), null);
}
@NotNull
private Map<String, String> patchParams(final Map<String, String> runnerParameters, @NotNull final AgentRunningBuild runningBuild) {
final Map<String, String> params = new HashMap<String, String>(runnerParameters);
params.put(TEMP_CREDENTIALS_SESSION_NAME_PARAM, runningBuild.getBuildTypeExternalId() + runningBuild.getBuildId());
return params;
}
};
}