找回密码
 注册
关于网站域名变更的通知
查看: 240|回复: 1
打印 上一主题 下一主题

docker 发布应用时添加 git revision

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-13 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
概要
7 o4 s% v3 ^  j- ^, }( _# H实施步骤
# X  S" d3 X; L6 Z2 c
  • 获取 git revision
  • 前端 git revision 注入
  • 后端 git revision 注入
    : l% ~0 z& x6 k* u1 a0 X+ Z+ v2 G

4 }3 I. U9 W  ^4 W概要
( p/ [7 F  r, \/ Q. O, g& Y3 r. Ddocker 发布应用时, 将 git revision 注入到应用中, 在问题出现时, 可以迅速定位代码版本.5 A7 i* c# D8 U" L. M" V. G. n
# ~9 l  `. b7 L" N
实施步骤$ ]# N" `! e) T3 p4 O& @8 V
  • 获取 git revision
  • 将 git revision 传入具体的应用中
    4 R7 s% J- T+ n. K3 z# Q7 L% b; I
       前端的 revision 通过 yarn build 传入
/ s# ~* p2 `/ [7 m% d/ Q       后端的 revision 通过 环境变量传入3 f+ q& r9 |& `  ?5 K3 c6 H2 |& x

, c6 |6 v: z7 k. ~0 M: }1 R; O! z+ c获取 git revision
3 w5 W# A$ n$ L# V3 r6 ^% r
  • 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`
  • fi4 a( C- t! v% X' D! g

& E  Y2 H' P  J! C% r上面的代码是获取最新的 git revision 的前 8 位, 如果最新的 git revision 有 tag, 则使用 tag 获取的 git revision 放在 GIT_COMMIT 中.
! F6 k' e" H2 Q  D1 d9 W% h9 i: ^/ f8 j5 [' T$ F! }% Q2 P# k
前端 git revision 注入
: W% H9 K! M! ?首先是 docker build 命令中传入 git revision
# t2 H' n# ~5 I+ u% M+ ^) ~: G9 G4 s# R
docker build -t xxx.latest --build-arg VERSION=${GIT_COMMIT} . 9 S2 h% O8 j' y; _5 K5 \
" o! O8 t/ X9 j2 y) J7 r
然后在 docker file 中获取 VERSION, 并将其传给 yarn build 命令4 j9 M" a7 U- r9 ]- k

- Q2 _' F4 w# x/ ^* JARG VERSION=no-version          # 默认值 no-version
* i$ ~0 Q* J) m: J4 dRUN yarn
; M+ b* R( u: R- cRUN yarn build --VERSION=${VERSION}
' x9 V9 U; p* A" ]+ m$ f5 x1 ^' J5 F
4 m& X" H' y# e/ P8 L最后是前端工程中获取此变量, 并在页面的 footer 处显示 git revision
# P5 w9 T. _& n
4 x" K. U# y1 g# {     process.argv
3 n; f! U- M/ i       .filter(str => /^--/.test(str))  O2 U- L; k7 {* e+ [8 s7 E1 `
       .map(str => str.replace('--', ''))
0 J. W0 `1 o' C) S8 E: {       .forEach(str => {
7 \6 Y* S7 f/ A, u" x3 [7 M# m( b         let sub = str.match(/([\s\S]*)\=([\s\S]*)/)
1 A- S% p  E( |' Y. P( W
( D8 Y$ g6 T9 h4 H         sub ? (TYPE[sub[1]] = sub[2]) : (TYPE[str] = true)+ }3 n) K/ \6 t
       })
- O5 {7 f- i5 J' S4 W5 J( z2 k& e# y  H4 m4 n+ }9 ^7 H
const mergeWebpackConfig = () => (config, env) => {& C( d8 R4 z3 p* j4 S( S  E1 y
  // ...省略...4 u0 b0 v5 h$ U+ w
, g% E" M4 G- k0 d9 H8 S
  config.plugins = (config.plugins || []).concat([
+ w. @% H) ~; h4 L    new webpack.DefinePlugin({
7 I5 N5 Y, X2 E( @$ h% M      'process.env.VERSION': JSON.stringify(TYPE['VERSION'])
) l( @2 j, x" g7 c7 f    })' G/ i3 _7 h9 {+ }% ]3 g
  ])  v5 B" e; j: _2 ]1 ~0 ~2 t
  // ...省略..., E  a7 q8 |3 Y* `) R! ]
}1 T" y5 V, h6 ~
<Footer>4 O  S1 u1 {; P+ q
  <div
- b3 m+ `2 l* S9 [5 W7 B, r' h$ _    style={{ textAlign: 'center' }}
1 p/ X" A3 x2 C2 t$ q) N    className="gx-layout-footer-content") b4 j! Q$ a& h
  >
* W7 C7 g4 E/ p: L# O    Copyright © 2019 {process.env.VERSION}7 Y4 F( p- n; z, T
  </div>- |! `3 X  j7 P" I& v0 h, l2 N" g
</Footer>
5 d) u4 }) U/ ~) e6 f) S0 E+ M* n; _( [2 [4 `

% T8 \  G+ _+ @) a后端 git revision 注入
$ {! k" k5 j! v0 _2 I
9 f: s; w) w3 A: _本文的例子是基于 golang 的 API 后端, 获取 git revision 的方法和上面类似.
. l; c0 h: P) z3 L6 F
6 V; D* L" y. [. ^0 B获取 git revision 之后, 在 docker file 中获取 VERSION, 并设置环境变量 VERSION
  k- c/ U2 c0 D8 E8 H2 v1 y4 \
8 Q9 f! j% D* ?) d1 F7 F' d' o( a6 bARG VERSION=no-version
$ W# I- ]  Q- O6 hENV VERSION=${VERSION} ( m- L, L, v8 N) n& n* \

' c" [0 `, z$ f- B* xAPI 服务添加 -v 参数, 用来显示服务的版本/ k/ l# r7 P( U
$ s+ V/ A: `- x. r- _! T8 q
ver := flag.Bool("v", false, "verify version")2 h* R; @- {* P1 `0 T& B2 w
flag.Parse()3 y2 F, }5 ^" S/ C+ C9 Z
4 `- a- I& h$ S: C8 _; o
if *ver {
; ^; l! T" r3 R+ B9 G/ R( b2 |        fmt.Println(os.Getenv("VERSION"))5 x+ C! E8 s) m% m& s0 q! f
        return9 y* `9 p& E- }3 R$ x* h( c
}$ W# W/ n# b3 Y

. X* G, O( f" }5 p& x& q# L% x+ j
3 V+ D1 r8 D  T  Z

该用户从未签到

2#
发表于 2020-7-13 15:18 | 只看该作者
docker 发布应用时添加 git revision
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-28 20:59 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表