Compare commits

..

1 Commits

Author SHA1 Message Date
Lokesh Gopu
17a36d58be Max attempts while adding runner 2020-05-19 17:46:20 -04:00
2 changed files with 109 additions and 2 deletions

View File

@@ -160,8 +160,11 @@ namespace GitHub.Runner.Listener.Configuration
}
TaskAgent agent;
int attemptCount = 5;
while (true)
{
attemptCount--;
runnerSettings.AgentName = command.GetRunnerName();
_term.WriteLine();
@@ -192,10 +195,10 @@ namespace GitHub.Runner.Listener.Configuration
_term.WriteError("Failed to replace the runner. Try again or ctrl-c to quit");
}
}
else if (command.Unattended)
else if (command.Unattended || attemptCount <= 0)
{
// if not replace and it is unattended config.
throw new TaskAgentExistsException($"Pool {runnerSettings.PoolId} already contains a runner with name {runnerSettings.AgentName}.");
throw new TaskAgentExistsException($"A runner already exists with the name {runnerSettings.AgentName}.");
}
}
else
@@ -216,6 +219,7 @@ namespace GitHub.Runner.Listener.Configuration
}
}
}
// Add Agent Id to settings
runnerSettings.AgentId = agent.Id;

View File

@@ -288,6 +288,12 @@ namespace GitHub.DistributedTask.Pipelines
}
}
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
public void SetJobSidecarContainers(IDictionary<String, String> value)
{
m_jobSidecarContainers = value;
}
public TaskAgentMessage GetAgentMessage()
{
var body = JsonUtility.ToString(this);
@@ -299,6 +305,89 @@ namespace GitHub.DistributedTask.Pipelines
};
}
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
internal static TemplateToken ConvertToTemplateToken(ContainerResource resource)
{
var result = new MappingToken(null, null, null);
var image = resource.Image;
if (!string.IsNullOrEmpty(image))
{
result.Add(new StringToken(null, null, null, "image"), new StringToken(null, null, null, image));
}
var options = resource.Options;
if (!string.IsNullOrEmpty(options))
{
result.Add(new StringToken(null, null, null, "options"), new StringToken(null, null, null, options));
}
var environment = resource.Environment;
if (environment?.Count > 0)
{
var mapping = new MappingToken(null, null, null);
foreach (var pair in environment)
{
mapping.Add(new StringToken(null, null, null, pair.Key), new StringToken(null, null, null, pair.Value));
}
result.Add(new StringToken(null, null, null, "env"), mapping);
}
var ports = resource.Ports;
if (ports?.Count > 0)
{
var sequence = new SequenceToken(null, null, null);
foreach (var item in ports)
{
sequence.Add(new StringToken(null, null, null, item));
}
result.Add(new StringToken(null, null, null, "ports"), sequence);
}
var volumes = resource.Volumes;
if (volumes?.Count > 0)
{
var sequence = new SequenceToken(null, null, null);
foreach (var item in volumes)
{
sequence.Add(new StringToken(null, null, null, item));
}
result.Add(new StringToken(null, null, null, "volumes"), sequence);
}
return result;
}
[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
if (JobContainer is StringToken jobContainerStringToken)
{
var resourceAlias = jobContainerStringToken.Value;
var resource = Resources?.Containers.SingleOrDefault(x => string.Equals(x.Alias, resourceAlias, StringComparison.OrdinalIgnoreCase));
if (resource != null)
{
JobContainer = ConvertToTemplateToken(resource);
m_jobContainerResourceAlias = resourceAlias;
}
}
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
if (m_jobSidecarContainers?.Count > 0 && (JobServiceContainers == null || JobServiceContainers.Type == TokenType.Null))
{
var services = new MappingToken(null, null, null);
foreach (var pair in m_jobSidecarContainers)
{
var networkAlias = pair.Key;
var serviceResourceAlias = pair.Value;
var serviceResource = Resources.Containers.Single(x => string.Equals(x.Alias, serviceResourceAlias, StringComparison.OrdinalIgnoreCase));
services.Add(new StringToken(null, null, null, networkAlias), ConvertToTemplateToken(serviceResource));
}
JobServiceContainers = services;
}
}
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
@@ -335,6 +424,12 @@ namespace GitHub.DistributedTask.Pipelines
{
m_variables = null;
}
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
if (!string.IsNullOrEmpty(m_jobContainerResourceAlias))
{
JobContainer = new StringToken(null, null, null, m_jobContainerResourceAlias);
}
}
[DataMember(Name = "EnvironmentVariables", EmitDefaultValue = false)]
@@ -357,5 +452,13 @@ namespace GitHub.DistributedTask.Pipelines
[DataMember(Name = "Variables", EmitDefaultValue = false)]
private IDictionary<String, VariableValue> m_variables;
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
[DataMember(Name = "JobSidecarContainers", EmitDefaultValue = false)]
private IDictionary<String, String> m_jobSidecarContainers;
// todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
[IgnoreDataMember]
private string m_jobContainerResourceAlias;
}
}