# Harbor:alien_cloud 项目与 Jenkins 对接 > **重要:** Harbor Web 与 Registry 在 **39.105.153.68**(浏览器如 `http://39.105.153.68/harbor/...`)。 > **不是** 39.106.135.88。`docker login` / `HARBOR_REGISTRY` 须用 **153.68**。 Jenkins(示例):`http://39.106.135.88:30003` — 可与 Harbor 分机部署,网络互通即可。 --- ## 当前进度(对照打勾) - [x] Harbor 项目 `alien_cloud`(私有) - [x] 机器人 `robot$alien_cloud+jenkins-k8s`(拉取/推送等权限) - [ ] Token 写入 Jenkins 凭据 `harbor-robot-alien` - [ ] 在 **有 Docker 的机器** 上 `docker login` **39.105.153.68** 成功 - [ ] 推送基础镜像 `39.105.153.68/alien_cloud/base/openjdk8-ffmpeg:v1` - [ ] UAT Job 推业务镜像(见 [README-UAT-HARBOR-PUSH.md](../README-UAT-HARBOR-PUSH.md)) - [ ] Jenkins 凭据 `ack-kubeconfig-alien` + Job 试跑 - [ ] ACK 命名空间 / Deployment / imagePullSecret --- ## 一、保存机器人 Token → Jenkins Harbor 2.x 里 **机器人名称不能点击**,这是正常现象;Token **不会**在详情页里长期展示。 ### 获取 Token 的两种方式 **方式 A:重新生成密钥(推荐,保留原机器人)** 1. 在 **机器人账户** 列表中,**勾选**左侧复选框(选中 `robot$alien_cloud+jenkins-k8s` 那一行)。 2. 点表格上方的 **「其他操作」** 下拉菜单。 3. 选择 **「重新生成密钥」** / **「Regenerate secret」** / **「刷新令牌」**(中文版措辞可能略有不同)。 4. 弹出框里会显示 **新 Token**,**立即复制**(关闭后无法再查看)。 **方式 B:新建一个机器人** 1. **+ 添加机器人账户**,名称如 `jenkins-k8s-2`,权限与现网相同。 2. 点 **完成** 后弹窗里的 Token **只出现一次**,务必当场复制。 3. Jenkins 凭据里改用新用户名;旧的 `jenkins-k8s` 可之后在 Harbor 里禁用或删除。 若勾选后 **「其他操作」** 里没有「重新生成」:试该行最右侧 **⋮** 菜单,或换用 **admin** 账号登录。 ### 写入 Jenkins 1. Jenkins 文件夹 **凭据** → **添加**: - 类型:Username with password - **ID**:`harbor-robot-alien` - **用户名**:`robot$alien_cloud+jenkins-k8s` - **密码**:Token --- ## 二、探测 Registry(在 Jenkins 所在机或 153.68 上) ```bash curl -sI http://39.105.153.68/v2/ curl -skI https://39.105.153.68/v2/ ``` | 结果 | 做法 | |------|------| | **401** | 正常,继续 `docker login 39.105.153.68` | | **301** 到 https | 用 **https** 登录,勿对 153.68 配 `insecure-registries` 走 HTTP | | **404** | 把完整 `curl` 输出给运维;或试浏览器同协议的主机名 | 登录(推荐): ```bash echo '' | docker login 39.105.153.68 -u 'robot$alien_cloud+jenkins-k8s' --password-stdin ``` 若 HTTPS 证书报错:在 `/etc/docker/certs.d/39.105.153.68/ca.crt` 放 Harbor CA,或请运维提供证书;**优先不要用错 88 的 insecure-registries**。 --- ## 三、推送基础镜像(153.68 上常有 `my-openjdk8-ffmpeg:v1`) ```bash docker images | grep openjdk8-ffmpeg docker tag my-openjdk8-ffmpeg:v1 39.105.153.68/alien_cloud/base/openjdk8-ffmpeg:v1 docker push 39.105.153.68/alien_cloud/base/openjdk8-ffmpeg:v1 ``` Harbor Web → **alien_cloud** → 应看到 `base/openjdk8-ffmpeg`。 --- ## 三.1、UAT 首次推送 gateway 镜像(方案 A) 见 **[README-UAT-HARBOR-PUSH.md](../README-UAT-HARBOR-PUSH.md)**:在 UAT Job 勾选 `PUSH_GATEWAY_TO_HARBOR`,产出 `gateway:uat-build-<构建号>` 后,再跑生产晋升 Job。 --- ## 四、Jenkins 参数(Build with Parameters) | 参数 | 值 | |------|-----| | `HARBOR_REGISTRY` | **`39.105.153.68`** | | `HARBOR_PROJECT` | `alien_cloud` | | `BASE_IMAGE` | `39.105.153.68/alien_cloud/base/openjdk8-ffmpeg:v1` | Git 凭据:`zhanghaomimapingzheng`(或你 Job SCM 里已选中的)。 --- ## 五、下一步总序 1. **本步**:Jenkins 凭据 `harbor-robot-alien` + 上节 `docker login` / `push` 基础镜像 2. 凭据 **`ack-kubeconfig-alien`**(ACK 下载的 kubeconfig) 3. Job **`gateway-k8s`** 或 **`alien-cloud-k8s-whole`**:先 `DRY_RUN`,再真实构建 4. ACK:`kubectl apply` namespace、harbor pull secret、deployment(见 README-ACK-GRAY-RELEASE.md) --- ## 六、两台机器分工 | IP | 角色 | |----|------| | **39.105.153.68** | Harbor、现网 *-produ compose、Registry **login/push 目标** | | **39.106.135.88** | Jenkins :30003、UAT 等(构建机可 SSH 到 153.68 做 login 测试) | 在 **88** 上构建时:Jenkins 容器/宿主机的 Docker 必须能访问 **153.68** 的 Registry(安全组放行)。