private void ProcessMainProject(ArtifactoryBuild _task) { if (_task.SkipParent != null && _task.SkipParent.Equals("true")) { return; } /*Main project*/ var mainProjectParser = new ProjectHandler(_task.ProjectName, _task.ProjectPath); /* * Trying to check if Artifactory configuration file exists (overrides) in the sub module level. * If not we will use the configurations from the solution level */ if (!mainProjectParser.parseArtifactoryConfigFile(_task.ProjectPath, _task)) { mainProjectParser.ArtifactoryConfiguration = MainArtifactoryConfiguration; } var mainProject = mainProjectParser.generate(); if (mainProject != null) { BuildInfoExtractor.ProccessModule(_buildInfo, mainProject, _task); } }
public void deploy(ArtifactoryBuild task, Build build, BuildInfoLog log) { ArtifactoryBuildInfoClient client = new ArtifactoryBuildInfoClient(task.Url, task.User, task.Password, log); client.setProxy(build.deployClient); client.setConnectionTimeout(build.deployClient); try { if (task.DeployEnabled != null && task.DeployEnabled.Equals("true")) { /* Deploy every artifacts from the Map< module.name : artifact.name > => List<DeployDetails> */ task.deployableArtifactBuilderMap.ToList().ForEach(entry => entry.Value.ForEach(artifact => client.deployArtifact(artifact))); } if (task.BuildInfoEnabled != null && task.BuildInfoEnabled.Equals("true")) { //Upload Build Info json file to Artifactory log.Info("Uploading build info to Artifactory..."); /* Send Build Info */ client.sendBuildInfo(build); } } catch (Exception e) { log.Error("Exception has append from ArtifactoryBuildInfoClient: " + e.Message, e); throw new Exception("Exception has append from ArtifactoryBuildInfoClient: " + e.Message, e); } finally { client.Dispose(); } }
public static Agent BuildAgentFactory(ArtifactoryBuild task) { if (task.TfsActive != null && task.TfsActive.Equals("True")) { return(new AgentTFS(task)); } return(new AgentMSBuild(task)); }
// C# time format is not consistent with Artifactory requirements // C# format: "2017-01-11T11:21:31.31+02:00" the issue is with the ':' in the time zone // Expected: "2017-01-11T11:21:31.31+0200" private static string getBuildInfoStartTime(ArtifactoryBuild task) { string startTime = string.Format(Build.STARTED_FORMAT, task.StartTime); if (startTime.Contains("+") || startTime.Contains("-")) { startTime = startTime.Remove(startTime.LastIndexOf(":"), 1); } return(startTime); }
public static Agent BuildAgentFactory(ArtifactoryBuild task) { if (task.TfsActive != null && task.TfsActive.Equals("True")) { IEnumerable<String> tfsCollectionURI = BuildEngineExtensions.GetEnvironmentVariable(task.BuildEngine, "TF_BUILD_COLLECTIONURI", false); if (tfsCollectionURI != null) { return new AgentTFS(task); } else { return new AgentTFS2015(task); } } return new AgentMSBuild(task); }
public static Agent BuildAgentFactory(ArtifactoryBuild task) { if (task.TfsActive != null && task.TfsActive.Equals("True")) { IEnumerable <String> tfsCollectionURI = BuildEngineExtensions.GetEnvironmentVariable(task.BuildEngine, "TF_BUILD_COLLECTIONURI", false); if (tfsCollectionURI != null) { return(new AgentTFS(task)); } else { return(new AgentTFS2015(task)); } } return(new AgentMSBuild(task)); }
/// <summary> /// Read all referenced nuget`s in the .csproj calculate their md5, sha1 and id. /// </summary> public static void ProccessModule(Build build, ProjectModel project, ArtifactoryBuild _task) { var module = new Module(project.AssemblyName); string localSource = Path.Combine(_task.SolutionRoot, "packages"); //string[] directoryPaths = Directory.GetDirectories(_task.SolutionRoot, project.AssemblyName, SearchOption.AllDirectories); string[] packageConfigPath = Directory.GetFiles(project.projectDirectory, "packages.config", SearchOption.AllDirectories); if (project.artifactoryDeploy != null && !string.IsNullOrWhiteSpace(_task.DeployEnabled) && _task.DeployEnabled.Equals("true")) { foreach (ProjectModel.DeployAttribute deployAttribute in project.artifactoryDeploy) { List <DeployDetails> details = BuildArtifacts.resolve(deployAttribute, project.projectDirectory, _task.DeploymentRepository); deployAttribute.properties.AddRange(build.getDefaultProperties()); foreach (DeployDetails artifactDetail in details) { //Add default artifact properties artifactDetail.properties = Build.buildMatrixParamsString(deployAttribute.properties); string artifactName = artifactDetail.file.Name; module.Artifacts.Add(new Artifact { type = artifactDetail.file.Extension.Replace(".", String.Empty), md5 = artifactDetail.md5, sha1 = artifactDetail.sha1, name = artifactName }); string artifactId = module.id + ":" + artifactName; if (_task.deployableArtifactBuilderMap.ContainsKey(artifactId)) { _task.deployableArtifactBuilderMap[artifactId].Add(artifactDetail); } else { _task.deployableArtifactBuilderMap.Add(artifactId, new List <DeployDetails> { artifactDetail }); } } } } addDependencies(project.AssemblyName, module, localSource, packageConfigPath, _task.Configuration); build.modules.Add(module); }
public static Build extractBuild(ArtifactoryBuild task, ArtifactoryConfig artifactoryConfig, BuildInfoLog log) { Build build = new Build { modules = new List <Module>(), }; build.started = string.Format(Build.STARTED_FORMAT, task.StartTime); build.artifactoryPrincipal = task.User; build.buildAgent = new BuildAgent { name = "MSBuild", version = task.ToolVersion }; build.type = "MSBuild"; build.agent = Agent.BuildAgentFactory(task); //get the current use from the windows OS System.Security.Principal.WindowsIdentity user; user = System.Security.Principal.WindowsIdentity.GetCurrent(); if (user != null) { build.principal = string.Format(@"{0}", user.Name); } //Calculate how long it took to do the build DateTime start = DateTime.ParseExact(task.StartTime, artifactoryDateFormat, null); build.startedDateMillis = GetTimeStamp(); build.durationMillis = Convert.ToInt64((DateTime.Now - start).TotalMilliseconds); build.number = string.IsNullOrWhiteSpace(task.BuildNumber) ? build.startedDateMillis : task.BuildNumber; build.name = task.BuildName ?? task.ProjectName; build.url = build.agent.BuildAgentUrl(); build.vcsRevision = task.VcsRevision; //Add build server properties, if exists. AddSystemVariables(artifactoryConfig, build); AddLicenseControl(artifactoryConfig, build, log); AddBlackDuck(artifactoryConfig, build, log); ConfigHttpClient(artifactoryConfig, build); return(build); }
/// <summary> /// Read all referenced nuget`s in the .csproj calculate their md5, sha1 and id. /// </summary> public static void ProccessModule(Build build, ProjectModel project, ArtifactoryBuild _task) { var module = new Module(project.AssemblyName); string localSource = Path.Combine(_task.SolutionRoot, "packages"); //string[] directoryPaths = Directory.GetDirectories(_task.SolutionRoot, project.AssemblyName, SearchOption.AllDirectories); string[] packageConfigPath = Directory.GetFiles(project.projectDirectory, "packages.config", SearchOption.AllDirectories); if (project.artifactoryDeploy != null && !string.IsNullOrWhiteSpace(_task.DeployEnabled) && _task.DeployEnabled.Equals("true")) { foreach (ProjectModel.DeployAttribute deployAttribute in project.artifactoryDeploy) { List<DeployDetails> details = BuildArtifacts.resolve(deployAttribute, project.projectDirectory, _task.DeploymentRepository); deployAttribute.properties.AddRange(build.getDefaultProperties()); foreach (DeployDetails artifactDetail in details) { //Add default artifact properties artifactDetail.properties = Build.buildMatrixParamsString(deployAttribute.properties); string artifactName = artifactDetail.file.Name; module.Artifacts.Add(new Artifact { type = artifactDetail.file.Extension.Replace(".", String.Empty), md5 = artifactDetail.md5, sha1 = artifactDetail.sha1, name = artifactName }); string artifactId = module.id + ":" + artifactName; if (_task.deployableArtifactBuilderMap.ContainsKey(artifactId)) { _task.deployableArtifactBuilderMap[artifactId].Add(artifactDetail); } else { _task.deployableArtifactBuilderMap.Add(artifactId, new List<DeployDetails> { artifactDetail }); } } } } addDependencies(project.AssemblyName, module, localSource, packageConfigPath, _task.Configuration); build.modules.Add(module); }
private void ProcessMainProject(ArtifactoryBuild _task) { if (_task.SkipParent != null && _task.SkipParent.Equals("true")) return; /*Main project*/ var mainProjectParser = new ProjectHandler(_task.ProjectName, _task.ProjectPath); /* * Trying to check if Artifactory configuration file exists (overrides) in the sub module level. * If not we will use the configurations from the solution level */ if (!mainProjectParser.parseArtifactoryConfigFile(_task.ProjectPath, _task)) { mainProjectParser.ArtifactoryConfiguration = MainArtifactoryConfiguration; } var mainProject = mainProjectParser.generate(); if (mainProject != null) { BuildInfoExtractor.ProccessModule(_buildInfo, mainProject, _task); } }
/* * Trying to read the "artifactory.build" file for deployment configuration. */ public bool parseArtifactoryConfigFile(string projectArtifactoryConfigPath, ArtifactoryBuild task) { FileInfo artifactoryConfigurationFile = new FileInfo(projectArtifactoryConfigPath + "Artifactory.build"); if (artifactoryConfigurationFile.Exists) { StringBuilder xmlContent = SolutionHandler.MsbuildInterpreter(artifactoryConfigurationFile, task); System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(ArtifactoryConfig)); ArtifactoryConfiguration = (ArtifactoryConfig)reader.Deserialize(new System.IO.StringReader(xmlContent.ToString())); //Validate the xml file if (ArtifactoryConfiguration.PropertyGroup == null || ArtifactoryConfiguration.PropertyGroup.Deployments == null || ArtifactoryConfiguration.PropertyGroup.Deployments.Deploy == null) { return(false); } return(true); } return(false); }
/* * Trying to read the "artifactory.build" file for deployment configuration. */ public bool parseArtifactoryConfigFile(string projectArtifactoryConfigPath, ArtifactoryBuild task) { FileInfo artifactoryConfigurationFile = new FileInfo(projectArtifactoryConfigPath + "Artifactory.build"); if (artifactoryConfigurationFile.Exists) { StringBuilder xmlContent = SolutionHandler.MsbuildInterpreter(artifactoryConfigurationFile, task); System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(ArtifactoryConfig)); ArtifactoryConfiguration = (ArtifactoryConfig)reader.Deserialize(new System.IO.StringReader(xmlContent.ToString())); //Validate the xml file if (ArtifactoryConfiguration.PropertyGroup == null || ArtifactoryConfiguration.PropertyGroup.Deployments == null || ArtifactoryConfiguration.PropertyGroup.Deployments.Deploy == null) { return false; } return true; } return false; }
public static Build extractBuild(ArtifactoryBuild task, ArtifactoryConfig artifactoryConfig, BuildInfoLog log) { Build build = new Build { modules = new List<Module>(), }; build.started = string.Format(Build.STARTED_FORMAT, task.StartTime); build.artifactoryPrincipal = task.User; build.buildAgent = new BuildAgent { name = "MSBuild", version = task.ToolVersion }; build.type = "MSBuild"; build.agent = Agent.BuildAgentFactory(task); //get the current use from the windows OS System.Security.Principal.WindowsIdentity user; user = System.Security.Principal.WindowsIdentity.GetCurrent(); if (user != null) build.principal = string.Format(@"{0}", user.Name); //Calculate how long it took to do the build DateTime start = DateTime.ParseExact(task.StartTime, artifactoryDateFormat, null); build.startedDateMillis = GetTimeStamp(); build.durationMillis = Convert.ToInt64((DateTime.Now - start).TotalMilliseconds); build.number = string.IsNullOrWhiteSpace(task.BuildNumber) ? build.startedDateMillis : task.BuildNumber; build.name = task.BuildName ?? task.ProjectName; build.url = build.agent.BuildAgentUrl(); build.vcsRevision = task.VcsRevision; //Add build server properties, if exists. AddSystemVariables(artifactoryConfig, build); AddLicenseControl(artifactoryConfig, build, log); AddBlackDuck(artifactoryConfig, build, log); ConfigHttpClient(artifactoryConfig, build); return build; }
public AgentMSBuild(ArtifactoryBuild task) { name = "MSBuild"; version = task.ToolVersion; }
/// <summary> /// Replacing all the MSBuild properties placeholder $() /// </summary> /// <param name="artifactoryConfigurationFile">Full file path</param> /// <param name="task">MSBuild implemented Task</param> /// <returns>New file content after replacement.</returns> public static StringBuilder MsbuildInterpreter(FileInfo artifactoryConfigurationFile, ArtifactoryBuild task) { StringBuilder xmlContent = new StringBuilder(artifactoryConfigurationFile.OpenText().ReadToEnd()); Regex propertiesPattern = new Regex(@"(\$\([\w]+\))"); MatchCollection matchCollection = propertiesPattern.Matches(xmlContent.ToString()); foreach (var match in matchCollection) { string propertyKey = match.ToString().Replace("$(", string.Empty).Replace(")", string.Empty); IEnumerable <String> msbuildProperty = BuildEngineExtensions.GetEnvironmentVariable(task.BuildEngine, propertyKey, false); if (msbuildProperty != null) { xmlContent = xmlContent.Replace(match.ToString(), msbuildProperty.First()); } } return(xmlContent); }
public SolutionHandler(ArtifactoryBuild task, BuildInfoLog log) { _task = task; _log = log; GetMainConfiguration(); }
/// <summary> /// Replacing all the MSBuild properties placeholder $() /// </summary> /// <param name="artifactoryConfigurationFile">Full file path</param> /// <param name="task">MSBuild implemented Task</param> /// <returns>New file content after replacement.</returns> public static StringBuilder MsbuildInterpreter(FileInfo artifactoryConfigurationFile, ArtifactoryBuild task) { StringBuilder xmlContent = new StringBuilder(artifactoryConfigurationFile.OpenText().ReadToEnd()); Regex propertiesPattern = new Regex(@"(\$\([\w]+\))"); MatchCollection matchCollection = propertiesPattern.Matches(xmlContent.ToString()); foreach (var match in matchCollection) { string propertyKey = match.ToString().Replace("$(", string.Empty).Replace(")", string.Empty); IEnumerable<String> msbuildProperty = BuildEngineExtensions.GetEnvironmentVariable(task.BuildEngine, propertyKey, false); if (msbuildProperty != null) { xmlContent = xmlContent.Replace(match.ToString(), msbuildProperty.First()); } } return xmlContent; }
public AgentTFS2015(ArtifactoryBuild task) { name = "TFS2015"; version = ""; buildEngine = task.BuildEngine; }
// C# time format is not consistent with Artifactory requirements // C# format: "2017-01-11T11:21:31.31+02:00" the issue is with the ':' in the time zone // Expected: "2017-01-11T11:21:31.31+0200" private static string getBuildInfoStartTime(ArtifactoryBuild task) { string startTime = string.Format(Build.STARTED_FORMAT, task.StartTime); if (startTime.Contains("+") || startTime.Contains("-")) { startTime = startTime.Remove(startTime.LastIndexOf(":"), 1); } return startTime; }
public AgentTFS(ArtifactoryBuild task) { name = "TFS"; version = ""; buildEngine = task.BuildEngine; }