美文网首页
聊聊如何验证线上的版本是符合预期的版本

聊聊如何验证线上的版本是符合预期的版本

作者: linyb极客之路 | 来源:发表于2022-05-03 10:43 被阅读0次

    前言

    当我们想知道部署项目的哪个版本有问题?当我们想知道线上运行的版本是否是我们预期的版本?当我们想把部署的版本与代码进行关联?如果是你用git来做版本管理,那就可以使用git-commit-id-maven-plugin插件来实现上述功能。

    git-commit-id-maven-plugin插件,会根据当前分支的版本号生成一个git.properties文件。git.properties内容形如下

    git.branch=master
    git.build.host=xxx
    git.build.time=2022-03-01T20\:33\:43+0800
    git.build.user.email=aaa@qq.com
    git.build.user.name=aaa
    git.build.version=1.0-SNAPSHOT
    git.closest.tag.commit.count=
    git.closest.tag.name=
    git.commit.id=6dab4430864e3e4a9fc1ba6f6b93f278100d4e2e
    git.commit.id.abbrev=6dab443
    git.commit.id.describe=6dab443-dirty
    git.commit.id.describe-short=6dab443-dirty
    git.commit.message.full=Add README.md
    git.commit.message.short=Add README.md
    git.commit.time=2022-03-01T16\:24\:48+0800
    git.commit.user.email=aa@example
    git.commit.user.name=aa
    git.dirty=true
    git.remote.origin.url=http://hello
    git.tags=
    git.total.commit.count=1
    

    如何使用

    本文以springboot项目为例,springboot项目的parent pom里面已经内嵌git-commit-id-maven-plugin插件管理依赖。如下

    <pluginManagement>
     <plugins>
        <plugin>
              <groupId>pl.project13.maven</groupId>
              <artifactId>git-commit-id-plugin</artifactId>
              <executions>
                <execution>
                  <goals>
                    <goal>revision</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <verbose>true</verbose>
                <dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
                <generateGitPropertiesFile>true</generateGitPropertiesFile>
                <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
              </configuration>
            </plugin>
       </plugins>
    </pluginManagement>
    

    因此我们的项目中可以做如下配置

    1、在我们的项目中显式引入git-commit-id-plugin插件

     <build>
            <plugins>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                </plugin>
            </plugins>
     </build>
    

    2、通过和actuator集成,显示git信息

    a、在项目中引入actuator GAV

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    

    b、浏览器访问http://ip : port/actuator/info

    4b6c3900ac49d6f9a9539fe8cf501873 (1).png

    如果觉得上面的信息不够多,我们可以通过自定义端点或者自己写一个controller把信息展示出来

    详细的信息可以通过org.springframework.boot.info.GitProperties展示

    本示例以自定义端点为例。示例如下

    @Endpoint(id = "git")
    @Component
    public class GitEndpoint {
    
    
        @Autowired(required = false)
        private GitProperties gitProperties;
    
        @ReadOperation
        public Object info() throws IOException {
    
            if(ObjectUtils.isEmpty(gitProperties)){
                return new HashMap<>();
            }
    
    
            return gitProperties;
        }
    }
    
    

    在application.yml中开放自定义端点

    management:
      endpoints:
        web:
          exposure:
            include: 'git'
    

    浏览器访问http://ip : port/actuator/git

    1.png

    如果仍然觉得上述的信息还是不够详细,那可以通过解析git.properties文件显示。示例

    @Endpoint(id = "gitDetail")
    @Slf4j
    @Component
    public class GitDetailEndPoint {
    
        @ReadOperation
        public Object detail() throws IOException {
    
    
            Properties props = null;
            try {
                props = PropertiesLoaderUtils.loadAllProperties("git.properties");
                return props;
            } catch (IOException e) {
                log.error("git.properties not found");
            } finally {
            }
            return new HashMap<>();
        }
    }
    
    

    在application.yml中开放自定义端点

    management:
      endpoints:
        web:
          exposure:
            include: 'gitDetail'
    

    浏览器访问http://ip:port/actuator/gitDetail

    2.png

    总结

    git-commit-id-maven-plugin在分布式或者微服务项目中,用来验证项目版本还是挺有用的,推荐大家有机会用一下

    demo链接

    https://github.com/lyb-geek/springboot-learning/tree/master/springboot-git-commit

    相关文章

      网友评论

          本文标题:聊聊如何验证线上的版本是符合预期的版本

          本文链接:https://www.haomeiwen.com/subject/vrvbyrtx.html