首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检索Java应用程序的更改列表?

如何检索Java应用程序的更改列表?
EN

Stack Overflow用户
提问于 2016-05-12 07:51:29
回答 2查看 109关注 0票数 0

我有一个spring引导应用程序,我希望有一个页面,列出最近的版本号,以及它包含的更改列表。我使用Rally、git和Jenkins,但是除了手动更新HTML或db表之外,我想知道是否没有一种更自动化的方法来检索这些信息?

有谁能分享他们在应用程序中将这些信息列在网页上的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-13 07:18:32

您可以通过使用AgileCentral和Jenkins插件来跟踪从git提交到关联的CA Git连接器 (Rally)构件的成功和失败的Jenkins构建,只要两者都指向同一个存储库,并且git中的提交提到了相关工件的FormattedID。

下面是一个基于For Java的Java示例。不管对工具包、语言等的选择如何,都是底层的WS API对象模型提供了对这些数据的访问。我通过CreationDate限制了构建查询。在Build对象上的其他字段中,我获取Changesets集合。该集合的每个元素都是对Changeset对象的引用。Git连接器在CA敏捷中心(Rally)中创建Changesets对象。每个Changeset对象都有Artfacts集合字段和Changes集合字段。工件收集的每个元素都是对Rally工件的引用,例如用户故事、缺陷。通过在每个Change对象上获取PathAndFilename,您将得到相关的源文件。现在,我们可以将失败的构建跟踪到特定的提交、文件和用户故事。

这是下面Java代码创建的控制台输出的屏幕截图。最终,您可能希望以一种更具视觉吸引力的方式呈现数据。此示例仅显示构建和提交可以通过WS跟踪到用户故事或缺陷。

水合物WS API中的集合通常需要单独的请求。由于Build和Cangeset数据可能很大,因此通过一些标准绑定这些查询,例如CreationDate将使其更快。

代码语言:javascript
运行
AI代码解释
复制
public class GetBuildData {

    public static void main(String[] args) throws Exception {

        String host = "https://rally1.rallydev.com";
        String apiKey = "_abc123"; 
        String applicationName = "NickM:GetBuildData";
        String workspaceRef = "/workspace/12345";
        String projectRef = "/project/1346";

        RallyRestApi restApi = null;
        try {
            String dateString = "2016-05-12";
            restApi = new RallyRestApi(new URI(host),apiKey);
            restApi.setApplicationName(applicationName);
            QueryRequest buildRequest = new QueryRequest("Build");
            buildRequest.setFetch(new Fetch("Status,Message,Start,Uri,Changesets"));
            buildRequest.setQueryFilter(new QueryFilter("CreationDate", ">", dateString));
            buildRequest.setWorkspace(workspaceRef);
            buildRequest.setProject(projectRef);
            QueryResponse buildResponse = restApi.query(buildRequest);
            for (int i=0; i<buildResponse.getTotalResultCount();i++){
                JsonObject buildObj = buildResponse.getResults().get(i).getAsJsonObject();
                System.out.println("Build Status: " + buildObj.get("Status") +
                        "\n Build Message: " + buildObj.get("Message") +
                        "\n Build Start:   " + buildObj.get("Start") +
                        "\n Build Uri:     " + buildObj.get("Uri"));
                JsonObject changesetsCollection = buildObj.get("Changesets").getAsJsonObject();
                QueryRequest changesetsRequest = new QueryRequest(changesetsCollection);
                changesetsRequest.setFetch(new Fetch("Artifacts","Changes", "Revision"));
                changesetsRequest.setLimit(1000);
                QueryResponse changesetsResponse = restApi.query(changesetsRequest);
                for (int j=0; j<changesetsResponse.getTotalResultCount();j++) {
                    JsonObject changesetObj = changesetsResponse.getResults().get(j).getAsJsonObject();
                    System.out.println("\nChangeset Revision: " + changesetObj.get("Revision"));
                    JsonObject artifactsCollection = changesetObj.get("Artifacts").getAsJsonObject();
                    QueryRequest artifactsRequest = new QueryRequest(artifactsCollection);
                    artifactsRequest.setFetch(new Fetch("FormattedID"));
                    QueryResponse artifactsResponse = restApi.query(artifactsRequest);
                    for (int k=0; k<artifactsResponse.getTotalResultCount();k++) {
                        JsonObject artifactObj = artifactsResponse.getResults().get(k).getAsJsonObject();
                        System.out.println("\nArtifact FormattedID: " + artifactObj.get("FormattedID"));
                    }
                    JsonObject changesCollection = changesetObj.get("Changes").getAsJsonObject();
                    QueryRequest changesRequest = new QueryRequest(changesCollection);
                    changesRequest.setWorkspace(workspaceRef);
                    changesRequest.setProject(projectRef);
                    changesRequest.setFetch(new Fetch("PathAndFilename"));
                    QueryResponse changesResponse = restApi.query(changesRequest);
                    for (int l=0; l<changesResponse.getTotalResultCount();l++) {
                        JsonObject changeObj = changesResponse.getResults().get(l).getAsJsonObject();
                        System.out.println("Change PathAndFilename: " + changeObj.get("PathAndFilename"));
                    }

                }
                System.out.println("--------------------------------");
            }
        } finally {
            if (restApi != null) {
                restApi.close();
            }
        }
    }
}

如果您想显示敏捷中心(Rally)内部的构建数据,AppSDK2.1 javascript应用程序可以部署在自定义页面中。下面是一个简单的示例:

代码语言:javascript
运行
AI代码解释
复制
    <!DOCTYPE html>
<html>
<head>
    <title>Builds by Date</title>
    <script type="text/javascript" src="/apps/2.1/sdk.js"></script>
    <script type="text/javascript">
        Rally.onReady(function () {
                Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',
    launch: function() {
        this.add({
            xtype: 'component',
            itemId: 'datepick',
            html: 'pick a date:',
            width: 100,
            margin: 10
        },
        {
            xtype: 'rallydatepicker',
            showToday: false,
            contentEl: Ext.ComponentQuery.query('#datepick')[0],
            margin: 10,
            handler: function(picker, date) {
                this.getBuilds(date);
            },
            scope:this
        },
        {
            xtype: 'container',
            itemId: 'gridContainer'
        });
    },
    getBuilds:function(date){
        var formattedDate = Rally.util.DateTime.formatWithDefault(date, this.getContext());
        Ext.ComponentQuery.query('#datepick')[0].update((formattedDate) + '<br /> selected');
        if (this.down('rallygrid')) {
            Ext.ComponentQuery.query('#gridContainer')[0].remove(Ext.ComponentQuery.query('#buildsGrid')[0], true);
        }
        this.down('#gridContainer').add({
            xtype: 'rallygrid',
            itemId: 'buildsGrid',
            columnCfgs: [
                'Status',
                'Message',
                'Start',
                'Uri',
                'Changesets'
            ],
            storeConfig: {
                model: 'build',
                filters:[
                    {
                        property: 'CreationDate',
                        operator: '>=',
                        value: Rally.util.DateTime.toIsoString(date,true)
                    }
                ]
            }
        });
    }
});
            Rally.launchApp('CustomApp', {
                name:"Builds by Date",
                parentRepos:""
            });
        });
    </script>
    <style type="text/css">
        .app {
  /* Add app styles here */
}
    </style>
</head>
<body>
</body>
</html>

票数 1
EN

Stack Overflow用户

发布于 2016-05-12 09:26:56

如果在Jenkins中将/api/json?pretty=true添加到作业URL的末尾,您可以看到作业本身的JSON输出,这将导致您获得最新的版本号。此外,这将引导您找到最近构建的URL,该URL(再次追加/api/json?pretty=true)可以引导您找到更改集的JSON列表(以及相应的提交消息)。

你甚至不需要参与拉力赛!:-)

您可以使用JSON封送处理和RestTemplate Spring类从Spring应用程序中使用该JSON。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37191847

复制
相关文章
CSS样式更改——列表、表格和轮廓
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。
前端皮皮
2020/11/26
2.9K0
如何提升Java应用程序性能
【摘要】本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译文。 介绍 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法。我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定性能瓶颈。 我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整。
CSDN技术头条
2018/02/06
1.5K0
如何提升Java应用程序性能
如何提升Java应用程序性能
作者 | Eugen Paraschiv 翻译 | 雁惊寒 【摘要】本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译文。 介绍 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法。我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定性能瓶颈。 我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看
企鹅号小编
2018/02/07
1.4K0
如何提升Java应用程序性能
Elasticsearch如何检索数据
我们都知道Elasticsearch是一个全文检索引擎,那么它是如何实现快速的检索呢? 传统的数据库给每个字段都存储成一个单个值,对于全文检索而言,这样的存储是低效的。举个例子,我有一个大文本字段,存到数据库里面只能是一个值,如果想要检索这个大文本字段里面的任何一个词,数据库如何实现? 只能通过like模糊查询来实现,先不说性能低,这对于一个搜索引擎是远远不够的。 针对上面数据库的不足,所以才出现了Lucene这种全文检索框架而它的核心就在于采用了倒排索引(Inverted Index)的数据结构,不同于数
我是攻城师
2018/05/15
1K0
如何更改伪元素的样式
在前端开发中我们会经常用到伪元素,有时候需要通过js来修改伪元素的样式,那么有哪几种方式来修改伪元素的样式呢?
挥刀北上
2021/01/27
9.4K0
如何更改伪元素的样式
如何更改SELinux模式
Security Enhanced Linux是一个Linux安全模块,用于强制或基于角色的访问控制。SELinux默认与CentOS和Fedora打包在一起,可以以三种模式之一运行:禁用、允许或强制执行。
温浪
2018/08/20
4.3K0
如何检测Java应用程序中的安全漏洞?
静态代码分析工具可以扫描整个代码库,尝试识别常见的安全问题。这些工具可以帮您查找常见的漏洞,例如SQL注入、跨站点脚本攻击(XSS)等。
用户1289394
2023/08/22
4000
如何检测Java应用程序中的安全漏洞?
[Linux] 更新源地址列表及更改方法 [Ubuntu 16.04 LTS]
在修改source.list前,最好先备份一份,以便日后恢复 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 修改更新源:sudo gedit /etc/apt/sources.list 最后执行更新命令:sudo apt-get update
轻舞飞扬SR
2021/02/24
1.3K0
如何更改 Ubuntu 的终端的颜色
但是,如果你想要一个独一无二的的终端体验或者符合你自身品位的一些东西,你也可以改变你的 Ubuntu 的终端的颜色。
用户1880875
2021/11/08
14.7K0
如何更改 Linux 的 I/O 调度器
Linux 的 I/O 调度器是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度器。Linux I/O 调度器的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先级更高以及何时下发 I/O 到块设备,以此来减少磁盘寻道时间,从而提高系统的吞吐量。
Debian中国
2018/12/20
4.6K0
如何更改github工程的语言属性
当创建github项目的时候,github本身会根据提交文件的数量来自动推断工程的开发语言,有时这种推断结果会与实际情况不太相符。
Python疯子
2018/09/06
3.4K0
CAPTAIN HOOK - 如何(不)寻找 JAVA 应用程序中的漏洞
寻找 Java 应用程序漏洞的好时机!在过去的几个月里,我一直在尝试构建一个名为Captain Hook的工具,它使用动态方法来查找大型闭源 Java 应用程序的一些有趣(安全方面)特性。在此过程中,我尝试了许多仪器工具和技术,但很难找到满足我所有需求的工具和技术。在本文中,我将总结通过我的许多(一些失败,一些成功)尝试所学到的东西。
Khan安全团队
2022/01/21
8360
如何解决Java应用程序中的I/O性能问题?
总之,要解决Java应用程序的I/O性能问题,需要从多个方面进行优化,例如考虑精细控制线程、缓存数据、提高计算机硬件配置、使用异步处理等一系列方案,以达到合理使用系统资源、确保快速响应客户端的目标。
用户1289394
2023/08/22
4730
如何解决Java应用程序中的I/O性能问题?
如何实现文档检索(下)
MongoDB提供了一个名为db.collection.find()的函数,该函数用于从MongoDB数据库中检索文档。
MongoDB中文社区
2020/04/10
2.5K0
如何实现文档检索(下)
如何实现文档检索(上)
MongoDB提供了一个名为db.collection.find()的函数,该函数用于从MongoDB数据库中检索文档。
MongoDB中文社区
2020/03/27
1.7K0
腾讯地图获取全国行政区划检索列表Demo
全国行政区划检索功能, 由于高德和百度也没有提供一个比较完美的解决方案, 因此使用了腾讯地图iOS SDK内部封装的Web接口来实现. 行政区划共分为三个等级, 省级/市级/区级, 对于北京市和天津市这样的城市, 通常直接认为是省级, 并直接以同样的内容来填充市级. 但是SDK内部并没有提供这样的填充, 因此需要自行再省级里面将其复制到市级。
腾讯位置服务
2020/09/18
1.6K0
VSCode如何更改默认打开文件的编码
这个需求是我自己遇到的一个需求,我常用的编辑器就是vscode,然后我也经常的看一些Keli IDE嵌入式的代码,但是这个Keli的默认的文件编码是GB2312,然后code是UTF-8的编码,这样一来.打开一个项目以后,里面的中文全会变成乱码
云深无际
2021/03/30
6.4K0
VSCode如何更改默认打开文件的编码
CentOS下如何更改默认的启动方式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/78708355
泥豆芽儿 MT
2018/09/11
1.9K0
CentOS下如何更改默认的启动方式
点击加载更多

相似问题

如何检索buildbot中更改的列表?

14

subversion:如何检索当前的更改列表名称列表?

10

如何通过java检索附件列表JIRA?

40

Apache :如何在Java中检索更改的行

11

如何使用java存储、检索和更改值

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文