Skip to content

Commit

Permalink
Merge pull request #55 from DreamPWJ/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
DreamPWJ authored Feb 18, 2024
2 parents 8cdd011 + e3b7ad0 commit b1f5822
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 88 deletions.
4 changes: 4 additions & 0 deletions _database/mysql-install-centos.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# 缓存表数据和索引的内存区域。通常应将其设置为系统可用内存的50%-80%,以减少磁盘I/O
# 临时设置 SET GLOBAL innodb_buffer_pool_size = 4 * 1024 * 1024 * 1024;
innodb_buffer_pool_size=4G
default-authentication-plugin=caching_sha2_password
skip-grant-tables # 免密 设置完密码后注释 重启mysql 否则端口会为0
Expand Down
7 changes: 7 additions & 0 deletions _database/mysql-install-ubuntu.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ bind-address=0.0.0.0
datadir=/var/lib/mysql
user=mysql
# 缓存表数据和索引的内存区域。通常应将其设置为系统可用内存的50%-80%,以减少磁盘I/O
# 临时设置 SET GLOBAL innodb_buffer_pool_size = 4 * 1024 * 1024 * 1024;
innodb_buffer_pool_size=4G
# 主从复制-主机配置
# 主服务器唯一ID
server-id=1
Expand Down Expand Up @@ -48,6 +52,9 @@ bind-address=0.0.0.0
datadir=/var/lib/mysql
user=mysql
# 缓存表数据和索引的内存区域。通常应将其设置为系统可用内存的50%-80%,以减少磁盘I/O
innodb_buffer_pool_size=4G
# 主从复制-从机配置
# 从服务器唯一ID
server-id=2
Expand Down
6 changes: 3 additions & 3 deletions _k8s/k8s.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ spec:
imagePullPolicy: Always # 强制拉取线上镜像
resources: # 合理设置内存 防止内存溢出 导致整个服务器宕机 如0/3 nodes are available: 3 Insufficient memory
requests:
cpu: 200m # cpu请求容器启动的初始可用数量
memory: 256Mi # 内存请求,容器启动的初始可用数量 不能大于limits设置值
cpu: 200m # cpu请求 容器启动的初始可用数量
memory: 256Mi # 内存请求 容器启动的初始可用数量 不能大于limits设置值
limits:
# m是千分之一 100m是0.1个CPU 限制最大cpu防止资源溢出 导致整个集群全部不可用
cpu: 900m
cpu: 1000m
# 设置memory应用最大使用内存 限制防止雪崩现象导致其它服务不可用 不支持小数点形式的设置 K8S默认对占用高资源会有驱逐Evicted机制
memory: "{MAX_MEMORY_SIZE}i"
ports:
Expand Down
2 changes: 1 addition & 1 deletion pipelines/epark/Jenkinsfile.htc-epark-k8s-prod
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ map.put('build_num_keep', 2)

// Docker相关参数
// JVM内存设置
map.put('docker_java_opts', '-Xmx2600m')
map.put('docker_java_opts', '-Xmx2800m')
// docker内存限制 不支持小数点形式设置
map.put('docker_memory', '3G')
// docker日志限制
Expand Down
4 changes: 2 additions & 2 deletions pipelines/epark/Jenkinsfile.jxyb-hci-spring-boot-prod
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ map.put('build_num_keep', 2)

// Docker相关参数
// JVM内存设置
map.put('docker_java_opts', '-Xmx2800m')
map.put('docker_java_opts', '-Xmx3800m')
// docker内存限制 不支持小数点形式设置
map.put('docker_memory', '3G')
map.put('docker_memory', '4G')
// docker日志限制
map.put('docker_log_opts', 'max-size=150m') // --log-opt max-size=50m --log-opt max-file=3
// docker挂载映射 docker run -v 参数(格式 宿主机挂载路径:容器内目标路径) 多个用逗号,分割
Expand Down
4 changes: 2 additions & 2 deletions pipelines/epark/Jenkinsfile.lanneng-landing-page-prod
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ map.put('build_num_keep', 2)

// Docker相关参数
// JVM内存设置
map.put('docker_java_opts', '-Xmx500m')
map.put('docker_java_opts', '-Xmx800m')
// docker内存限制 不支持小数点形式设置
map.put('docker_memory', '512M')
map.put('docker_memory', '1000M')
// docker日志限制
map.put('docker_log_opts', 'max-size=150m') // --log-opt max-size=50m --log-opt max-file=3
// docker挂载映射 docker run -v 参数(格式 宿主机挂载路径:容器内目标路径) 多个用逗号,分割
Expand Down
4 changes: 2 additions & 2 deletions pipelines/epark/Jenkinsfile.openpark-saas-prod
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ map.put('build_num_keep', 2)

// Docker相关参数
// JVM内存设置
map.put('docker_java_opts', '-Xmx2600m')
map.put('docker_java_opts', '-Xmx2800m')
// docker内存限制 不支持小数点形式设置
map.put('docker_memory', '3G')
// docker日志限制
Expand Down Expand Up @@ -158,7 +158,7 @@ JSON_PARAMS
"NPM_RUN_PARAMS" : "build",
"IS_K8S_DEPLOY" : true,
"K8S_POD_REPLICAS" : "3",
"APPLICATION_DOMAIN" : "https://saas.pengbocloud.com",
"APPLICATION_DOMAIN" : "https://pengbocloud.com",
}
*/
Expand Down
4 changes: 2 additions & 2 deletions pipelines/epark/Jenkinsfile.pellet-charging-prod
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ map.put('build_num_keep', 2)

// Docker相关参数
// JVM内存设置
map.put('docker_java_opts', '-Xmx2200m')
map.put('docker_java_opts', '-Xmx2000m')
// docker内存限制 不支持小数点形式设置
map.put('docker_memory', '3G')
map.put('docker_memory', '2G')
// docker日志限制
map.put('docker_log_opts', 'max-size=150m') // --log-opt max-size=50m --log-opt max-file=3
// docker挂载映射 docker run -v 参数(格式 宿主机挂载路径:容器内目标路径) 多个用逗号,分割
Expand Down
45 changes: 23 additions & 22 deletions src/shared/library/common/Web.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -57,34 +57,35 @@ class Web implements Serializable {
}

ctx.println("执行MonoRepo仓库构建 🏗️ ")
if (Git.isExistsChangeFile(ctx)) { // 自动判断是否需要下载依赖 根据依赖配置文件在Git代码是否变化
try {
def retryCount = 0
ctx.retry(3) {
retryCount++
if (retryCount >= 2) {
ctx.sh "rm -rf node_modules && rm -f *.lock.* && npm run clean:all"
}
// 全部下载依赖 更通用 bootstrap不仅是下载依赖资源 还建立多包之间的依赖软链
// TurboRepo解决Monorepo多项目构建缓慢问题 充分利用CPU性能并发构建提速 同时新版Lerna v5.1集成Nx实现加速构建
// 基于pnpm-workspace的新的monorepo单仓多包方案

try {
def retryCount = 0
ctx.retry(3) {
retryCount++
if (retryCount >= 2) {
ctx.sh "rm -rf node_modules && rm -f *.lock.* && npm run clean:all"
}
// 全部下载依赖 更通用 bootstrap不仅是下载依赖资源 还建立多包之间的依赖软链
// TurboRepo解决Monorepo多项目构建缓慢问题 充分利用CPU性能并发构建提速 同时新版Lerna v5.1集成Nx实现加速构建
// 基于pnpm-workspace的新的monorepo单仓多包方案
if (Git.isExistsChangeFile(ctx) || retryCount >= 2) { // 自动判断是否需要下载依赖 根据依赖配置文件在Git代码是否变化
ctx.sh "lerna bootstrap --ci || true" // --ci 选项调用npm ci而不是npm install
ctx.sh "pnpm install || true" // 新版版本lerna命令 lerna bootstrap新版已被弃用
// lerna bootstrap指定作用域 加速下载依赖 --scope 限制 lerna bootstrap 在哪些包起作用 包的package.json文件中名称
// ctx.sh "lerna bootstrap --include-dependents --include-dependencies --scope ${ctx.PROJECT_NAME}"

// 执行基础通用包编译和自定义脚本处理工作 会有无效的包被编译 可检测git提交是否包含核心通用模块文件变更 如果有才编译
ctx.sh "npm run build:all"
// 定位到具体业务包执行构建打包命令
ctx.sh "cd ${ctx.monoRepoProjectDir} && npm run ${ctx.NPM_RUN_PARAMS}" // >/dev/null 2>&1
}
} catch (error) {
ctx.println(error.getMessage())
ctx.sh "rm -rf node_modules" // 清除构建缓存
ctx.sh "rm -rf *.lock" // 清除构建锁版本文件
ctx.sh "npm run clean:all" // 清除构建所有缓存
ctx.error("执行MonoRepo仓库构建失败, 终止当前Pipeline运行 ❌")

// 执行基础通用包编译和自定义脚本处理工作 会有无效的包被编译 可检测git提交是否包含核心通用模块文件变更 如果有才编译
ctx.sh "npm run build:all"
// 定位到具体业务包执行构建打包命令
ctx.sh "cd ${ctx.monoRepoProjectDir} && npm run ${ctx.NPM_RUN_PARAMS}" // >/dev/null 2>&1
}
} catch (error) {
ctx.println(error.getMessage())
ctx.sh "rm -rf node_modules" // 清除构建缓存
ctx.sh "rm -rf *.lock.*" // 清除构建锁版本文件
ctx.sh "npm run clean:all" // 清除构建所有缓存
ctx.error("执行MonoRepo仓库构建失败, 终止当前Pipeline运行 ❌")
}
}
}
Expand Down
39 changes: 18 additions & 21 deletions vars/sharedLibrary.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -1155,33 +1155,26 @@ def nodeBuildProject() {

timeout(time: 30, unit: 'MINUTES') {
try {
if (Git.isExistsChangeFile(this)) { // 自动判断是否需要下载依赖 根据依赖配置文件在Git代码是否变化
def retryCount = 0
retry(3) {
retryCount++
if (retryCount >= 2) {
sh "rm -rf node_modules && rm -f *.lock.*"
// 如果包404下载失败 可以更换官方镜像源重新下载
Node.setOfficialMirror(this)
}
def retryCount = 0
retry(3) {
retryCount++
if (retryCount >= 2) {
sh "rm -rf node_modules && rm -f *.lock.*"
// 如果包404下载失败 可以更换官方镜像源重新下载
Node.setOfficialMirror(this)
}
if (Git.isExistsChangeFile(this) || retryCount >= 2) { // 自动判断是否需要下载依赖 根据依赖配置文件在Git代码是否变化
println("安装依赖 📥")
// npm ci 与 npm install类似 进行CI/CD或生产发布时,最好使用npm ci 防止版本号错乱但依赖lock文件
def npmLog = "npm_install.log"
sh " npm ci || pnpm install > ${npmLog} 2>&1 || npm install >> ${npmLog} 2>&1 || yarn install >> ${npmLog} 2>&1 "
// --prefer-offline &> /dev/null 加速安装速度 优先离线获取包不打印日志 但有兼容性问题
sh " cat ${npmLog} || true"

// >/dev/null为Shell脚本运行程序不输出日志到终端 2>&1是把出错输出也定向到标准输出
println("执行Node构建 🏗️ ")
// 如果是服务端SSR框架如 NextJS框架 1.部署到NodeJs服务 2.导出静态HTML部署
def nextJSScript = ""
if ("${IS_NEXT_JS}" == 'true') {
// 导出静态HTML方式部署 可复用Nginx部署脚本 可配置到package.json内script 使用npm run执行
// nextJSScript = " && next export && rm -rf ${NPM_PACKAGE_FOLDER} && mv out ${NPM_PACKAGE_FOLDER} "
}
sh " rm -rf ${NPM_PACKAGE_FOLDER} || true "
sh " npm run '${NPM_RUN_PARAMS}' ${nextJSScript} " // >/dev/null 2>&1
}

println("执行Node构建 🏗️ ")
sh " rm -rf ${NPM_PACKAGE_FOLDER} || true "
sh " npm run '${NPM_RUN_PARAMS}' "
}
} catch (e) {
println(e.getMessage())
Expand Down Expand Up @@ -2047,12 +2040,16 @@ def dingNotice(map, int type, msg = '', atMobiles = '') {
if ("${PROJECT_TYPE}".toInteger() == GlobalVars.frontEnd) {
// 生成二维码 方便手机端扫描
genQRCode(map)
def screenshot = "![screenshot](${qrCodeOssUrl})"
if ("${qrCodeOssUrl}" == "") {
screenshot = ""
}
dingtalk(
robot: "${DING_TALK_CREDENTIALS_ID}",
type: 'ACTION_CARD',
title: "CI/CD ${PROJECT_TAG}${envTypeMark}${projectTypeName}部署结果通知",
text: [
"![screenshot](${qrCodeOssUrl})",
"${screenshot}",
"### [${env.JOB_NAME}#${env.BUILD_NUMBER} ${PROJECT_TAG}${envTypeMark}${projectTypeName} ${MACHINE_TAG}](${env.JOB_URL})",
"##### 版本信息",
"- Nginx Web服务启动${msg}",
Expand Down
76 changes: 43 additions & 33 deletions vars/webSharedLibrary.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -905,53 +905,59 @@ def nodeBuildProject() {
Web.needSass(this)
}

if (Git.isExistsChangeFile(this)) { // 自动判断是否需要下载依赖 根据依赖配置文件在Git代码是否变化
retry(3) {
println("安装依赖 📥")
// npm ci 与 npm install类似 进行CI/CD或生产发布时,最好使用npm ci 防止版本号错乱
sh "npm ci || pnpm install || npm install || yarn install"
// --prefer-offline &> /dev/null 加速安装速度 优先离线获取包不打印日志 但有兼容性问题
}
}

timeout(time: 10, unit: 'MINUTES') {
timeout(time: 30, unit: 'MINUTES') {
try {
// >/dev/null为Shell脚本运行程序不输出日志到终端 2>&1是把出错输出也定向到标准输出
println("执行Node构建 🏗️ ")
sh " rm -rf ${NPM_PACKAGE_FOLDER} || true "
retry(2) {
sh " npm run '${NPM_RUN_PARAMS}' " // >/dev/null 2>&1
def retryCount = 0
retry(3) {
retryCount++
if (retryCount >= 2) {
sh "rm -rf node_modules && rm -f *.lock.*"
// 如果包404下载失败 可以更换官方镜像源重新下载
Node.setOfficialMirror(this)
}
if (Git.isExistsChangeFile(this) || retryCount >= 2) { // 自动判断是否需要下载依赖 根据依赖配置文件在Git代码是否变化
println("安装依赖 📥")
// npm ci 与 npm install类似 进行CI/CD或生产发布时,最好使用npm ci 防止版本号错乱但依赖lock文件
def npmLog = "npm_install.log"
sh " npm ci || pnpm install > ${npmLog} 2>&1 || npm install >> ${npmLog} 2>&1 || yarn install >> ${npmLog} 2>&1 "
// --prefer-offline &> /dev/null 加速安装速度 优先离线获取包不打印日志 但有兼容性问题
sh " cat ${npmLog} || true"
}

println("执行Node构建 🏗️ ")
sh " rm -rf ${NPM_PACKAGE_FOLDER} || true "
sh " npm run '${NPM_RUN_PARAMS}' "
}
} catch (e) {
println(e.getMessage())
sh "rm -rf node_modules && rm -f *-lock.json"
sh "rm -rf node_modules && rm -f *.lock.*"
error("Web打包失败, 终止当前Pipeline运行 ❌")
}
}
}
}

// NPM打包产出物位置
npmPackageLocationDir = "${IS_MONO_REPO}" == 'true' ? "${monoRepoProjectDir}/${NPM_PACKAGE_FOLDER}" : "${NPM_PACKAGE_FOLDER}"
npmPackageLocation = "${npmPackageLocationDir}" + ".tar.gz"
println(npmPackageLocation)
// 判断npm打包目录是否存在 打包名称规范不一致等
// NPM打包产出物位置
npmPackageLocationDir = "${IS_MONO_REPO}" == 'true' ? "${monoRepoProjectDir}/${NPM_PACKAGE_FOLDER}" : "${NPM_PACKAGE_FOLDER}"
npmPackageLocation = "${npmPackageLocationDir}" + ".tar.gz"
println(npmPackageLocation)
// 判断npm打包目录是否存在 打包名称规范不一致等
/* if (!fileExists("${npmPackageLocationDir}/")) {
// React框架默认打包目录是build , Angular框架默认打包目录是多层级的等 重命名到定义的目录名称
sh "rm -rf ${NPM_PACKAGE_FOLDER} && mv build ${NPM_PACKAGE_FOLDER}"
}*/
webPackageSize = Utils.getFolderSize(this, npmPackageLocationDir)
Tools.printColor(this, "Web打包成功 ✅")
// 压缩文件夹 易于加速传输
if ("${IS_MONO_REPO}" == 'true') {
sh "cd ${monoRepoProjectDir} && tar -zcvf ${NPM_PACKAGE_FOLDER}.tar.gz ${NPM_PACKAGE_FOLDER} >/dev/null 2>&1 "
} else {
sh "tar -zcvf ${NPM_PACKAGE_FOLDER}.tar.gz ${NPM_PACKAGE_FOLDER} >/dev/null 2>&1 "
}
webPackageSize = Utils.getFolderSize(this, npmPackageLocationDir)
Tools.printColor(this, "Web打包成功 ✅")
// 压缩文件夹 易于加速传输
if ("${IS_MONO_REPO}" == 'true') {
sh "cd ${monoRepoProjectDir} && tar -zcvf ${NPM_PACKAGE_FOLDER}.tar.gz ${NPM_PACKAGE_FOLDER} >/dev/null 2>&1 "
} else {
sh "tar -zcvf ${NPM_PACKAGE_FOLDER}.tar.gz ${NPM_PACKAGE_FOLDER} >/dev/null 2>&1 "
}

// 替换自定义的nginx配置文件
Deploy.replaceNginxConfig(this)
// 替换自定义的nginx配置文件
Deploy.replaceNginxConfig(this)

}
}

/**
Expand Down Expand Up @@ -1330,12 +1336,16 @@ def dingNotice(map, int type, msg = '', atMobiles = '') {
} else if (type == 1) { // 部署完成
// 生成二维码 方便手机端扫描
genQRCode(map)
def screenshot = "![screenshot](${qrCodeOssUrl})"
if ("${qrCodeOssUrl}" == "") {
screenshot = ""
}
dingtalk(
robot: "${DING_TALK_CREDENTIALS_ID}",
type: 'ACTION_CARD',
title: "CI/CD ${PROJECT_TAG}${envTypeMark}${projectTypeName}部署结果通知",
text: [
"![screenshot](${qrCodeOssUrl})",
"${screenshot}",
"### [${env.JOB_NAME}#${env.BUILD_NUMBER} ${PROJECT_TAG}${envTypeMark}${projectTypeName} ${MACHINE_TAG}](${env.JOB_URL})",
"##### 版本信息",
"- Nginx Web服务启动${msg}",
Expand Down

0 comments on commit b1f5822

Please sign in to comment.