接上文,我们在dockerfile配置文件中,怎么拿到git提交的版本号,然后设置为环境变量为我们所用呢?
经过实践有如下方法
-
通过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>
- 读取生成的文件中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包版本号来实现版本管理的。