【51CTO.com快译】项目部署的每一段代码都必须具有唯一的版本,这一点至关重要,它可以帮助您跟踪客户端的运行情况,标记部署的更改,并使你的工作变得轻松得多——特别是当你在半夜尝试了解客户端站点上运行的更改时。
在开发微服务时,它的重要性是之前的两倍。通常,你单独部署的服务,你是知道服务使用哪个依赖项的哪个版本。而许多开发人员面临的需求是如何在依赖项发生变化时自动(或手动)更新它们。
在我的一个项目中有一个单独的存储库,包含所有的服务,并分别构建和部署。而作为我们持续集成和部署的一部分,我们希望只构建被更改的服务或其依赖项之一已更改的服务,并且还要确保很容易向系统添加新服务。
然后我找到了 Versions Maven 插件,它可以用来自动更新 Maven 项目的版本,并确保自动更新所有依赖它的其他项目。
本次示例项目提供了三种服务。service2依赖于service1 、services3 依赖于 service1 和 service2。
每个服务都有一个包含自己POM文件的文件夹,每个子服务都有一个子文件夹。如下图所示:
我需要一个中心位置来管理所有的服务版本,所以我添加了以下到主(聚合器) pom.xml:
- <properties>
- . . .
- <!-- Versions -->
- <service1.version>1.1-SNAPSHOT</service1.version>
- <service2.version>2.1-SNAPSHOT</service2.version>
- <service3.version>3.1-SNAPSHOT</service3.version>
当服务版本改变时,我想自动更新服务 pom.xml 文件中的版本,所以我在聚合器 pom.xml 中添加了以下内容:
- <properties>
- . . .
- <!-- auto version related -->
- <service.version>0</service.version>
- <version.update.enable>generate-sources</version.update.enable>
- <version.phase>none</version.phase>
- <service.name>-invalid-</service.name>
- . . .
- </properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>versions-maven-plugin</artifactId>
- <version>2.7</version>
- <executions>
- <execution>
- <phase>${version.phase}</phase>
- <goals>
- <goal>set</goal>
- </goals>
- <id>update-version</id>
- <configuration>
- <generateBackupPoms>false</generateBackupPoms>
- <artifactId>${service.name}*</artifactId>
- <newVersion>${service.version}</newVersion>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
我添加了三个新属性,可以通过每个单独的服务进行设置:
接下来在每个服务(service1\pom.xml)添加下面几行:
- <properties>
- <service.name>service1</service.name>
- <version.phase>${version.update.enable}</version.phase>
- <service.version>${service1.version}</service.version>
- </properties>
现在每个服务都定义了它的名称(与目录相同),设置 version.phase 使用 version.update.enable(其被设置 generate-sources)和设置该版本的值为在根目录 pom.xml 中定义的属性。
现在,如果你更新版本运行 MVN 编译版本将会自动更新:
使用这种方法,我们能够向所有现有的微服务添加版本控制,并轻松地创建新服务。这样,所有依赖版本的自动版本更新就完成了。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
作者 阿里云技术运营望宸 技术实践的门槛不仅在于应用上线后各类问题的排查难度 ...
ssd 云服务器 是什么?就是存储模式选择为ssd超高速 云盘 的 云服务器 。ssd超高...
办网站必须要备案吗?是的,使用中国大陆境内的服务器开办网站,必须先办理 网站...
1.爱上一个人跟拉屎一样简单,忘记一个人跟吃屎一样难。 2.大姨妈是吐血鬼,卫...
private Map Character, Set Character constructGraph(String[] words) { Map C...
阿里云与西奥电梯联合共同打造西奥可信电梯物联网平台,通过工业互联网的规则引...
作者:朱永生 什么是企业搜索 企业搜索,顾名思义,就是企业使用的搜索服务或者...
今天,猿妹要和大家介绍Python程序员在2021年最不应该错过的优秀VS Code扩展: 1...
11月30日,由工业和信息化部、北京市人民政府共同主办的2020年中国网络安全产业...
据国际数据公司(IDC)近日发布的《中国云运营服务市场(2020上半年)跟踪》报告显示...