接上文,我们在dockerfile配置文件中,怎么拿到git提交的版本号,然后设置为环境变量为我们所用呢?

经过实践有如下方法

  1. 通过maven插件生成git提交信息

    在pom中添加插件,configuration节点配置的就是生成git提交信息的文件路径名称

 <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>4.0.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
                </configuration>
            </plugin>
  1. 读取生成的文件中git信息,这里使用sed命令匹配到git.commit.id.abbrev的值(git提交版本号)放到临时文件中,然后提取临时文件内容设置为环境变量,之后删除临时文件。
RUN sed -n 's/^git\.commit\.id\.abbrev=\(.*\)$/\1/p' > app_version.tmp && \
export app_version=$(cat app_version.tmp) && \
rm app_name.tmp

也可以使用 awk命令提取版本号:

ENV version=$(awk -v key="${git.commit.id.abbrev}" '{if($1==key) print $2}' /git.properties)

还可以在dockerfile中使用cmd命令,直接执行脚本去获取需要的数据。

获取到版本信息,可以在构建镜像的时候直接使用git提交版本号作为镜像版本号,方便管理识别镜像。

PS:

如果使用k8s部署,可以把标签设置好参数,在deployment配置文件中引用设置好的环境变量,设置pod的标签信息。

也有读取pom文件中jar包版本号来实现版本管理的。