Esempio n. 1
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            var artifactDetails = JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);
            var projectId       = string.Empty;
            var repositoryId    = string.Empty;
            var branch          = string.Empty;

            if (artifactDetails.TryGetValue("ProjectId", out projectId) &&
                artifactDetails.TryGetValue("RepositoryId", out repositoryId) &&
                artifactDetails.TryGetValue("Branch", out branch))
            {
                string checkoutSubmodules;
                string gitLfsSupport;
                string fetchDepth;

                artifactDetails.TryGetValue("checkoutSubmodules", out checkoutSubmodules);
                artifactDetails.TryGetValue("gitLfsSupport", out gitLfsSupport);
                artifactDetails.TryGetValue("fetchDepth", out fetchDepth);

                return(new TfsGitArtifactDetails
                {
                    RelativePath = "\\",
                    ProjectId = projectId,
                    RepositoryId = repositoryId,
                    Branch = branch,
                    CheckoutSubmodules = checkoutSubmodules,
                    GitLfsSupport = gitLfsSupport,
                    FetchDepth = fetchDepth
                });
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 2
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            var artifactDetails = JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);

            string connectionName;
            string relativePath          = string.Empty;
            string customArtifactDetails = string.Empty;

            if (!(artifactDetails.TryGetValue("ConnectionName", out connectionName) &&
                  artifactDetails.TryGetValue("RelativePath", out relativePath) &&
                  artifactDetails.TryGetValue("ArtifactDetails", out customArtifactDetails)))
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }

            var customEndpoint = context.Endpoints.FirstOrDefault((e => string.Equals(e.Name, connectionName, StringComparison.OrdinalIgnoreCase)));

            if (customEndpoint == null)
            {
                throw new InvalidOperationException(StringUtil.Loc("RMCustomEndpointNotFound", agentArtifactDefinition.Name));
            }

            var details = JToken.Parse(customArtifactDetails).ToObject <CustomArtifactDetails>();

            details.RelativePath = relativePath;
            details.Endpoint     = new ServiceEndpoint
            {
                Url           = customEndpoint.Url,
                Authorization = customEndpoint.Authorization
            };

            return(details);
        }
Esempio n. 3
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            ArgUtil.NotNull(context, nameof(context));
            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));

            var artifactDetails = JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);
            var projectId       = string.Empty;
            var repositoryId    = string.Empty;
            var mappings        = string.Empty;

            var mandatoryFields = artifactDetails.TryGetValue(ArtifactDefinitionConstants.ProjectId, out projectId) &&
                                  artifactDetails.TryGetValue(ArtifactDefinitionConstants.RepositoryId, out repositoryId);

            if (!artifactDetails.TryGetValue(ArtifactDefinitionConstants.MappingsId, out mappings) || mappings == null)
            {
                string baseRepoPath   = string.Join("/", "$", projectId);
                var    defaultMapping = new List <Dictionary <string, InputValue> >()
                {
                    new Dictionary <string, InputValue>()
                    {
                        {
                            ArtifactDefinitionConstants.ServerPathId,
                            new InputValue {
                                Value = baseRepoPath
                            }
                        },
                        {
                            ArtifactDefinitionConstants.MappingTypeId,
                            new InputValue {
                                Value = Constants.Release.Map
                            }
                        },
                        {
                            ArtifactDefinitionConstants.LocalPathId,
                            new InputValue {
                                Value = string.Empty
                            }
                        }
                    }
                };

                mappings = JsonConvert.SerializeObject(defaultMapping);
            }

            if (mandatoryFields)
            {
                return(new TfsVCArtifactDetails
                {
                    RelativePath = "\\",
                    ProjectId = projectId,
                    RepositoryId = repositoryId,
                    Mappings = mappings
                });
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 4
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            ArgUtil.NotNull(context, nameof(context));
            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));

            Trace.Entering();

            ServiceEndpoint vssEndpoint = context.Endpoints.FirstOrDefault(e => string.Equals(e.Name, WellKnownServiceEndpointNames.SystemVssConnection, StringComparison.OrdinalIgnoreCase));

            ArgUtil.NotNull(vssEndpoint, nameof(vssEndpoint));
            ArgUtil.NotNull(vssEndpoint.Url, nameof(vssEndpoint.Url));

            var            artifactDetails = JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);
            VssCredentials vssCredentials  = VssUtil.GetVssCredential(vssEndpoint);
            var            tfsUrl          = context.Variables.Get(WellKnownDistributedTaskVariables.TFCollectionUrl);

            Guid projectId = context?.Variables.System_TeamProjectId ?? Guid.Empty;

            if (artifactDetails.ContainsKey("Project"))
            {
                Guid.TryParse(artifactDetails["Project"], out projectId);
            }

            ArgUtil.NotEmpty(projectId, nameof(projectId));

            string relativePath;
            string accessToken;

            vssEndpoint.Authorization.Parameters.TryGetValue(EndpointAuthorizationParameters.AccessToken, out accessToken);

            if (artifactDetails.TryGetValue("RelativePath", out relativePath))
            {
                var buildArtifactDetails = new BuildArtifactDetails
                {
                    Credentials  = vssCredentials,
                    RelativePath = artifactDetails["RelativePath"],
                    AccessToken  = accessToken,
                    Project      = projectId.ToString(),
                    TfsUrl       = new Uri(tfsUrl)
                };

                if (artifactDetails.ContainsKey("DefinitionName"))
                {
                    buildArtifactDetails.DefinitionName = artifactDetails["DefinitionName"];
                }

                if (artifactDetails.ContainsKey("DefinitionId"))
                {
                    buildArtifactDetails.DefintionId = Convert.ToInt32(artifactDetails["DefinitionId"], CultureInfo.InvariantCulture);
                }

                return(buildArtifactDetails);
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 5
0
        public IArtifactDetails GetArtifactDetails(
            IExecutionContext context,
            AgentArtifactDefinition agentArtifactDefinition)
        {
            ArgUtil.NotNull(context, nameof(context));
            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));

            var artifactDetails =
                JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);

            string connectionName;
            string repositoryName = string.Empty;
            string branch         = string.Empty;

            if (artifactDetails.TryGetValue(ArtifactDefinitionConstants.ConnectionName, out connectionName) &&
                artifactDetails.TryGetValue(ArtifactDefinitionConstants.RepositoryId, out repositoryName) &&
                artifactDetails.TryGetValue(ArtifactDefinitionConstants.BranchId, out branch))
            {
                string checkoutNestedSubmodules;
                string checkoutSubmodules;
                string gitLfsSupport;
                string fetchDepth;

                artifactDetails.TryGetValue("checkoutNestedSubmodules", out checkoutNestedSubmodules);
                artifactDetails.TryGetValue("checkoutSubmodules", out checkoutSubmodules);
                artifactDetails.TryGetValue("gitLfsSupport", out gitLfsSupport);
                artifactDetails.TryGetValue("fetchDepth", out fetchDepth);

                ServiceEndpoint gitHubEndpoint = context.Endpoints.FirstOrDefault((e => string.Equals(e.Name, connectionName, StringComparison.OrdinalIgnoreCase)));
                if (gitHubEndpoint == null)
                {
                    throw new InvalidOperationException(StringUtil.Loc("RMGitHubEndpointNotFound", agentArtifactDefinition.Name));
                }

                string           accessToken = gitHubEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.AccessToken];
                GitHubRepository repository  = HostContext.GetService <IGitHubHttpClient>().GetUserRepo(accessToken, repositoryName);

                Trace.Info($"Found github repository url {repository.Clone_url}");
                return(new GitHubArtifactDetails
                {
                    RelativePath = Path.DirectorySeparatorChar.ToString(),
                    ConnectionName = connectionName,
                    CloneUrl = new Uri(repository.Clone_url),
                    Branch = branch,
                    CheckoutSubmodules = checkoutSubmodules,
                    CheckoutNestedSubmodules = checkoutNestedSubmodules,
                    GitLfsSupport = gitLfsSupport,
                    FetchDepth = fetchDepth
                });
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            ArgUtil.NotNull(context, nameof(context));
            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));

            Trace.Entering();

            var artifactDetails =
                JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);

            ServiceEndpoint jenkinsEndpoint = context.Endpoints.FirstOrDefault(e => string.Equals(e.Name, artifactDetails["ConnectionName"], StringComparison.OrdinalIgnoreCase));

            if (jenkinsEndpoint == null)
            {
                throw new InvalidOperationException(StringUtil.Loc("RMJenkinsEndpointNotFound", agentArtifactDefinition.Name));
            }

            string relativePath;
            var    jobName = string.Empty;

            var allFieldsPresents = artifactDetails.TryGetValue("RelativePath", out relativePath) &&
                                    artifactDetails.TryGetValue("JobName", out jobName);

            bool acceptUntrusted = jenkinsEndpoint.Data != null &&
                                   jenkinsEndpoint.Data.ContainsKey("acceptUntrustedCerts") &&
                                   StringUtil.ConvertToBoolean(jenkinsEndpoint.Data["acceptUntrustedCerts"]);

            string startCommitArtifactVersion = string.Empty;
            string endCommitArtifactVersion   = string.Empty;

            artifactDetails.TryGetValue("StartCommitArtifactVersion", out startCommitArtifactVersion);
            artifactDetails.TryGetValue("EndCommitArtifactVersion", out endCommitArtifactVersion);

            if (allFieldsPresents)
            {
                return(new JenkinsArtifactDetails
                {
                    RelativePath = relativePath,
                    AccountName = jenkinsEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.Username],
                    AccountPassword = jenkinsEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.Password],
                    BuildId = Convert.ToInt32(agentArtifactDefinition.Version, CultureInfo.InvariantCulture),
                    JobName = jobName,
                    Url = jenkinsEndpoint.Url,
                    AcceptUntrustedCertificates = acceptUntrusted,
                    StartCommitArtifactVersion = startCommitArtifactVersion,
                    EndCommitArtifactVersion = endCommitArtifactVersion,
                    Alias = agentArtifactDefinition.Alias
                });
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 7
0
        private ArtifactDefinition ConvertToArtifactDefinition(AgentArtifactDefinition agentArtifactDefinition, IExecutionContext executionContext, IArtifactExtension extension)
        {
            Trace.Entering();

            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));
            ArgUtil.NotNull(executionContext, nameof(executionContext));

            var artifactDefinition = new ArtifactDefinition
            {
                ArtifactType = agentArtifactDefinition.ArtifactType,
                Name         = agentArtifactDefinition.Name,
                Version      = agentArtifactDefinition.Version
            };

            artifactDefinition.Details = extension.GetArtifactDetails(executionContext, agentArtifactDefinition);
            return(artifactDefinition);
        }
Esempio n. 8
0
        private ArtifactDefinition ConvertToArtifactDefinition(AgentArtifactDefinition agentArtifactDefinition, IExecutionContext executionContext, IArtifactExtension extension)
        {
            Trace.Entering();

            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));
            ArgUtil.NotNull(executionContext, nameof(executionContext));

            var artifactDefinition = new ArtifactDefinition
            {
                ArtifactType = agentArtifactDefinition.ArtifactType,
                Name         = agentArtifactDefinition.Name,
                Version      = agentArtifactDefinition.Version
            };

            RetryExecutor retryExecutor = new RetryExecutor();

            retryExecutor.ShouldRetryAction = (ex) =>
            {
                bool retry = true;
                if (ex is InvalidOperationException)
                {
                    retry = false;
                }
                else
                {
                    Trace.Warning(ex.ToString());
                }

                return(retry);
            };

            retryExecutor.Execute(
                () =>
            {
                artifactDefinition.Details = extension.GetArtifactDetails(executionContext, agentArtifactDefinition);
            });

            return(artifactDefinition);
        }
Esempio n. 9
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            Trace.Entering();

            var artifactDetails =
                JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);

            ServiceEndpoint jenkinsEndpoint = context.Endpoints.FirstOrDefault(e => string.Equals(e.Name, artifactDetails["ConnectionName"], StringComparison.OrdinalIgnoreCase));

            if (jenkinsEndpoint == null)
            {
                throw new InvalidOperationException(StringUtil.Loc("RMJenkinsEndpointNotFound", agentArtifactDefinition.Name));
            }

            string relativePath;
            var    jobName = string.Empty;

            var allFieldsPresents = artifactDetails.TryGetValue("RelativePath", out relativePath) &&
                                    artifactDetails.TryGetValue("JobName", out jobName);

            if (allFieldsPresents)
            {
                return(new JenkinsArtifactDetails
                {
                    RelativePath = relativePath,
                    AccountName = jenkinsEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.Username],
                    AccountPassword = jenkinsEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.Password],
                    BuildId = Convert.ToInt32(agentArtifactDefinition.Version, CultureInfo.InvariantCulture),
                    JobName = jobName,
                    Url = jenkinsEndpoint.Url
                });
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 10
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            var artifactDetails = JsonConvert.DeserializeObject <Dictionary <string, string> >(agentArtifactDefinition.Details);
            var projectId       = string.Empty;
            var repositoryId    = string.Empty;
            var branch          = string.Empty;

            if (artifactDetails.TryGetValue("ProjectId", out projectId) &&
                artifactDetails.TryGetValue("RepositoryId", out repositoryId) &&
                artifactDetails.TryGetValue("Branch", out branch))
            {
                return(new TfsGitArtifactDetails
                {
                    RelativePath = "\\",
                    ProjectId = projectId,
                    RepositoryId = repositoryId,
                    Branch = branch
                });
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 11
0
        private ArtifactDefinition ConvertToArtifactDefinition(AgentArtifactDefinition agentArtifactDefinition, IExecutionContext executionContext, IArtifactExtension extension)
        {
            Trace.Entering();

            ArgUtil.NotNull(agentArtifactDefinition, nameof(agentArtifactDefinition));
            ArgUtil.NotNull(executionContext, nameof(executionContext));

            var artifactDefinition = new ArtifactDefinition
            {
                ArtifactType = agentArtifactDefinition.ArtifactType,
                Name = agentArtifactDefinition.Name,
                Version = agentArtifactDefinition.Version
            };

            artifactDefinition.Details = extension.GetArtifactDetails(executionContext, agentArtifactDefinition);
            return artifactDefinition;
        }
Esempio n. 12
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            Trace.Entering();

            ServiceEndpoint vssEndpoint = context.Endpoints.FirstOrDefault(e => string.Equals(e.Name, ServiceEndpoints.SystemVssConnection, StringComparison.OrdinalIgnoreCase));
            ArgUtil.NotNull(vssEndpoint, nameof(vssEndpoint));
            ArgUtil.NotNull(vssEndpoint.Url, nameof(vssEndpoint.Url));

            var artifactDetails = JsonConvert.DeserializeObject<Dictionary<string, string>>(agentArtifactDefinition.Details);
            VssCredentials vssCredentials = ApiUtil.GetVssCredential(vssEndpoint);
            var tfsUrl = context.Variables.Get(WellKnownDistributedTaskVariables.TFCollectionUrl);

            Guid projectId = context.Variables.System_TeamProjectId ?? Guid.Empty;
            ArgUtil.NotEmpty(projectId, nameof(projectId));

            string relativePath;
            string accessToken;
            vssEndpoint.Authorization.Parameters.TryGetValue(EndpointAuthorizationParameters.AccessToken, out accessToken);

            if (artifactDetails.TryGetValue("RelativePath", out relativePath))
            {
                return new BuildArtifactDetails
                {
                    Credentials = vssCredentials,
                    RelativePath = artifactDetails["RelativePath"],
                    Project = projectId.ToString(),
                    TfsUrl = new Uri(tfsUrl),
                };
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }
Esempio n. 13
0
        public IArtifactDetails GetArtifactDetails(IExecutionContext context, AgentArtifactDefinition agentArtifactDefinition)
        {
            Trace.Entering();

            var artifactDetails =
                JsonConvert.DeserializeObject<Dictionary<string, string>>(agentArtifactDefinition.Details);

            ServiceEndpoint jenkinsEndpoint = context.Endpoints.FirstOrDefault(e => string.Equals(e.Name, artifactDetails["ConnectionName"], StringComparison.OrdinalIgnoreCase));
            if (jenkinsEndpoint == null)
            {
                throw new InvalidOperationException(StringUtil.Loc("RMJenkinsEndpointNotFound", agentArtifactDefinition.Name));
            }

            string relativePath;
            var jobName = string.Empty;

            var allFieldsPresents = artifactDetails.TryGetValue("RelativePath", out relativePath)
                                    && artifactDetails.TryGetValue("JobName", out jobName);
            if (allFieldsPresents)
            {
                return new JenkinsArtifactDetails
                {
                    RelativePath = relativePath,
                    AccountName = jenkinsEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.Username],
                    AccountPassword = jenkinsEndpoint.Authorization.Parameters[EndpointAuthorizationParameters.Password],
                    BuildId = Convert.ToInt32(agentArtifactDefinition.Version, CultureInfo.InvariantCulture),
                    JobName = jobName,
                    Url = jenkinsEndpoint.Url
                };
            }
            else
            {
                throw new InvalidOperationException(StringUtil.Loc("RMArtifactDetailsIncomplete"));
            }
        }