概要

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" ]; 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的更多相关文章

  1. goalng 发布的版本中自动加上 git revision

    概述 起因是这样的,在编译发布 golang 工程时,希望版本号中包含有 git revision number. 但是,没有commit之前,是没法知道 revision number 的,comm ...

  2. Jenkins+Harbor+Docker发布

    使用Jenkins发布Docke 需要准备的,docker,jenkins,Harbor docker安装 安装依赖: # yum install -y yum-utils device-mapper ...

  3. docker 发布方式尝试

    docker 发布方式尝试 目前有个小项目, 尝试用docker的方式来发布, 项目只有一个节点, 使用 kubenate 有点小题大做, 所以采用docker-compose来发布. 发布过程 GI ...

  4. asp.net core项目发布网站时的选项

    发布网站时的选项 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, ...

  5. ARCGIS Server 发布服务时出现的问题解决

    target='CFH.ConfigurationFactoryHost'  machine='IBM3850X5'  thread='24072'  elapsed='0.31200'>Ser ...

  6. dedecms发布文章时多个Tag间分割逗号自动变成英文逗号

    dedecms发布文章时经常会添加多个Tag,我们输入汉字时总是喜欢使用全角的逗号,那么有没有办法使用JS脚本把输入的Tag间中文逗号变成英文逗号呢? dedecms发布文章时多个Tag间分割逗号自动 ...

  7. VS2010 发布网站时如何使DLL文件名固定

    VS在发布网站时,bin目录里为所有cs生成的dll文件每次都是随机命名的,如:App_Web_xxxxxxxx.dll(xxxxxxx是8个小写的字母和数字组成的字符串,随机的),这样对更新 Liv ...

  8. 当git上文件大小写重命名的修改时(git大小写敏感/默认不敏感),如何提交

    git默认是大小写不敏感!!! 加了感叹号是什么意思呢,意思就是这本身就是一个坑,本人使用的IDE是idea(网上说Eclipse可以避开问题),这个IDE本身就集成了git,但是如果要在termin ...

  9. Docker 发布 Abp net core web 服务

    Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...

随机推荐

  1. Kubernetes 部署Web UI (Dashboard)

    Kubernetes 部署Web UI (Dashboard) 项目下载地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/ ...

  2. ElasticSearch简介(一)——基础

    基本概念 1.  Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点 ...

  3. 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码(转载)

    转载:  https://www.cnblogs.com/shushen/p/5311828.html 弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长 ...

  4. rabbitmq 实现多个消费队列

    1.将消费程序复制重新生成一个. 2.channel.BasicQos(0, 1, false); 空闲的先消费

  5. Vue.js 源码分析(七) 基础篇 侦听器 watch属性详解

    先来看看官网的介绍: 官网介绍的很好理解了,也就是监听一个数据的变化,当该数据变化时执行我们的watch方法,watch选项是一个对象,键为需要观察的数据名,值为一个表达式(函数),还可以是一个对象, ...

  6. 如何在linux CentOS 上安装chrome 谷歌浏览器?

    获得linux命令的root权限:http://blog.csdn.net/mddy2001/article/details/76521101. 更改密码在终端中输入:sudo passwd root ...

  7. BBR加速 Centos

    BBR是什么 BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟. BBR项目地址 https://github.com/goo ...

  8. Java常用算法总结

    冒泡排序 从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧. 在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出. 代码如下: public ...

  9. vnc服务器和windows2012密钥

    [root@localhost ~]# vncserver #启动服务器 windows 2012 64位-server版本的密钥 Windows Server 2012 Standard 密钥:NB ...

  10. shell编写for例子

    1.批量打包sh文件 #!/bin/bash -name "*.sh"` do tar -czvf $i.tgz $i done 2.批量解压文件 #!/bin/bash -nam ...