docker 发布应用时添加 git revision
概要
docker 发布应用时, 将 git revision 注入到应用中, 在问题出现时, 可以迅速定位代码版本.
实施步骤
- 获取 git revision
- 将 git revision 传入具体的应用中
- 前端的 revision 通过 yarn build 传入
- 后端的 revision 通过 环境变量传入
获取 git revision
GIT_TAG=`git describe --tags`
IFS='-' read -r -a tags <<< $GIT_TAG
if [ "${#tags[@]}" = "1" ]; then
GIT_COMMIT=$tags
else
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-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>
<div
style={{ 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
}
docker 发布应用时添加 git revision的更多相关文章
- goalng 发布的版本中自动加上 git revision
概述 起因是这样的,在编译发布 golang 工程时,希望版本号中包含有 git revision number. 但是,没有commit之前,是没法知道 revision number 的,comm ...
- Jenkins+Harbor+Docker发布
使用Jenkins发布Docke 需要准备的,docker,jenkins,Harbor docker安装 安装依赖: # yum install -y yum-utils device-mapper ...
- docker 发布方式尝试
docker 发布方式尝试 目前有个小项目, 尝试用docker的方式来发布, 项目只有一个节点, 使用 kubenate 有点小题大做, 所以采用docker-compose来发布. 发布过程 GI ...
- asp.net core项目发布网站时的选项
发布网站时的选项 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, ...
- ARCGIS Server 发布服务时出现的问题解决
target='CFH.ConfigurationFactoryHost' machine='IBM3850X5' thread='24072' elapsed='0.31200'>Ser ...
- dedecms发布文章时多个Tag间分割逗号自动变成英文逗号
dedecms发布文章时经常会添加多个Tag,我们输入汉字时总是喜欢使用全角的逗号,那么有没有办法使用JS脚本把输入的Tag间中文逗号变成英文逗号呢? dedecms发布文章时多个Tag间分割逗号自动 ...
- VS2010 发布网站时如何使DLL文件名固定
VS在发布网站时,bin目录里为所有cs生成的dll文件每次都是随机命名的,如:App_Web_xxxxxxxx.dll(xxxxxxx是8个小写的字母和数字组成的字符串,随机的),这样对更新 Liv ...
- 当git上文件大小写重命名的修改时(git大小写敏感/默认不敏感),如何提交
git默认是大小写不敏感!!! 加了感叹号是什么意思呢,意思就是这本身就是一个坑,本人使用的IDE是idea(网上说Eclipse可以避开问题),这个IDE本身就集成了git,但是如果要在termin ...
- Docker 发布 Abp net core web 服务
Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...
随机推荐
- vscode搜索所有文件夹中所有文件的方法
最近在看opencv相关的内容,看到画图这一部分时,提示我 这些代码都来自OpenCV代码的sample文件夹. 按照他的提示,我打开了相应的文件夹,却发现,so many 文件 and 文件夹,这 ...
- NeatUpload .NetFromWork4.0 config配置
NeatUpload使用---config配置(可进行大文件传输) configuration> 下增加: <configSections> <sectionGroup nam ...
- 高性能TcpServer(C#) - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)
高性能TcpServer(C#) - 1.网络通信协议 高性能TcpServer(C#) - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP) 高性能TcpS ...
- Java问题记录——OutOfMemoryError
Java问题记录——OutOfMemoryError 摘要:本文主要分析了OutOfMemoryError的产生原因. 没有分页导致占用大量内存 查看进程 使用 jps 命令查看当前运行的Java进程 ...
- 渗透常见linux命令
在拿到一个 webshell 之后,大家首先会想到去把自己的权限提升到最高,windows 我们会提升到 SYSTEM 权限,而 Linux 我们会提升到 root 权限,拿在进行 Linux 提权的 ...
- maven 学习---POM机制
POM 代表工程对象模型.它是使用 Maven 工作时的基本组建,是一个 xml 文件.它被放在工程根目录下,文件命名为 pom.xml. POM 包含了关于工程和各种配置细节的信息,Maven 使用 ...
- ConstraintLayout 用法
当前描述是基于constraint-layout:1.1.2. 一.前言 在以前,android是使用布局如LinearLayout .RelativeLayout等来构建页面,但这些布局使用起来很麻 ...
- 【Android】天气应用
模仿华为的"天气"应用写的一个小Demo.部分功能.动画效果没有实现,也没有过多考虑性能.Bug等其它方面的因素.写这个Demo的初衷是想熟悉下目前网上常用的一些框架. Demo采 ...
- python基础-内置装饰器classmethod和staticmethod
面向对象编程之classmethod和staticmethod classmethod 和 staticmethod都是python内置的装饰器 classmethod 的作用:给在类内部定义的方法装 ...
- 在表单中使用ajax,成功后跳转指定页面 出现Provisional headers are shown 解决办法
问题回顾: 在表单里面,有个button按钮,在点击这个button的时候,我发送了ajax请求,然后请求成功的话,就使用window.location.href = xxx,跳转到其他页面 但是,一 ...