博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker 发布应用时添加 git revision
阅读量:6000 次
发布时间:2019-06-20

本文共 1665 字,大约阅读时间需要 5 分钟。

概要

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_TAGif [ "${#tags[@]}" = "1" ]; then    GIT_COMMIT=$tagselse    GIT_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-versionRUN yarnRUN 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'])    })  ])  // ...省略...}
Copyright © 2019 {process.env.VERSION}

后端 git revision 注入

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

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

ARG VERSION=no-versionENV 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

你可能感兴趣的文章
MySQL数据库表设计最佳实践——《高性能MySQL》第三版第四章学习笔记
查看>>
Linux简单了解
查看>>
webservice ssl 1 SSL/TLS 协议入门
查看>>
Struts2的Stack Context和ValueStack
查看>>
php向html里传递数据,数据内容是url地址
查看>>
Cocoa 框架 For iOS(二)对象的分配初始化、内省、单例
查看>>
Objective-C语法之NSDictionary和NSMutableDictionary
查看>>
Linux配置防火墙详细步骤(iptables命令使用)
查看>>
详细讲解CAShapeLayer
查看>>
hadoop 一些基本问题
查看>>
分手就在眼前...
查看>>
我真是不再年轻
查看>>
解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
查看>>
Observer_观察者模式_PHP语言描述
查看>>
好用但不常用sql积累
查看>>
你真的会用AsyncTask吗?(二)
查看>>
Java evelen Swing程序设计基础--JFrame窗体
查看>>
微公众号开发
查看>>
YII2路由优化
查看>>
#xubuntu#字体丑的问题
查看>>