示例#1
0
        private static void GetJiraIssues()
        {
            List <string> keys = issueAssociations.Keys.Distinct().ToList();
            Jira          jira = GetJiraClient();

            // use LINQ syntax to retrieve issues
            IPagedQueryResult <Atlassian.Jira.Issue> issues = null;
            var success = false;

            do
            {
                try
                {
                    var jql = $"issueKey in ({string.Join(',', keys)})";
                    issues  = jira.Issues.GetIssuesFromJqlAsync(jql, maxIssues: keys.Count).Result;
                    success = true;
                }
                catch (Exception e)
                {
                    if (e.Message.IsJiraIssue(out string[] errorKeys))
                    {
                        keys.RemoveAll(k => errorKeys.Contains(k));
                    }
                    else
                    {
                        throw;
                    }
                }
            } while (!success);
            jiraIssues = issues?.ToList() ?? default;
        }
        public async Task <List <Issue> > GetIssuesAsync(string jql, string updateIssueStartDate, SyncSystemDTO syncSystem)
        {
            int          itemsPerPage = 1000;
            int          counter      = 0;
            List <Issue> result       = new List <Issue>();

            if (syncSystem.ActualsStartDate.HasValue)
            {
                jql = $"({jql}) and ((updated >= {updateIssueStartDate} and issuetype != 'Epic') or issuetype = 'Epic')";
            }
            logger.Info($"GetIssuesAsync jql: {jql}");
            IPagedQueryResult <Issue> query = await JiraConnection.Issues
                                              .GetIssuesFromJqlAsync(jql, itemsPerPage, counter);

            logger.Info($"GetIssuesAsync counter: {counter}; query.TotalItems: {query.TotalItems}; " +
                        $"query.ItemsPerPage: {query.ItemsPerPage}; query.StartAt: {query.StartAt}");

            result.AddRange(query.ToList());

            counter += itemsPerPage;

            while (query.TotalItems >= counter)
            {
                logger.Info("GetIssuesAsync while1 counter " + counter);

                query = await JiraConnection.Issues
                        .GetIssuesFromJqlAsync(jql, itemsPerPage, counter);

                counter += itemsPerPage;

                logger.Info($"GetIssuesAsync while2 counter: {counter}; query.TotalItems: {query.TotalItems}; " +
                            $"query.ItemsPerPage: {query.ItemsPerPage}; query.StartAt: {query.StartAt}");

                result.AddRange(query.ToList());
            }
            logger.Info("GetIssuesAsync result.Count " + result.Count);
            return(result);
        }
        /// <summary>
        /// 请求Issues
        /// </summary>
        /// <param name="jiraUri">公司/组织的Jira地址,如https://jira.huawei.com</param>
        /// <param name="jqlText"></param>
        /// <returns></returns>
        public static async Task <List <Issue> > RequestAsync(string jiraUri, string jqlText)
        {
            IPagedQueryResult <Issue> issues = null;

            try
            {
                //之前的版本,Atlassian已经弃用
                // Jira jira = new Jira(url, "admin", "password");
                var jira = Jira.CreateRestClient(jiraUri, CustomUtils.Account, CustomUtils.Password);
                //GetIssuesFromJqlAsync相当于 $"{jiraUri}/rest/api/2/search?jql={requestText}";
                issues = await jira.Issues.GetIssuesFromJqlAsync(jqlText, 100000);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(issues?.ToList() ?? new List <Issue>());
        }