私有化部署主要包含:镜像打包构建、私有化部署以及CNB配置私有化工作流。
1、镜像包环境变量配置
在代码仓库根目录创建环境变量文件./private/.env,应用在构建的服务镜像中。
示例:
SPRING_CLOUD_NACOS_CONFIG_USERNAME=shulian SPRING_CLOUD_NACOS_CONFIG_PASSWORD=Qwdy@2025** SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.0.23:8848 SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=shulian
2、依赖镜像配置
在代码仓库根目录创建依赖镜像文件./private/.depend_images.txt,记录不在本代码仓库,且私有化需要部署的服务镜像。
示例:
# xx-jib服务 docker.cnb.cool/clife/farm/server/server-farm-xxl-job-2.4.0/clife-farm-xxl-job-admin:master-20251211194614 # 用户服务 docker.cnb.cool/clife/clife-agriculture/server-agriculture-platform/clife-boot-agriculture-api-web-agronomist:dayun2-20251209173340 docker.cnb.cool/clife/clife-agriculture/server-agriculture-platform/clife-boot-agriculture-api-web-pest:dayun2-20251209173340
3、CNB构建镜像包
.cnb.yml(详见:⚙️CNB配置私有化工作流)./private/.env./private/.depend_images.txt/data/www/logs1024(1024MB,不用带MB)构建完私有化镜像后,会创建仓库Release,请到Release附件中下载部署脚本:install.sh
1、创建 访问令牌
⚠️注意:一定要确认在CNB创建的令牌有权限访问所有镜像
2、部署流程:
下载 install.sh 脚本文件,并上传到服务器
运行脚本部署
# 1、赋予运行权限 chmod +x install.sh # 2、运行脚本 ./install.sh
根据运行菜单,选择一键部署
配置CNB私有化工作流程,主要修改两个文件:.cnb/web_tigger.yml和.cnb.yml
在.cnb/web_tigger.yml文件内容增加一下内容
注意:inputs 需要继承原构建镜像输入参数
# 私有化部署参数
.priva_inputs: &priva_inputs
CLIFE_PRIVATE_ENV_FILE:
name: 镜像环境变量
description: 配置镜像服务环境变量,默认读取仓库:./private/.env,请配置好该文件,主要配置nacos环境变量,每个一行。如下示例:<br>SPRING_CLOUD_NACOS_CONFIG_USERNAME=shulian<br>SPRING_CLOUD_NACOS_CONFIG_PASSWORD=Qwdy@2025**
default: ./private/.env
type: input
CLIFE_PRIVATE_DEPEND_IMAGES_FILE:
name: 添加其他镜像
description: 添加其他已经构建好的镜像清单,默认读取仓库:./private/depend_images.txt,请配置好该文件,每个一行。如下示例:<br>docker.cnb.cool/clife/xxx/websocket:v0.0.1<br>docker.cnb.cool/clife/xxx/test-api:v0.0.2
default: ./private/depend_images.txt
type: input
CLIFE_PRIVATE_LOG_ROOT:
name: 日志保存路径
description: 服务程序在物理机上的日志路径
type: input
default: /data/www/logs
branch:
- reg:
- buttons:
# 手动出发构建私有化镜像按钮
- name: 构建私有化部署镜像
description: 专为私有化构建镜像,自动生成部署脚本
event: web_trigger_build_privatization
inputs:
# TODO 此处需添加构建所需输入参数
<<: *priva_inputs
1、在.cnb.yml文件内容新增任务
.stage_privatization: &stage_privatization
- name: 构建私有化脚本
script: |
# 读取CNB_TAG变量
if [ -f "/workspace/cnb_tag.env" ]; then
. /workspace/cnb_tag.env
echo "使用导出的CNB_TAG: ${CNB_TAG}"
else
echo "警告: 未找到cnb_tag.env文件,使用默认CNB_TAG"
fi
RELEASE_VERSION=$CNB_TAG
IMAGES_FILE="/workspace/images.txt"
echo "参数说明:"
echo "参数1:服务清单文件 ($IMAGES_FILE)"
echo "参数2:版本号 ($RELEASE_VERSION)"
echo "执行:./private.sh $IMAGES_FILE $RELEASE_VERSION"
PRIVATE_URL="${SHELL_HOST:-https://cnb.cool/clife/golang/cp/-/git/raw/main}/private/private.sh"
curl $PRIVATE_URL > private.sh
chmod +x private.sh
./private.sh "$IMAGES_FILE" "$RELEASE_VERSION"
echo "##[set-output RELEASE_VERSION=$RELEASE_VERSION]"
exports:
RELEASE_VERSION: RELEASE_VERSION
- name: 创建release
type: git:release
options:
title: $RELEASE_VERSION
tag: $RELEASE_VERSION
descriptionFromFile: ./privatization/RELEASE.md
latest: true
- name: 查看编译文件
script: |
echo "PLATFORMS:${PLATFORMS}"
ls -lh ./privatization
rm -rf ./privatization/RELEASE.md
- name: 上传附件
image: cnbcool/attachments:latest
settings:
tag: $RELEASE_VERSION
attachments:
- ./privatization/*
2、配置工作流触发事件
⚠️注意:此处配置在原有构建镜像工作中,只需新增
web_trigger_build_privatization和stage_privatization,以下配置仅供参考
# 适配所有分支
"**":
web_trigger_build_privatization:
- <<: *runner_build
variables:
SELECTED_SERVICES: ${SELECTED_SERVICES}
BASE_IMAGE_REGISTRY: ${BASE_IMAGE_REGISTRY}
JAVA_OPTS: ${JAVA_OPTS}
DISCONF_OPTS: ${DISCONF_OPTS}
namespace: ${namespace}
stages:
- *stage_ensure_cnb_tag
- *stage_parse_services
- *stage_mvn_package
- *stage_docker_build
- *stage_privatization