EDA365电子论坛网

标题: docker 发布应用时添加 git revision [打印本页]

作者: baqiao    时间: 2020-7-13 13:56
标题: docker 发布应用时添加 git revision
概要
- O; s: u  ~+ i实施步骤8 j% c' h/ [" f4 A
) J$ u& U2 ^1 X3 [  s) a8 }; ^8 ~
概要& s  {2 q' M0 i# B' Q
docker 发布应用时, 将 git revision 注入到应用中, 在问题出现时, 可以迅速定位代码版本.# h2 Y- O0 b! ^, _. R
' N: ~' S0 m% A8 g7 b$ d' M; |
实施步骤* s) T4 V- I  e* C1 [
       前端的 revision 通过 yarn build 传入% r. Z# |6 v0 I; d
       后端的 revision 通过 环境变量传入
! t2 u: j2 e* g& w6 C3 D3 z" |- U8 p
获取 git revision; f5 @& e( w0 R. d  j
& r; m  n* L2 r# y1 c4 B
上面的代码是获取最新的 git revision 的前 8 位, 如果最新的 git revision 有 tag, 则使用 tag 获取的 git revision 放在 GIT_COMMIT 中.
# S# c, j6 q% @  h$ B( q6 z$ S( f! n; ]% M9 H# ^9 ^* E
前端 git revision 注入
4 U) c8 o: J( X首先是 docker build 命令中传入 git revision
! H% ^$ a. h8 s7 ~5 ?" d
$ Y7 I6 Y+ ]/ B  a( x; A% _4 R0 t' ]docker build -t xxx.latest --build-arg VERSION=${GIT_COMMIT} . $ X( Q9 A0 q6 J' m& E

' I( X( y7 q0 y& ~) i然后在 docker file 中获取 VERSION, 并将其传给 yarn build 命令
* ~+ |- S7 U* j! H, f! K
+ g+ T& M; Q! X$ V) {; H; N* NARG VERSION=no-version          # 默认值 no-version
& M8 [2 H" b0 f1 U/ ?RUN yarn
( m: g9 F" R% G8 k: aRUN yarn build --VERSION=${VERSION}( B/ p- B" B5 X! X) H9 x

! z- d6 T3 t* D: x最后是前端工程中获取此变量, 并在页面的 footer 处显示 git revision
! z8 d1 _5 @( A' E2 I& k9 R2 v( [/ b5 u+ U: J& p" R; @
     process.argv
" g* c' \( D/ A4 n5 E+ \* K       .filter(str => /^--/.test(str))2 `$ C# M1 m; @! Y
       .map(str => str.replace('--', ''))* p$ b; W  t2 V7 {# [
       .forEach(str => {
+ x$ M$ D/ `* v7 a  v$ n         let sub = str.match(/([\s\S]*)\=([\s\S]*)/), d' D+ c* v( @  P5 r9 t
1 x$ N& m" e, `: e0 A9 E% {
         sub ? (TYPE[sub[1]] = sub[2]) : (TYPE[str] = true)" s5 E) ~2 j3 \7 R! \
       })
: w5 R: b8 H6 D1 J3 C3 A$ B
8 |4 h9 h/ R6 a5 z: n* lconst mergeWebpackConfig = () => (config, env) => {
" ~7 X% d# |7 Z; d8 B8 J* d1 E0 n  // ...省略.../ i8 a* Z+ _; ~+ Y2 k* r- n/ j
7 \' Q0 q" v, j3 L7 f; T' k
  config.plugins = (config.plugins || []).concat([6 x2 c2 a3 K* j* C' ]' P' O' V0 `
    new webpack.DefinePlugin({
! t/ O1 Q! x& n# G      'process.env.VERSION': JSON.stringify(TYPE['VERSION'])1 f2 |% Y$ I" E1 o% e
    })5 X% S7 v2 @+ O7 E' b7 q0 v) R8 X
  ])
/ i( {  F5 ~3 W' D' B2 R+ |. ?7 ^  // ...省略...
  `% N9 w8 i# f( L( x$ z2 W; @* G}$ f; M/ o) P' k  b; P, G/ X
<Footer>
0 Y( k& d* _% L  O' L1 m  <div3 t$ Q- H, M% y5 {2 B! D
    style={{ textAlign: 'center' }}
# S6 e( V. B8 E) R% \3 p8 P0 @    className="gx-layout-footer-content"9 }: \0 [; e, z& L1 f3 C. \
  >2 H9 A0 H8 {9 Q0 u4 W$ o8 n
    Copyright © 2019 {process.env.VERSION}
& f4 }6 c9 i% h$ a, ^3 |4 Z  </div>5 q# v- }2 e- m! A
</Footer>) U& c/ M' I  A2 J5 y" J

* f% G" d4 h) F5 i! k3 G  X6 ]! c- Q
! K* `% N+ m: \( \" d% n( V* @后端 git revision 注入/ S- d' q4 [9 ]

" l' q& z8 N, W. l) m本文的例子是基于 golang 的 API 后端, 获取 git revision 的方法和上面类似.
3 t9 y+ P2 o$ k5 }: F
5 l1 A: A1 d& d, e) V获取 git revision 之后, 在 docker file 中获取 VERSION, 并设置环境变量 VERSION1 f  E) }1 C8 z+ T

7 V, U* u& Z; e; L- ZARG VERSION=no-version
6 l; C; p( ]& J% s  Z) K# U) WENV VERSION=${VERSION} / |+ o9 o1 b6 _  S

# g5 X, l' A  X4 }API 服务添加 -v 参数, 用来显示服务的版本
8 K5 r2 d; n9 I$ ^# ?4 T
/ \0 A. J+ V7 [9 w8 Uver := flag.Bool("v", false, "verify version")
4 B2 |8 w. P' |$ V+ Z0 eflag.Parse()/ r" u: e+ z6 |  `3 b" [: S* J
( P8 [" y* o5 T* ~* X$ M
if *ver {0 x- A6 }. R- U6 S0 \
        fmt.Println(os.Getenv("VERSION"))
: u$ |' Z- o- f" E        return
- i9 x& T$ m" T$ g4 p}
! z5 ~& q/ {, N& z$ t/ `& \; a7 t0 {* m. i
) j. ^  x9 j+ d2 v- E

作者: NingW    时间: 2020-7-13 15:18
docker 发布应用时添加 git revision




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2