# UAT 流水线:构建镜像并推送到 Harbor(方案 A) 在现有 **UAT Maven + jar 部署** 流水线上增加可选阶段,把业务镜像推到: ```text 39.105.153.68/alien_cloud/<服务名>:uat-build- ``` 生产侧 **Gateway-K8s / Alien-Cloud-K8s-Whole** 使用同一 tag 作为 `SOURCE_TAG` 做晋升。 脚本:`docs/jenkins/Jenkinsfile-uat-build-deploy.groovy` --- ## 一、整体流程 ```text 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) - [x] 项目 `alien_cloud` 已存在 - [x] 基础镜像 `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 容器内) ```bash # 探测 Registry curl -sI http://39.105.153.68/v2/ # 登录(与凭据一致) echo '' | docker login 39.105.153.68 -u 'robot$alien_cloud+jenkins-k8s' --password-stdin ``` 若 HTTP + IP 访问,需在 **运行 docker 的宿主机** `/etc/docker/daemon.json` 增加: ```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` | 构建成功后日志末尾应有: ```text >>> pushed 39.105.153.68/alien_cloud/gateway:uat-build- >>> Prod promote: SOURCE_TAG=uat-build- ``` 记下 **``** = Jenkins 构建号。 --- ## 五、验证 Harbor 浏览器打开:`http://39.105.153.68/harbor/` → 项目 **alien_cloud** → 镜像仓库应出现 **`gateway`**,标签 **`uat-build-`**。 或命令行: ```bash curl -s -u 'robot$alien_cloud+jenkins-k8s:' \ 'http://39.105.153.68/v2/alien_cloud/gateway/tags/list' ``` --- ## 六、接生产晋升流水线 在 **Gateway-K8s** 或 **Alien-Cloud-K8s-Whole**: | 参数 | 值 | |------|-----| | `SOURCE_TAG` | `uat-build-`(与 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-` 完全一致 | --- ## 九、与现网 jar 部署的关系 - **Deploy Services** 阶段仍会拷 jar 并 `docker restart` UAT 容器,**不影响**现有 UAT 访问方式。 - Harbor 镜像供 **ACK / 生产晋升** 使用,两套路径可并行。 - 日常若只更新 UAT 机 jar、暂不发 ACK,可 `PUSH_TO_HARBOR=false`。