README-UAT-HARBOR-PUSH.md 4.9 KB

UAT 流水线:构建镜像并推送到 Harbor(方案 A)

在现有 UAT Maven + jar 部署 流水线上增加可选阶段,把业务镜像推到:

39.105.153.68/alien_cloud/<服务名>:uat-build-<Jenkins构建号>

生产侧 Gateway-K8s / Alien-Cloud-K8s-Whole 使用同一 tag 作为 SOURCE_TAG 做晋升。

脚本:docs/jenkins/Jenkinsfile-uat-build-deploy.groovy


一、整体流程

UAT Jenkins Job(88:30003)
  1. Checkout(拉 alien_cloud 预生产分支)
  2. Maven Build(mvn clean package)
  3. Push images to Harbor(PUSH_TO_HARBOR=true 时)
       docker build → push 39.105.153.68/alien_cloud/gateway:uat-build-42
  4. Deploy Services(拷 jar 到 /app_deploy_uat + docker restart,与现网一致)

Harbor Web(153.68)出现 gateway 仓库

生产 Jenkins(同机,另一文件夹)
  Gateway-K8s / Whole:SOURCE_TAG=uat-build-42 → produ-xxx → ACK

二、一次性准备(运维 / Jenkins 管理员)

2.1 Harbor(153.68)

  • 项目 alien_cloud 已存在
  • 基础镜像 alien_cloud/base/openjdk8-ffmpeg:v1 已 push
  • 机器人 robot$alien_cloud+jenkins-k8s 具备 推送 权限

2.2 Jenkins 凭据(全局,UAT / 生产 Job 共用)

ID 类型 内容
harbor-robot-alien Username with password 用户 robot$alien_cloud+jenkins-k8s,密码=Token
zhanghaomimapingzheng Git UAT Job SCM 已在使用

2.3 Jenkins 执行机 Docker(通常在 88 本机或 Jenkins 容器内)

# 探测 Registry
curl -sI http://39.105.153.68/v2/

# 登录(与凭据一致)
echo '<TOKEN>' | docker login 39.105.153.68 -u 'robot$alien_cloud+jenkins-k8s' --password-stdin

若 HTTP + IP 访问,需在 运行 docker 的宿主机 /etc/docker/daemon.json 增加:

{
  "insecure-registries": ["39.105.153.68"]
}

然后 systemctl restart docker(注意:若在 153.68 上误执行会影响 Harbor,应在 88 Jenkins 节点 配置)。

2.4 将脚本提交到 Gitea

本地修改 docs/jenkins/Jenkinsfile-uat-build-deploy.groovy 后,push 到 UAT Job 使用的分支(如 uat-20260202)。


三、配置 UAT Jenkins Job

定义 Pipeline script from SCM
仓库 http://8.152.195.41:3000/alien/alien_cloud
分支 */uat-20260202(与你们一致)
Script Path docs/jenkins/Jenkinsfile-uat-build-deploy.groovy
SCM 凭据 Git(不要选 Harbor 机器人)

保存后先 立即构建一次,加载新参数。


四、Build with Parameters(推荐首次 gateway)

参数 首次试跑建议
GIT_BRANCH uat-20260202
FORCE_UPDATE 按需
PUSH_TO_HARBOR true
HARBOR_PUSH_SCOPE gateway-only
HARBOR_REGISTRY 39.105.153.68
HARBOR_PROJECT alien_cloud

构建成功后日志末尾应有:

>>> pushed 39.105.153.68/alien_cloud/gateway:uat-build-<N>
>>> Prod promote: SOURCE_TAG=uat-build-<N>

记下 <N> = Jenkins 构建号。


五、验证 Harbor

浏览器打开:http://39.105.153.68/harbor/ → 项目 alien_cloud → 镜像仓库应出现 gateway,标签 uat-build-<N>

或命令行:

curl -s -u 'robot$alien_cloud+jenkins-k8s:<TOKEN>' \
  'http://39.105.153.68/v2/alien_cloud/gateway/tags/list'

六、接生产晋升流水线

Gateway-K8sAlien-Cloud-K8s-Whole

参数
SOURCE_TAG uat-build-<N>(与 UAT 构建号一致)
DEPLOY_STRATEGY skip(只晋升 Harbor),再 rolling
DEPLOY_MODE 单服务用 single + gateway

七、参数说明

参数 说明
PUSH_TO_HARBOR false=保持旧行为,只 jar 部署;true=增加 Harbor push
HARBOR_PUSH_SCOPE gateway-only 只推 gateway;all-java-services 推七个服务(Maven 须全部打包成功)
UAT_HARBOR_IMAGE_TAG 自动 uat-build-${BUILD_NUMBER},无需手填

八、常见问题

现象 处理
not found pull 基础镜像 确认 Harbor 有 base/openjdk8-ffmpeg:v1
Login Succeeded 后 push 失败 机器人是否有项目 push 权限
x509 / 证书错误 88 上 insecure-registries 或 HTTPS + ca.crt
Harbor 仍无 gateway 是否勾选了 PUSH_TO_HARBOR;Maven 是否打出 alien-gateway/target/*.jar
生产 Whole 仍 not found SOURCE_TAG 必须与 UAT 构建日志中的 uat-build-<N> 完全一致

九、与现网 jar 部署的关系

  • Deploy Services 阶段仍会拷 jar 并 docker restart UAT 容器,不影响现有 UAT 访问方式。
  • Harbor 镜像供 ACK / 生产晋升 使用,两套路径可并行。
  • 日常若只更新 UAT 机 jar、暂不发 ACK,可 PUSH_TO_HARBOR=false