private AgentWebProxySettings GetProxyConfiguration() { string proxyUrl = this.Variables.GetValueOrDefault("Agent.ProxyUrl")?.Value; if (!string.IsNullOrEmpty(proxyUrl)) { string proxyUsername = this.Variables.GetValueOrDefault("Agent.ProxyUsername")?.Value; string proxyPassword = this.Variables.GetValueOrDefault("Agent.ProxyPassword")?.Value; List <string> proxyBypassHosts = PluginUtil.ConvertFromJson <List <string> >(this.Variables.GetValueOrDefault("Agent.ProxyBypassList")?.Value ?? "[]"); return(new AgentWebProxySettings() { ProxyAddress = proxyUrl, ProxyUsername = proxyUsername, ProxyPassword = proxyPassword, ProxyBypassList = proxyBypassHosts, }); } else { return(null); } }
public static int Main(string[] args) { Console.CancelKeyPress += Console_CancelKeyPress; try { PluginUtil.NotNull(args, nameof(args)); PluginUtil.Equal(2, args.Length, nameof(args.Length)); string pluginType = args[0]; if (string.Equals("task", pluginType, StringComparison.OrdinalIgnoreCase)) { string assemblyQualifiedName = args[1]; PluginUtil.NotNullOrEmpty(assemblyQualifiedName, nameof(assemblyQualifiedName)); string serializedContext = Console.ReadLine(); PluginUtil.NotNullOrEmpty(serializedContext, nameof(serializedContext)); AgentTaskPluginExecutionContext executionContext = PluginUtil.ConvertFromJson <AgentTaskPluginExecutionContext>(serializedContext); PluginUtil.NotNull(executionContext, nameof(executionContext)); AssemblyLoadContext.Default.Resolving += ResolveAssembly; try { Type type = Type.GetType(assemblyQualifiedName, throwOnError: true); var taskPlugin = Activator.CreateInstance(type) as IAgentTaskPlugin; PluginUtil.NotNull(taskPlugin, nameof(taskPlugin)); taskPlugin.RunAsync(executionContext, tokenSource.Token).GetAwaiter().GetResult(); } catch (Exception ex) { // any exception throw from plugin will fail the task. executionContext.Error(ex.ToString()); } finally { AssemblyLoadContext.Default.Resolving -= ResolveAssembly; } return(0); } else if (string.Equals("command", pluginType, StringComparison.OrdinalIgnoreCase)) { string assemblyQualifiedName = args[1]; PluginUtil.NotNullOrEmpty(assemblyQualifiedName, nameof(assemblyQualifiedName)); string serializedContext = Console.ReadLine(); PluginUtil.NotNullOrEmpty(serializedContext, nameof(serializedContext)); AgentCommandPluginExecutionContext executionContext = PluginUtil.ConvertFromJson <AgentCommandPluginExecutionContext>(serializedContext); PluginUtil.NotNull(executionContext, nameof(executionContext)); AssemblyLoadContext.Default.Resolving += ResolveAssembly; try { Type type = Type.GetType(assemblyQualifiedName, throwOnError: true); var commandPlugin = Activator.CreateInstance(type) as IAgentCommandPlugin; PluginUtil.NotNull(commandPlugin, nameof(commandPlugin)); commandPlugin.ProcessCommandAsync(executionContext, tokenSource.Token).GetAwaiter().GetResult(); } catch (Exception ex) { // any exception throw from plugin will fail the command. executionContext.Error(ex.ToString()); } finally { AssemblyLoadContext.Default.Resolving -= ResolveAssembly; } return(0); } else { throw new ArgumentOutOfRangeException(pluginType); } } catch (Exception ex) { // infrastructure failure. Console.Error.WriteLine(ex.ToString()); return(1); } finally { Console.CancelKeyPress -= Console_CancelKeyPress; } }