跳至正文

GitLab Runner构建推送镜像至Harbor

前置说明

域名解析

由于你的 Runner 在 Pod 内部,必须能解析 harbor.infraserviceonline.com。如果你之前在部署 Runner 时已经在 values.yaml 加上了 hostAliases 指向你的网关 IP,那么这里会直接通。

安全性

虽然你要求先用 admin,但生产环境强烈建议在 Harbor UI 里的 “机器人账户 (Robot Accounts)” 下创建一个专用账号,给它推镜像的权限即可。

Storage Driver

在 K8s 容器内跑 Podman,加上 –storage-driver=vfs 是最稳的,能避开很多层级挂载的权限问题。

GitLab CI 构建+推送测试

1. 准备 Dockerfile

在 GitLab 项目根目录创建 Dockerfile

# 使用最轻量的镜像作为基础
FROM alpine:latest
RUN echo "Build from GitLab Runner via Podman" > /build_info.txt
CMD ["cat", "/build_info.txt"]

2. 配置 .gitlab-ci.yml

stages:
  - build

variables:
  HARBOR_URL: "harbor.infraserviceonline.com"
  HARBOR_PROJECT: "library"
  IMAGE_NAME: "test-podman-image"

build_and_push:
  stage: build
  image: quay.io/podman/stable
  script:
    - echo "正在登录 Harbor..."
    - podman login $HARBOR_URL -u "$HARBOR_USER" -p "$HARBOR_PASSWORD" --storage-driver=vfs

    - echo "开始构建镜像..."
    - podman build --storage-driver=vfs -t $HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA .

    - echo "正在推送至 Harbor..."
    - podman push --storage-driver=vfs $HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA

    - IMAGE_DIGEST=$(podman inspect --format='{{.Digest}}' $HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA)
    - echo "镜像推送成功!下载地址为:$HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
    - echo "任务完成!"

3. 执行测试 & 日志检查

  1. 提交代码:点击 “Commit” 提交,或手动到 Build -> Pipelines 页面点击 “Run pipeline”。
  2. 查看 Job 详情,重点检查以下日志:
    • 登录阶段:是否出现 Login Succeeded!?(不通则检查 hostAliases IP)
    • 构建阶段:是否正常拉取基础镜像并打包?(不通则检查 Dockerfile 路径)
    • 推送阶段:是否出现 Writing manifest to image destination?(不通则检查 Harbor 机器人账号权限)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注