使用 Spring Boot 构建信息 Maven 插件确保可靠的微服务部署

了解如何使用 Spring Boot Build Info Maven 插件验证微服务部署,从而提高部署管道的可靠性。

        就微服务而言,我们面临着一个独特的挑战:部署容器时,我们无法验证是否已部署具有预期代码的最新容器版本。在部署新功能并且可以在生产中进行测试的情况下,很容易验证。然而,对于金融科技应用程序,我们不一定能够验证全新的生产 API。在某些情况下,还会对现有API进行错误修复,并且您无法在生产中执行该 API 用例。有时,DevOps 团队通知我们容器已从较低的 UAT 环境中提升并部署,但当实际生产流量开始时,我们没有看到错误修复正在生效。为了避免这种情况,我们希望确保有一种方法可以在推送容器时验证最新代码。
        在我们的例子中,我们正在处理基于 Spring 的微服务。这时Spring Boot Maven 插件就派上用场了。需要在项目的 pom.xml 文件中添加 build-info Maven 插件。

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>
              build-info
            </goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

        配置完构建信息后,项目构建完成后,可以查看target/classes/META-INFO目录下的build-info.properties文件。它看起来像这样:

build.artifact=core-build-info-api
build.group=com.dzone
build.name=core-build-info-api
build.time=2023-07-29T15\:47\:25.387Z
build.version=1.0-SNAPSHOT

        为了在运行时访问这些属性,Spring 提供了BuildProperties 类,它公开了上述文件中的所有属性。下面是通用服务的代码片段,它为已部署的微服务构建构建信息:

@Service
public class BuildInfoService {

    @Autowired
    BuildProperties buildProperties;

    @Autowired
    Environment environment;

    public BuildInfoResponse getBuildInfo(){
        BuildInfoResponse buildInfoResponse = new BuildInfoResponse();
        buildInfoResponse.setName(this.buildProperties.getName());
        buildInfoResponse.setVersion(this.buildProperties.getVersion());
        buildInfoResponse.setTime(this.buildProperties.getTime());
        buildInfoResponse.setActiveProfile(this.environment.getActiveProfiles());
        buildInfoResponse.setSpringVersion(this.buildProperties.getVersion());
        buildInfoResponse.setGroup(this.buildProperties.getGroup());
        buildInfoResponse.setArtifact(this.buildProperties.getArtifact());
        return buildInfoResponse;
    }
}

        然后,您可以注入此服务并构建通用端点以公开容器的构建信息。在我们的例子中,我们构建了一个名为 core-build-info 的通用包,其中包括上述服务和一个通用控制器,如下所示:

@RestController
@RequestMapping("/${build-info.path}")
public class BuildInfoController {

    @Autowired
    BuildInfoService buildInfoService;

    @GetMapping("/build-info")
    public BuildInfoResponse getBuildInfo() {
        return this.buildInfoService.getBuildInfo();
    }
}

所有业务或实用微服务都引用公共包并在 Spring 配置文件属性文件中配置以下属性:

env=DEV
build-info.path=api/app-name/build

应用程序名称可以是您的业务基础服务路径。
集成公共包后,您可以使用以下URL访问微服务的端点,该端点返回以下内容:

{
    "name": "core-build-info-api",
    "version": "0.0.1",
    "time": "2023-07-29T16:13:42.251Z",
    "artifact": "core-build-info-api",
    "group": "com.dzone",
    "activeProfile": [
        "DEV"
    ],
    "springVersion": "6.0.10"
}

        如果您在构建过程中配置了版本增量,则可以验证版本。或者,您始终可以回退到检查构建时间,在本例中为“2023-07-29T16:13:42.251Z”。

        总之,处理微服务并确保最新的代码部署可能会带来独特的挑战。通过利用 Spring Boot Maven 插件的功能并创建一个公共包来公开构建信息,我们开发了一种可靠的方法来克服这一挑战。此过程使我们能够确认微服务的正确版本和构建已部署在生产中,从而为我们的部署管道提供信心和保证。这种方法的现实价值是显而易见的:它现在是我们在部署容器时验证的第一件事。

猜你喜欢

转载自blog.csdn.net/qq_28245905/article/details/132202299
今日推荐