现象
- 使用Dockerfile构建镜像的时候,git clone步骤可能被缓存跳过,即使git仓库是更新过的。这会导致构建出的镜像包含的仓库内容仍为旧版本,从而导致问题。
可能的方案
- 在git clone之前加入随机数输出,这样会保证每次都会重新clone,不太优雅
- github等托管平台api可以获取仓库状态
解决方案
以gitea为例:
- 在gitea中创建访问令牌
- 在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}