You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI多阶段构建后续任务Docker镜像过时如何解决?

问题原因

GitLab Runner 默认采用 if-not-present 镜像拉取策略,本地存在同标签镜像时就不会主动拉取远程仓库的最新版本。你用分支名作为镜像标签,分支多次构建后同标签镜像内容更新,Runner 就会用到本地缓存的旧镜像。

解决方法

方法1:单个任务配置强制拉取最新(推荐)

GitLab Runner 13.7 及以上版本支持在CI配置中直接指定镜像拉取策略,给需要用最新镜像的任务加上 pull_policy: always 即可,修改后的配置如下:

stages:
  - create_builder_image
  - test

Create Builder Image:
  stage: create_builder_image
  script:
    - export DOCKER_BRANCH_TAG=$CI_COMMIT_REF_SLUG
    # 执行镜像构建相关操作,使用缓存提升构建速度
    - docker push $GITLAB_IMAGE/builder:$DOCKER_BRANCH_TAG

Run Tests:
  image: 
    name: $GITLAB_IMAGE/builder:$CI_COMMIT_REF_SLUG
    pull_policy: always
  stage: test
  script:
    # 在第一阶段构建的镜像环境中执行相关操作

如果需要所有任务都强制拉取最新,可以把这段配置写到全局的 default 块里:

default:
  image:
    pull_policy: always

方法2:全局配置Runner拉取策略

如果要让所有使用该Runner的任务都强制拉取最新镜像,可以修改Runner所在节点的 config.toml 配置,在对应Executor的配置段添加:

pull_policy = "always"

额外优化建议

用分支名作为镜像标签本身有被覆盖的风险,更稳妥的方式是用本次提交的唯一哈希作为镜像标签:将标签替换为 $CI_COMMIT_SHORT_SHA,每次构建的镜像标签唯一,完全不会出现用错旧镜像的问题,同时还可以保留分支名标签给其他场景使用。

内容的提问来源于stack exchange,提问作者Marcus Ilgner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:36:02