Contents
打包部署wld-business-platform镜像
备份依赖java-sdk
wld-business-platform项目中有个依赖,
<dependency>
<groupId>com.wyb.sdk</groupId>
<artifactId>java</artifactId>
<version>0.1.5</version>
</dependency>
看了下是java-sdk这个项目。
实际上,这个项目有过改名
2.0之前类似这样
<groupId>com.wyb.sdk</groupId>
<artifactId>java</artifactId>
<version>0.1.5</version>
2.0之后类似这样
<groupId>com.wyb.sdk</groupId>
<artifactId>woyun-sdk</artifactId>
<version>0.2.6</version>
新建本地分支
git checkout master
git checkout -b jtest
新建远程仓库
gitee新建私有仓库java-sdk
上传分支
git remote add jingmin https://gitee.com/ole12138/java-sdk.git
# jtest分支设置上游分支,并推送
git push -u jingmin jtest
git push -u jingmin master:master
# 推送所有(本地)分支到新仓库
#git push --all jingmin
# 推送所有分支到新仓库(会多个HEAD临时分支)
git push jingmin +refs/remotes/origin/*:refs/heads/*
# 删除远程分支HEAD
git push jingmin --delete HEAD
看了下这个依赖,好像是提供沃云保 (保单)相关的接口调用地址的。
暂时打算先从wld-business-platform项目中删除。wld-business-platform中用此依赖的代码,暂时先注释掉。所以也就不打包上传nexus了。
备份上传依赖xframework-noticemessage
新建本地分支
git checkout master
git checkout -b jtest
新建远程仓库
gitee新建私有仓库xframework-noticemessage
上传分支
git remote add jingmin https://gitee.com/ole12138/xframework-noticemessage.git
# jtest分支设置上游分支,并推送
git push -u jingmin jtest
git push -u jingmin master:master
# 推送所有(本地)分支到新仓库
#git push --all jingmin
# 推送所有分支到新仓库(会多个HEAD临时分支)
git push jingmin +refs/remotes/origin/*:refs/heads/*
# 删除远程分支HEAD
git push jingmin --delete HEAD
pom.xml中调整xframework-parent版本为2.0.2
没问题的话提交修改
git add pom.xml
git commit -m "feat: jtest分支配置”
git push
deploy到nexus
mvn deploy
备份上传依赖wld-bussiness-common
新建本地分支
git checkout master
git checkout -b jtest
新建远程仓库
gitee新建私有仓库wld-bussiness-common
上传分支
git remote add jingmin https://gitee.com/ole12138/wld-bussiness-common.git
# jtest分支设置上游分支,并推送
git push -u jingmin jtest
git push -u jingmin master:master
# 推送所有(本地)分支到新仓库
#git push --all jingmin
# 推送所有分支到新仓库(会多个HEAD临时分支)
git push jingmin +refs/remotes/origin/*:refs/heads/*
# 删除远程分支HEAD
git push jingmin --delete HEAD
pom.xml中调整xframework-parent版本为2.0.2
没问题的话提交修改
git add pom.xml
git commit -m "feat: jtest分支配置”
git push
deploy到nexus
mvn deploy
上传天翼物联网平台依赖
wld-business-platform的pom文件中,有天翼物联网平台CTWing的应用依赖
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ctg-ag-sdk-core</artifactId>
<version>2.5.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ag-sdk-biz-101205.tar.gz</artifactId>
<version>20220510.150430</version>
</dependency>
参考: https://www.ctwing.cn/yykf/124#see
参考: https://www.ctwing.cn/ptrz/21#see
参考: https://www.cnblogs.com/cxnph/articles/15502205.html
需要到天翼物联网平台注册账号,实名认证,开通通用组件服务。
天翼物联网平台CTWing。相关的数据流转示意图:

我们的wld-business-platform应用,就相当于是CTWing北向的一个应用。
参考: https://www.ctwing.cn/ksrm/22#see
参考: https://www.ctwing.cn/yykf/123#see
参考: https://www.ctwing.cn/yykf/122#see
控制台-》应用管理-》第三方应用-》新增应用
应用名称: wld_business_platform
是否在AEP销售: 否
应用分类:消费电子-》医疗器械等
应用能力: AIOT通用组件服务能力
应用描述: jtest
应用接入域名(自动创建的,需要记下来,我这边是): 2000419539.api.ctwing.cn
创建
应用管理,进入应用详情页,应用能力位置,下载sdk

其中包含了demo项目,以及上文提到的两个依赖jar (可能版本不同)
将这两个jar上传到nexus私服。
由于我不小心把thirdparty库设成了release库。导致snapshot类型的artifact会被拒绝上传。因此我上传的时候设置artifact名字的时候把-SNAPSHOT
去掉了。
修改wld-bussiness-platform的pom文件中这两个依赖的id和版本,与当前上传版本一致。
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ctg-ag-sdk-core</artifactId>
<version>2.8.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ag-sdk-biz-285444.tar.gz</artifactId>
<version>20231031.205300</version>
</dependency>
从天翼物联网平台,复制这个应用的appKey和appsecret。配置到nacos
备份仓库wld-business-platform
新建本地分支
git checkout develop
git checkout -b jtest
新建远程仓库
gitee新建私有仓库wld-business-platform
上传分支
git remote add jingmin https://gitee.com/ole12138/wld-business-platform.git
# jtest分支设置上游分支,并推送
git push -u jingmin jtest
git push -u jingmin master:master
git push -u jingmin develop:develop
# 推送所有(本地)分支到新仓库
#git push --all jingmin
# 推送所有分支到新仓库(会多个HEAD临时分支)
git push jingmin +refs/remotes/origin/*:refs/heads/*
# 删除远程分支HEAD
git push jingmin --delete HEAD
调整配置
调整springcloud的bootstrap.yml
spring.application.name=SERVICE-WLD-V2
server.port=9021
#spring.cloud.nacos.server-addr=nacos.c253e0c129d8f453a82dfb1ae4ba19613.cn-shenzhen.alicontainer.com:80
spring.cloud.nacos.server-addr=nacos-headless.nacos.svc.cluster.local:8848
spring.cloud.nacos.discovery.group=woyun
spring.cloud.nacos.discovery.namespace=765fa359-2e1b-41f3-a4b2-17c3856764fe
spring.cloud.nacos.config.namespace=765fa359-2e1b-41f3-a4b2-17c3856764fe
spring.cloud.nacos.config.group=woyun
spring.cloud.nacos.config.shared-configs[0].data-id=application.properties
spring.cloud.nacos.config.shared-configs[0].group=woyun
spring.cloud.nacos.config.shared-configs[1].data-id=application-wld.properties
spring.cloud.nacos.config.shared-configs[1].group=woyun
spring.cloud.nacos.config.shared-configs[1].refresh=true
spring.cloud.nacos.config.shared-configs[2].data-id=mongo.properties
spring.cloud.nacos.config.shared-configs[2].group=woyun
spring.cloud.nacos.config.shared-configs[3].data-id=mysql-wld.properties
spring.cloud.nacos.config.shared-configs[3].group=woyun
spring.cloud.nacos.config.shared-configs[4].data-id=rabbitmq-wld.properties
spring.cloud.nacos.config.shared-configs[4].group=woyun
spring.cloud.nacos.config.shared-configs[5].data-id=redis.properties
spring.cloud.nacos.config.shared-configs[5].group=woyun
#spring.cloud.nacos.config.shared-configs[6].data-id=elasticsearch.properties
#spring.cloud.nacos.config.shared-configs[6].group=woyun
#spring.cloud.nacos.config.shared-configs[7].data-id=kafka.properties
#spring.cloud.nacos.config.shared-configs[7].group=woyun
#spring.cache.type = redis
spring.redis.redisson.config=classpath:redisson.yml
# profile
spring.cloud.config.profile=${config.profile:dev}
###################mybatis插件配置####################
mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml
mybatis-plus.type-aliases-package=com.platform.woledong.business.*.entity
mybatis-plus.configuration.map-underscore-to-camel-case=true
application.workerId=26
application.datacenterId=0
#aliyun.endpoint = cn-shenzhen.log.aliyuncs.com
#aliyun.accessKeyId = LTAINx6RvPMI9TgN
#aliyun.accessKey = ipxcpC9IAop31919RZT2yo3r3j3UMN
logging.level.com.platform.woledong.business.sport=DEBUG
logging.level.com.platform.woledong.business.user=DEBUG
logging.level.com.platform.woledong.business.sys=DEBUG
logging.level.com.platform.woledong.business.notify=DEBUG
logging.level.com.platform.woledong.business.task=DEBUG
logging.level.com.platform.woledong.business.servicePackage=DEBUG
logging.level.com.platform.woledong.business.workOrder=DEBUG
logging.level.com.platform.woledong.business.expertSchedule=DEBUG
logging.level.org.springframework.data.mongodb.core=DEBUG
pagehelper.auto-runtime-dialect=true
pagehelper.reasonable=true
spring.main.allow-bean-definition-overriding=true
#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.platform.woledong.business.sport.mapper=DEBUG
mybatis.configuration.logimpl=org.apache.ibatis.logging.stdout.StdOutImpl
主要调整nacos地址和命名空间
调整项目pom中xframework-parent版本为2.0.2
调整xxl.job.admin.addresses内容,使用k8s内部地址
调整nacos中rabbitmq-wld.properties配置
#spring.rabbitmq.host=rabbitmq.rabbitmq.svc.cluster.local
spring.rabbitmq.host=rabbitmq.jtest.svc.cluster.local
spring.rabbitmq.port=5672
spring.rabbitmq.username=woyunsoft
spring.rabbitmq.password=woyunsoft123
spring.rabbitmq.virtualHost=/woyun_dev
spring.rabbitmq.publisherConfirms=true
主要是调整了rabbitmq的host
安装mongodb,安装过程在同级目录下另一篇文章里详细介绍。
在此过程中建了一个root角色的账号(wldTestUser / wldTestUser2019 )
使用wldTestUser登录,需要建一下库runsTest
use runsTest;
db.test.insert({"name": "tmp"});
这里wldTestUser是root角色(有最高的权限,只能在admin库中使用)。但还需要单独加下runsTest库的权限。
注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)。
use runsTest;
db.createUser({ user: "wldTestUser",pwd: "wldTestT&d(vf8*9",roles: [{ role: "dbOwner", db: "runsTest"}]});
注意到:
数据库 | 用户 | 密码 | 角色 |
---|---|---|---|
admin (mongo内置的系统库) | wldTestUser | wldTestUser2019 | root |
runsTest | wldTestUser | wldTestT&d(vf8*9 | dbOwner |
可以看到,不同数据库中可以有同名账号。但是密码和权限是与数据库相关的。
看一下nacos中mongo.properties配置
spring.data.mongodb.uri=mongodb://wldTestUser:wldTestT&d(vf8*9@mongo.jtest.svc.cluster.local:27017/runsTest
主要是调整账号密码,以及数据库地址
调整nacos中mysql-wld.properties配置
spring.datasource.name=wld-sport
#spring.datasource.url=jdbc:mysql://mysql:3306/wld_sport?characterEncoding=utf8&useSSL=true
spring.datasource.url=jdbc:mysql://mysql.jtest.svc.cluster.local:3306/wld_sport_test?characterEncoding=utf8&useSSL=true
spring.datasource.username=bmp
spring.datasource.password=bmp8*t229sa
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=10000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 'ZTM' FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
主要是调整mysql连接地址。以及数据库
mysql建库建表。
pom.xml中注释掉沃云保调用依赖
<!-- <dependency>
<groupId>com.wyb.sdk</groupId>
<artifactId>java</artifactId>
<version>0.1.5</version>
</dependency> -->
本地调试
telepresence connect
本地试运行
没问题的话提交修改
git add *.properties
git commit -m "feat: jtest分支配置”
部署自动化发布
- 登录Jenkins
- new Item, 选择pipeline, 名称为wld-business-platform
- 配置pipeline
pipeline通用配置
discard old build, 保留2个
This project is parameterized -> Choice Parameter-> name: branchName, Choices只有一个 **/jtest
pipeline具体配置
- pipeline defination: pipeline script from SCM
- SCM: git
- repositories: https://gitee.com/ole12138/delopy-k8s.git
- credentials: xxx/xxx
- branchToBuild:
*/jtest
- Addtional behaviors:
- Sparse Checkout paths:
service/jtest/Jenkinsfile
- Checkout to sub-directory: jenkins
- Sparse Checkout paths:
- Script Path:
service/jtest/Jenkinsfile
- SCM: git
应用并保存
build with parameters。 选中choice开始构建。
Jenkins配置Config File Provider
不出意外的话,前面的构建会失败。是由于Jenkins中缺了k8s中部署对应镜像的k8s-wld-v2.yaml配置文件。
Dashboard->Manage Jenkins->Managed files(由Config File Provider插件提供)->Add a new Config
Custom file
id自动生成,这里是 870aa774-a8de-4d2d-86d0-37a19e207efa
名称 k8s-wld-v2.yaml
内容
apiVersion: apps/v1
kind: Deployment
##元数据信息
metadata:
name: <PROJECT_NAME>
##命名空间
namespace: <NAME_SPACE>
labels:
app: <PROJECT_NAME>
spec:
selector:
matchLabels:
app : <PROJECT_NAME>
##设置历史版本数量
#revisionHistoryLimit: 2
##滚动升级策略
##Kubernetes在等待设置的时间后才进行升级
minReadySeconds: 5
strategy:
# type: Recreate
type: RollingUpdate
rollingUpdate:
## 升级过程最多可以比原先设置多出的POD数量 Kubernetes会先启动1一个新的Pod后才删掉一个旧的
maxSurge: 1
## 升级过程中最多有多少个POD处于无法提供服务的状态
maxUnavailable: 0
##代表2个副本
replicas: 1
template:
metadata:
labels:
app: <PROJECT_NAME>
spec:
#affinity:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: node_env
# operator: In
# values:
# - jtest
# - prod
##重启策略
# Always:当容器失效时,由kubelet自动重启该容器。
# OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
# Never:不论容器运行状态如何,kubelet都不会重启该容器。
restartPolicy: Always
##挂载容器外面
# volumes:
# - name: <PROJECT_NAME>-log
# hostPath:
## type: Directory
# path: /applogs/<NAME_SPACE>
volumes:
- name: pay-cert
configMap:
name: pay-cert
imagePullSecrets:
- name: harbor-secret
containers:
##容器名称
- name: <PROJECT_NAME>-container
##镜像拉取策略
imagePullPolicy: Always
##容器镜像地址
image: harbor.ole12138.cn/<repoNamespace>/<PROJECT_NAME>:<BUILD_TAG>
## 环境变量设置
env:
- name: TZ
value: Asia/Shanghai
##元数据获取POD名称到环境变量
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: SRV_NAME
value: <PROJECT_NAME>
# lifecycle:
# postStart:
# exec:
# command:
# - /bin/sh
# - '-c'
# - >-
# rm -rf /applogs &&
# mkdir -p /home/mount/<NAME_SPACE>/${POD_NAME} && ln -s
# /home/mount/<NAME_SPACE>/${POD_NAME}
# /applogs
## containerPort 容器监听端口 、hostPort 容器所在主机监听端口
ports:
- name: <PORT_NAME>-con-port
containerPort: <projectPort>
##挂载容器
# volumeMounts:
# - mountPath: /home/mount/<NAME_SPACE>
## subPath: server-zuul.log
# name: <PROJECT_NAME>-log
volumeMounts:
- mountPath: /mnt/bmpapps/service-pay
name: pay-cert
##资源限制和请求限制
resources:
##请求限制容器启动的初始可用CPU/内存
requests:
memory: <REQUEST_MEMORY>
cpu: <REQUEST_CPU>
##资源请求限制
limits:
memory: <LIMIT_MEMORY>
cpu: <LIMIT_CPU>
##健康检查
#(就绪检查)可读探针会去连接容器的8067端,如果连接成功,则该 Pod 将被标记为就绪状态。
#然后Kubelet将每隔10秒钟执行一次该检查
readinessProbe:
tcpSocket:
port: <projectPort>
##指定kubelet在该执行第一要等待5秒钟。
initialDelaySeconds: 30
periodSeconds: 20
timeoutSeconds: 5
##(存活检查)存活探针容器启动15秒后,去尝试连接容器的8067端,如果liveness probe失败,容器将重新启动
livenessProbe:
tcpSocket:
port: <projectPort>
initialDelaySeconds: 240
periodSeconds: 20
timeoutSeconds: 5
---
#添加自动弹性扩缩容
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: <PROJECT_NAME>-autoscal
namespace: <NAME_SPACE>
spec:
maxReplicas: 2
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: <PROJECT_NAME>
targetCPUUtilizationPercentage: 80
加了harbor仓库的imagePullSecrets
注意这里还有个pay-cert的configmap。
需要在k8s中手动创建相关的文件。(暂未查看是业务的哪个位置用到了)
pay-cert.yaml (暂时先使用空文件)
apiVersion: v1
data:
alipayCertPublicKey_RSA2.crt:
alipayRootCert.crt:
appCertPublicKey_2017071807799147.crt:
kind: ConfigMap
metadata:
name: pay-cert
namespace: jtest
应用
kubectl apply -f ./pay-cert.yaml
调整deploy-k8s项目中Jenkinsfile配置
调整deploy-k8s项目下service/jtest/Jenkinsfile
中wld-business-platform判断语句下configFileProvider语句中configFile的fileId, 改为上面添加的文件的id
提交deploy-k8s项目中修改的文件service/jtest/Jenkinsfile
和service/jtest/Jenkinsfile
构建成功后到k8s中看下jtest空间是否有对应的depoyment及pod跑起来。
nacos 看下服务列表jtest空间下有没有出现新的服务
发表回复