in src/Amazon.ElasticBeanstalk.Tools/Commands/DeployEnvironmentCommand.cs [650:708]
private async Task<bool> WaitForDeploymentCompletionAsync(string applicationName, string environmentName, DateTime startingEventDate)
{
var requestEnvironment = new DescribeEnvironmentsRequest
{
ApplicationName = applicationName,
EnvironmentNames = new List<string> { environmentName }
};
var requestEvents = new DescribeEventsRequest
{
ApplicationName = applicationName,
EnvironmentName = environmentName,
StartTimeUtc = startingEventDate
};
var success = true;
var lastPrintedEventDate = startingEventDate;
EnvironmentDescription environment = new EnvironmentDescription();
do
{
Thread.Sleep(5000);
var responseEnvironments = await this.EBClient.DescribeEnvironmentsAsync(requestEnvironment);
if (responseEnvironments.Environments.Count == 0)
throw new ElasticBeanstalkExceptions("Failed to find environment when waiting for deployment completion", ElasticBeanstalkExceptions.EBCode.FailedToFindEnvironment );
environment = responseEnvironments.Environments[0];
requestEvents.StartTimeUtc = lastPrintedEventDate;
var responseEvents = await this.EBClient.DescribeEventsAsync(requestEvents);
if(responseEvents.Events.Count > 0)
{
for(int i = responseEvents.Events.Count - 1; i >= 0; i--)
{
var evnt = responseEvents.Events[i];
if (evnt.EventDate <= lastPrintedEventDate)
continue;
this.Logger?.WriteLine(evnt.EventDate.ToLocalTime() + " " + evnt.Severity + " " + evnt.Message);
if(evnt.Message.StartsWith("Failed to deploy application", StringComparison.OrdinalIgnoreCase) ||
evnt.Message.StartsWith("Failed to launch environment", StringComparison.OrdinalIgnoreCase) ||
evnt.Message.StartsWith("Error occurred during build: Command hooks failed", StringComparison.OrdinalIgnoreCase))
{
success = false;
}
}
lastPrintedEventDate = responseEvents.Events[0].EventDate;
}
} while (environment.Status == EnvironmentStatus.Launching || environment.Status == EnvironmentStatus.Updating);
if(success)
{
this.Logger?.WriteLine("Environment update complete: http://{0}/", environment.EndpointURL);
}
return success;
}