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

docker 发布应用时添加 git revision

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
概要
2 W" _6 a8 K& h7 f: e' M. l实施步骤( X% J7 O* V2 y- }: ^1 i1 y5 H
  • 获取 git revision
  • 前端 git revision 注入
  • 后端 git revision 注入
    $ G/ Q# p/ n  }/ F( C9 e- O9 Z

$ I5 K- [' F8 z1 |概要
8 {+ A7 a' ]* g6 l5 g2 G' cdocker 发布应用时, 将 git revision 注入到应用中, 在问题出现时, 可以迅速定位代码版本., [: z4 d2 n& e7 V9 V6 Q  b

( y$ |' Y. u3 V4 P8 D' f实施步骤. Z: s0 \; m* m3 _3 h
  • 获取 git revision
  • 将 git revision 传入具体的应用中# _" L5 K4 `+ A
       前端的 revision 通过 yarn build 传入
' ?7 j+ [& c* Y5 I9 T- q& Y       后端的 revision 通过 环境变量传入6 Q' T; d, u, i9 z. [5 ~
5 {+ U  l4 c$ r
获取 git revision, F8 ~* ?  V. w; T( p6 P& u* R8 t
  • 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/ f/ d3 }) U6 {) ^4 E% w+ I
; i& G& I# x& G: ]1 Z$ Q9 q- l4 m
上面的代码是获取最新的 git revision 的前 8 位, 如果最新的 git revision 有 tag, 则使用 tag 获取的 git revision 放在 GIT_COMMIT 中.
! T5 |2 U( n( I7 |
6 |) ^% s6 o) W/ u前端 git revision 注入, M1 U4 ~* F% a4 R/ ]
首先是 docker build 命令中传入 git revision
0 L' f7 C( \; |& }9 W4 b+ E# _) W( w5 c- {! N: ]  P- d
docker build -t xxx.latest --build-arg VERSION=${GIT_COMMIT} .   f8 S8 j4 [/ o$ q: j

* p" B( a6 s" t& K% Q然后在 docker file 中获取 VERSION, 并将其传给 yarn build 命令- e- e7 {0 x5 v; L( c

0 [- c% L/ e: [0 ?3 ?ARG VERSION=no-version          # 默认值 no-version
, y9 |* T; j; j& [4 D1 v0 @( SRUN yarn
, E# [) Y: W" }6 @4 K1 qRUN yarn build --VERSION=${VERSION}+ w  g1 A% D1 G$ l
: ]7 ^& i9 m, |' |! f: v6 v- ]
最后是前端工程中获取此变量, 并在页面的 footer 处显示 git revision
' `* }! \% [" d5 q! ]  r: q6 ]$ j$ i# G- W  l/ T* @1 `* e
     process.argv7 U2 W: a1 S! m  G0 y" p
       .filter(str => /^--/.test(str))
' x$ e( r9 I$ G' M! @4 |* v       .map(str => str.replace('--', ''))
2 o5 e% a% a+ j' g       .forEach(str => {
7 u9 @1 V! L( f! j. z* E         let sub = str.match(/([\s\S]*)\=([\s\S]*)/)
7 f( }- G9 L5 P7 I" n! D6 h% A- R# H) P& ]& b& v
         sub ? (TYPE[sub[1]] = sub[2]) : (TYPE[str] = true)  l) W& E( d9 R! q% s! K7 S
       })
, B+ _, U5 u* E& U; M0 A8 N. q2 n8 W) v, [. ?6 m! t
const mergeWebpackConfig = () => (config, env) => {: a  ]* `7 t" t5 }3 M, Q; E) f5 l
  // ...省略...
: F- L# Y- T7 A% t2 }6 e  j8 J" I+ J$ |4 U( c7 e8 C
  config.plugins = (config.plugins || []).concat([; H( o7 x2 u9 S3 e: V
    new webpack.DefinePlugin({: l1 `: F! t8 H9 L- s
      'process.env.VERSION': JSON.stringify(TYPE['VERSION'])* t5 V4 J6 P: D! _- w
    })0 N! D! w/ V9 M7 l. I2 S" h
  ])
: t0 Z) r  o2 {& O  // ...省略...1 j4 w0 {' M- v7 j. K4 C
}+ [+ h7 N. N+ k; K, E5 ?
<Footer>0 P" W* L: O# ~
  <div
9 }; V2 X2 [3 W9 e9 h    style={{ textAlign: 'center' }}3 m2 `- Q# y) Y: o. H; _$ o
    className="gx-layout-footer-content"0 g; H8 J+ h0 b! h4 @8 {& f8 I
  >
' a5 E" N/ L' E, L- [# F4 d% p2 m) Q    Copyright © 2019 {process.env.VERSION}+ H3 O  f$ }, `3 @6 M
  </div>
( A' z9 k' ]- x- Z2 `</Footer>* ~5 W0 B: k; ~8 D8 S
7 ~, U: K' n% O- N8 q7 k

7 z6 U8 K" B1 l后端 git revision 注入  D* H  t8 g' _: Y+ r) l

* b+ F9 W2 a( D5 T% b0 T6 Y: S本文的例子是基于 golang 的 API 后端, 获取 git revision 的方法和上面类似.
" V, h$ Y9 \* j) T  m' Q, [$ ]: s1 e6 B- m
获取 git revision 之后, 在 docker file 中获取 VERSION, 并设置环境变量 VERSION
! U4 j# {+ E$ ~9 ~1 i) G$ p; f: r8 f: D- B& @: o5 a6 q6 ~( H3 U9 X
ARG VERSION=no-version
3 s: l9 j6 H) A8 z6 Q! E- j2 Y- ?ENV VERSION=${VERSION} * e) _  f/ q7 H4 ]2 S5 U

! Q$ Q9 i$ S/ d( kAPI 服务添加 -v 参数, 用来显示服务的版本9 D5 \; D& _, I" D' A; g6 B
- c# D* q5 v% F6 {9 M
ver := flag.Bool("v", false, "verify version")& ?0 r7 V7 o' P) j& z
flag.Parse(); D8 ^5 W+ Z$ i
! s+ V- j0 e' {4 ?! k9 h
if *ver {) G6 l( H0 d; [% P
        fmt.Println(os.Getenv("VERSION"))
& U4 ^9 k+ I6 \1 ]        return
" k* x- b& e& `& w  @' `: Z}5 r5 y0 O  I7 x1 T& c. y

. \( l" O% w$ i% i5 d4 a" \% |
3 {3 G, v& I# h& Q

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-25 14:19 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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