现象

  • 使用Dockerfile构建镜像的时候,git clone步骤可能被缓存跳过,即使git仓库是更新过的。这会导致构建出的镜像包含的仓库内容仍为旧版本,从而导致问题。

可能的方案

  • 在git clone之前加入随机数输出,这样会保证每次都会重新clone,不太优雅
  • github等托管平台api可以获取仓库状态

解决方案

以gitea为例:

  1. 在gitea中创建访问令牌
  2. 在Dockerfile的clone操作之前加入API查询操作,将状态保存到镜像中,从而只在仓库有修改的时候才触发clone
    ADD https://${GITEA_HOST}/api/v1/repos/${OWNER}/${REPO}/git/refs/heads/${BRANCH}?access_token=${TOKEN} version.json
    RUN git clone ${REPO_URL}