• 概要
  • 实施步骤
    • 获取 git revision
    • 前端 git revision 注入
    • 后端 git revision 注入

概要

docker 发布应用时, 将 git revision 注入到应用中, 在问题出现时, 可以迅速定位代码版本.

实施步骤

  1. 获取 git revision
  2. 将 git revision 传入具体的应用中
    • 前端的 revision 通过 yarn build 传入
    • 后端的 revision 通过 环境变量传入

获取 git revision

GIT_TAG=`git describe --tags`
IFS='-' read -r -a tags <<< $GIT_TAG
if [ "${#tags[@]}" = "1" ]; thenGIT_COMMIT=$tags
elseGIT_COMMIT=`git rev-parse HEAD | cut -c 1-8`
fi

上面的代码是获取最新的 git revision 的前 8 位, 如果最新的 git revision 有 tag, 则使用 tag 获取的 git revision 放在 GIT_COMMIT 中.

前端 git revision 注入

首先是 docker build 命令中传入 git revision

docker build -t xxx.latest --build-arg VERSION=${GIT_COMMIT} . 

然后在 docker file 中获取 VERSION, 并将其传给 yarn build 命令

ARG VERSION=no-version          # 默认值 no-version
RUN yarn
RUN yarn build --VERSION=${VERSION}

最后是前端工程中获取此变量, 并在页面的 footer 处显示 git revision

     process.argv.filter(str => /^--/.test(str)).map(str => str.replace('--', '')).forEach(str => {let sub = str.match(/([\s\S]*)\=([\s\S]*)/)sub ? (TYPE[sub[1]] = sub[2]) : (TYPE[str] = true)})const mergeWebpackConfig = () => (config, env) => {// ...省略...config.plugins = (config.plugins || []).concat([new webpack.DefinePlugin({'process.env.VERSION': JSON.stringify(TYPE['VERSION'])})])// ...省略...
}
<Footer><divstyle={{ textAlign: 'center' }}className="gx-layout-footer-content">Copyright © 2019 {process.env.VERSION}</div>
</Footer>

后端 git revision 注入

本文的例子是基于 golang 的 API 后端, 获取 git revision 的方法和上面类似.

获取 git revision 之后, 在 docker file 中获取 VERSION, 并设置环境变量 VERSION

ARG VERSION=no-version
ENV VERSION=${VERSION} 

API 服务添加 -v 参数, 用来显示服务的版本

ver := flag.Bool("v", false, "verify version")
flag.Parse()if *ver {fmt.Println(os.Getenv("VERSION"))return
}

转载于:https://www.cnblogs.com/wang_yb/p/10934407.html

docker 发布应用时添加 git revision相关推荐

  1. CSDN 发布文章时 添加的图片 怎么 去掉水印

    编辑发布csdn文章 时,添加图片有水印看着有点变扭,怎么去掉呢? 网上有写去掉链接上面的字样的,但是我找了很久都没有看到添加图片后有链接出来······ 然后就想是不是设置上有相关的设置呢?还真有! ...

  2. 尝试远程添加Git存储库时收到“致命错误:不是git存储库”

    我通过遵循本教程向自己介绍Git: 让jekyll在Nearlyfreespeech.net上运行 一切正常,直到将回购添加到本地计算机的部分为止: git remote add nfsn ssh:/ ...

  3. Git 提交代码时添加 emoji 图标

    文章目录 Git 提交代码时添加 emoji 图标 在commit时添加一个emoji表情图标 添加多个emoji表情图标 Git 提交代码时添加 emoji 图标 使用git的开发者都知道提交代码的 ...

  4. idea中,发布项目到Git中,当时按照这样的流程添加Git,然后push,提示:push to origin/master war rejected“

    idea中,发布项目到Git中,当时按照这样的流程添加Git,然后push,提示:push to origin/master war rejected". 大概原因是:初始化项目时,远程仓库 ...

  5. 如何使用Docker发布SpringBoot项目

    1.目标 Dockerfile文件用来构建Docker镜像,它由一系列命令和参数构成,接下来演示一下如何使用Docker发布SpringBoot项目. 2.准备 a.SpringBoot项目 该项目名 ...

  6. VS2019添加git源代码管理-增加VS版本 16.10.4的GIT管理

    文章目录 前言 VS2019添加git源代码管理-旧版本 VS2019添加git源代码管理-新版本 前言 本文当时创作时,VS的git源代码管理还没有做出改变,所以会导致很多读者有疑问,找不到团队资源 ...

  7. 【历史上的今天】3 月 20 日:cURL 二十五周年;Docker 发布;思科收购 Linksys

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2023 年 3 月 20 日,在 1999 年的今天,人类首次成功乘热气球环球飞行.在 24 年的今天,瑞士人皮 ...

  8. VS2008 VS2010发布网站时如何产生固定命名的 Dll 文件

    VS2008 发布网站时如何产生固定命名的 Dll 文件 dev.firnow.com    时间 : 2010-12-08  作者:网络   编辑:fnw 点击:  82 [ 评论 ] - - VS ...

  9. 用Java Instrumentation 在类加载时添加记录

    用Java Instrumentation 在类加载时添加记录 发布者:xanadu0214   来源:网络转载   发布日期:2013年11月06日   Java学习交流群:471651004 在分 ...

最新文章

  1. 负载均衡的几种常用方案
  2. Python爬虫:爬取instagram,破解js加密参数
  3. java 后台自动刷新请求_spring oauth2+JWT后端自动刷新access_token
  4. HTML页面加载顺序
  5. 一步步实现SDDC-Edge负载均衡
  6. ssis 执行任务的日志_SSIS和PowerShell –执行流程任务
  7. win10下装win7双系统_电脑安装双系统win7+win10,安装顺序不同,使用会有什么不同?...
  8. python编程入门第3版pdf-Python编程入门(第3版) PDF扫描版[26MB]
  9. (微信编辑器)UEditor富文本嵌入135编辑器
  10. Deecamp夏令营面试及结营体验
  11. 怎么在线把QLV格式转成MP4
  12. 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视(mp4 格式)
  13. java protected 构造方法_java中子类调用父类构造方法注意事项
  14. postman批量刷接口
  15. MOSFET的基本知识
  16. 【STM32利用CuBe MX生成HID设备】1-熟悉软件以及生成一个8键的游戏控制器
  17. java 识别doc、docx
  18. Altium desiger 使用 功能整理【不定时更新】
  19. 梳理PSS和SSS的位置
  20. IDC:英国脱欧对本国IT支出带来3大潜在影响

热门文章

  1. “互联网+”下的制造业供应链新挑战
  2. Redis的安装与简单部署
  3. 开始研究JavaScript
  4. CruiseControl中应用NCover和NCoverExplore
  5. 关于 mysql 在联合查询时,使用 concat 拼接查询条件
  6. HttpWebResponse 的问题
  7. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)B. Primal Sport
  8. 网站用sqlite库,报attempt to write a readonly database,解决方法
  9. 实现才是目的——《大道至简》第六章读后感
  10. 函数传参和实际应用—JS学习笔记2015-6-5(第49天)