前置说明
域名解析
由于你的 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. 执行测试 & 日志检查
- 提交代码:点击 “Commit” 提交,或手动到 Build -> Pipelines 页面点击 “Run pipeline”。
- 查看 Job 详情,重点检查以下日志:
- 登录阶段:是否出现
Login Succeeded!?(不通则检查 hostAliases IP) - 构建阶段:是否正常拉取基础镜像并打包?(不通则检查 Dockerfile 路径)
- 推送阶段:是否出现
Writing manifest to image destination?(不通则检查 Harbor 机器人账号权限)
- 登录阶段:是否出现