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

docker 发布应用时添加 git revision

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
概要9 h! u5 D$ t' K, Q
实施步骤
1 J7 E' c0 u# ]* a
  • 获取 git revision
  • 前端 git revision 注入
  • 后端 git revision 注入7 R' D( B* o- k: C* I
; Q- s! t, r' a3 f! r0 f
概要4 J+ O* Q  o4 f: U! y) Y' b; F
docker 发布应用时, 将 git revision 注入到应用中, 在问题出现时, 可以迅速定位代码版本.
! [3 n1 g5 Z$ G0 Q: q
! J( t9 Z% J5 o/ Q$ w; |" v实施步骤8 q" M3 [1 O2 R6 R$ I3 w6 _+ l0 o( l$ C
  • 获取 git revision
  • 将 git revision 传入具体的应用中
    ; R& s+ \# a  T* E" Y1 e( W
       前端的 revision 通过 yarn build 传入
% \5 z. n6 Z  I: l( C2 f/ Q* F; N       后端的 revision 通过 环境变量传入& x- |+ g0 |' n" Y  Y7 X- b4 S8 f
2 {6 F  x+ V& u( G2 J/ A
获取 git revision
) H: C1 i1 ?7 [8 D
  • 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  o' e. R+ H; O) q, f) V  S
, L8 E7 f3 ?+ h. j3 G/ m
上面的代码是获取最新的 git revision 的前 8 位, 如果最新的 git revision 有 tag, 则使用 tag 获取的 git revision 放在 GIT_COMMIT 中.
$ @& c3 d# M! [$ r4 d
$ b+ ]; x* @6 F+ z  C6 s前端 git revision 注入
4 U; O5 d# N" S6 F4 p首先是 docker build 命令中传入 git revision
7 l/ z5 Q) i7 m& V8 H' @9 u9 Z$ c6 b. R2 d/ n$ w( Y! E8 j5 }
docker build -t xxx.latest --build-arg VERSION=${GIT_COMMIT} . 2 E' z- S$ f' t# n% I3 g5 L" L
+ J1 i6 I% u$ q+ r+ S
然后在 docker file 中获取 VERSION, 并将其传给 yarn build 命令4 \* a* U$ x" k! J6 _

( P& p8 C8 G% b1 N; x/ w# m4 g9 X5 [ARG VERSION=no-version          # 默认值 no-version1 T4 ~; t  U$ s1 y. x1 |
RUN yarn
3 {$ N& f* q  _3 Q! @RUN yarn build --VERSION=${VERSION}
4 K# K7 R+ o9 C- d0 A; x& g  c& W; e. \6 p, P0 ^2 D
最后是前端工程中获取此变量, 并在页面的 footer 处显示 git revision  d8 I( o. i# |* k. L) G3 j' k

7 g, X2 n* D. L4 c( I% {     process.argv
. K$ [' n* ?7 M7 R! P) w/ h       .filter(str => /^--/.test(str))
1 q, S# P3 U6 X& \  I+ z+ X+ [       .map(str => str.replace('--', ''))
& V0 W( f8 r+ M! _       .forEach(str => {* R; n" f+ S0 B  K( N8 h! y- W
         let sub = str.match(/([\s\S]*)\=([\s\S]*)/)
* P: U* O" L, `1 H* E) v6 A3 b6 H$ p. z8 h/ z; ~
         sub ? (TYPE[sub[1]] = sub[2]) : (TYPE[str] = true)9 b' r. L9 w8 R6 t
       })8 h# H- E. E2 H4 j: V1 Z

5 `' b; l' O; w; ^' Q7 o* n5 [const mergeWebpackConfig = () => (config, env) => {
; K/ r6 a: T0 j- L: p8 u  // ...省略...8 G& T; m- p. l1 q6 a

" {- K/ n2 {3 m. {  config.plugins = (config.plugins || []).concat([
, ]. I8 c* q+ S) b2 w+ b    new webpack.DefinePlugin({
. P9 `- }( P  b  O: A      'process.env.VERSION': JSON.stringify(TYPE['VERSION'])+ ^; f7 U2 M! J: t3 j' p
    })
( O: u. D) N8 l" g  ])
0 X9 W; u: t" T; m5 C- k  // ...省略...: I4 R3 m) d: L# l" h. Y
}  F- r1 m/ E) f# m
<Footer>
9 b- r( w4 u, F* r3 Z) I* E- T4 ]  <div) d8 y" t& j6 T! l, }4 Q
    style={{ textAlign: 'center' }}
3 B; V; ~8 G3 T5 r; ?: t& Z3 Z    className="gx-layout-footer-content"
. b+ d6 G+ j' z7 U9 Y  >( b4 {/ v) D* G* _5 w7 _
    Copyright © 2019 {process.env.VERSION}0 }, _' |5 |1 j; F
  </div>
, A( _* F; _& r</Footer>
* v( ^* d) e' u3 h6 v% o. [& }7 J$ m- D3 _& y

& I  i8 j6 d. N9 z  [8 w- |0 i后端 git revision 注入" x' Z4 l3 e  C
+ q. C3 C* \. |& h& @5 {
本文的例子是基于 golang 的 API 后端, 获取 git revision 的方法和上面类似.2 H& q& @7 k( G! T2 b  M. \8 i
, A! ]% ?) W! @' f4 L/ L: k
获取 git revision 之后, 在 docker file 中获取 VERSION, 并设置环境变量 VERSION6 p6 d: E0 |1 r& c+ w: v- G$ l
9 |: o2 j9 t: ~5 \& k) W4 F# A
ARG VERSION=no-version! R$ G* j) {$ a) P- V
ENV VERSION=${VERSION}
7 a* ?& `; O( r7 l
" {2 j8 z9 Q1 A! f7 LAPI 服务添加 -v 参数, 用来显示服务的版本& K4 I& e3 e! m! q" l3 o* I5 H
" q" B1 l+ W; }5 W! ?2 q" a
ver := flag.Bool("v", false, "verify version")& \2 x7 `3 E  x3 I
flag.Parse()  q& t3 F7 y1 U3 G! P
; l+ j5 ]2 O3 t
if *ver {3 f- ^1 a0 G1 a8 }4 k
        fmt.Println(os.Getenv("VERSION"))
3 {% M2 E( F2 r' v1 e" L        return
" f* h* M: G7 e/ _- c}
& O" w' X) Y" }* f" Z9 B* T! ?5 m& C

/ }. P/ C: c2 ~# z8 D# Y6 L  ?( l; X

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 01:23 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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