美文网首页
云效上java应用程序的打包发布(一)

云效上java应用程序的打包发布(一)

作者: 天草二十六_简村人 | 来源:发表于2023-03-09 20:00 被阅读0次

    一、背景

    我们使用云效来部署程序,省去了许多基础搭建工作,但是也带来了一些问题,比如程序的版本号、打包时间、启动时间等元数据的展示,需要我们自己去实现。

    像jvm内存、一些三方的密钥,是可以在环境变量里配置,但是像版本号是会随着程序的发版而变化的。

    而读取程序的版本,是可以从endpoints的/info获取,但那是程序已启动的情况下。显然并不适用于我们的需求,所以我们得在编译打包的时候输出,办法是有很多,我们这里采用的maven插件 git-commit-id-plugin,默认会在target/classes目录下生成git.properties文件。

    在spring boot框架下,你还可以使用'@project.version@'生成程序的版本号,类似git-commit-id-plugin插件,还得把版本写入到某个文件里。

    二、目标

    • 1、在k8s容器,能看到程序的版本号
    • 2、在nacos服务注册中心,能看到程序的版本号(在后面的文章中讲述)
    • 3、构建Docker镜像按appName:${version},部署时候拉取的镜像也是根据版本号。

    三、DevOps流水线示意图

    image.png

    四、优化后的流水线

    image.png image.png

    java编译

    image.png

    读取程序版本号

    image.png
    # input your command here
    version="`grep 'git.build.version' target/classes/git.properties | cut -d'=' -f2 | sed 's/\r//'`"
    echo "USER_version=$version" > .env
    

    也可浓缩为一句shell命令

    echo USER_version=`grep 'git.build.version' target/classes/git.properties | cut -d'=' -f2 | sed 's/\r//'` > .env
    

    镜像制作

    image.png

    这里会传入两个环境变量,跟Dockerfile有关:

    FROM openjdk:8u201-jdk-alpine3.9
    
    ARG APPNAME
    COPY target/${APPNAME}*.jar /opt/xxx_service/${APPNAME}/packages/${APPNAME}.jar
    
    ARG PORT
    EXPOSE ${PORT}/tcp
    
    RUN mkdir -p /opt/xxx_service/${APPNAME}/dump
    

    补充一点,启动jar的命令和参数,配置在deployment.yaml中。

    k8s发布

    image.png image.png

    关于manifests目录下的yaml,后面的文章有空再补充。

    五、新的DevOps流程示意图

    image.png

    六、K8S部署界面

    image.png

    七、环境变量

    开发人员配置

    image.png

    运维管理人员配置

    image.png

    八、打包生成的git.properties文件

    #Generated by Git-Commit-Id-Plugin
    #Tue Feb 14 15:12:20 CST 2023
    git.build.time=2023-02-14T15\:12\:20+0800
    git.build.version=5.0.6
    git.commit.id.abbrev=e316e29
    git.commit.id.full=e316e290ed8f7ec322d9d4c69e49f10dd1b0705f
    

    九、maven插件:git-commit-id-plugin

    <plugin>
                        <groupId>pl.project13.maven</groupId>
                        <artifactId>git-commit-id-plugin</artifactId>
                        <version>${git-commit-id-plugin.version}</version>
                        <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>
                            <includeOnlyProperties>
                                <includeOnlyProperty>^git.build.(time|version)$</includeOnlyProperty>
                                <includeOnlyProperty>^git.commit.id.(abbrev|full)$</includeOnlyProperty>
                            </includeOnlyProperties>
                            <commitIdGenerationMode>full</commitIdGenerationMode>
                            <failOnNoGitDirectory>false</failOnNoGitDirectory>
                        </configuration>
                    </plugin>
    

    参考链接

    相关文章

      网友评论

          本文标题:云效上java应用程序的打包发布(一)

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