我已部署的应用程序是什么版本?

在我的职业生涯中,我注意到许多小型且不昂贵的功能由于未提供业务价值而没有进入Sprint积压。 但是,它们在应用程序的生命周期内提供了大量的ROI ,但是由于目标不明确(由短期管理人员设置)而被完全忽略了。 这些包括但不限于:

  • 通常进行监视,更具体地说是监视指标,运行状况检查等。由于您不知道应用程序的工作原理,因此现在需要5天的时间,而之后花费10倍(或更长时间)的时间。
  • 环境数据, 例如开发,测试,生产等。当它与依赖于环境的彩色标语关联时,它特别有效。 如果您不这样做,则我不负责删除最近10天的所有生产数据,因为我认为这是测试环境。 这非常容易,尤其是在所有环境下登录名/密码都相同的情况下-是的,LDAP设置很复杂,所以我们只有一个。
  • 应用程序构建数据,最重要的是版本号,如果可能的话,还有构建号和构建时间。 当您现在需要信息时,必须通过SSH进入服务器(如果可能的话)或搜索Wiki(如果它是最新的,这是最不可能的事),就必须知道版本非常繁琐。

其中,我认为最基本的是后者。 我们习惯于检查桌面应用程序中的“关于”对话框,但是除非您每天交付多次(很多次),否则对于任何实际的企业级应用程序都是必需的。 在SOA和微服务领域,这意味着此信息也应该是响应的一部分。

使用Maven,很容易实现,因为只需要一个简单的属性文件,并且maven-resource-plugin可以发挥其魔力。 Maven提供了过滤功能,这意味着可以将任何资源设置为占位符,并在构建时将其替换为其值。 默认情况下启用过滤。 要激活它,以下代码片段将起作用:

<project...>
    <build>
        <resources>
            <resource>
                <directory> ${basedir}/src/main/resources </directory>
                <filtering> true </filtering>
            </resource>
        </resources>
    </build>
</project>

我在上面写过关于占位符的文章,但没有具体说明。 很简单,POM中的任何数据集以及一些特殊的数据集都可以用作占位符。 只需使用$和方括号内的DOM路径即可,例如: ${dom.path}

这是一个带有属性文件的示例:

application.version=${project.version}
build.date=${maven.build.timestamp}

如果将此代码段放在src/main/resources目录中的文件中,则Maven将生成一个名称类似的文件,其值紧接在process-resources之后的target/classes目录中。 具体值当然取决于POM,但这是示例输出:

application.version=1.0.0-SNAPSHOT
build.date=20150303-1335

不幸的是,事情并不那么简单,因为Maven中有一个关于${maven.build.timestamp}的错误。 它不能直接过滤,需要添加一个间接级别:

<project...>
    <build>
        <properties>
            <build.timestamp> ${maven.build.timestamp} </build.timestamp>
        </properties>
        <resources>
            <resource>
                <directory> ${basedir}/src/main/resources </directory>
                <filtering> true </filtering>
            </resource>
        </resources>
    </build>
</project>

现在,以下属性文件将按预期工作:

application.version=${project.version}
build.date=${build.timestamp}

此时,仅在需要时读取此属性文件即可。 这包括:

在webapps中
  • 与桌面应用程序一样,提供专用的“关于”页面。 我很少见过,从来没有实现
  • 在信息中添加页脚。 为了增加用户友好性,请将文本颜色设置为背景颜色,以使用户不受信息干扰。 只有知道(或好奇)的人才能访问它-无论如何这都不是机密。
服务中

无论是SOAP还是REST,XML还是JSON,也都有一些选择:

  • 作为专用服务端点( 例如 /about/version )。 这是最简单的实现。 如果在整个组织中使用相同的端点,那就更好了。
  • 作为所有端点上的附加信息。 当每个端点可以分别构建和组装时,这是必需的。 然后,最简单的方法是将其放入HTTP标头中,而更困难的是将其放入数据中。 后者可能需要某种拦截器方法以及对模式的操作(如果有)。

还有两个附加选项:

  1. 要区分快照版本,请使用Maven 内部版本号插件 我没有实际使用经验。 但是,它要求正确配置SCM信息。
  2. 一些应用程序不仅显示版本信息,而且还显示环境信息( 例如,开发,集成,登台等)。 我已经看到它通过特定的横幅或背景颜色使用。 这需要在JVM启动时设置专用的Java属性或系统环境变量。

在未开发的环境中,最多可以在1小时内完成过滤工作。 使用数据的成本变化更大,但是在简单的webapp页脚情况下,可以在不到一天的时间内完成。 将其与在应用程序生命周期中获取版本所花费的时间相比较...

翻译自: https://blog.frankel.ch/whats-the-version-of-my-deployed-application/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值