打包部署wld-business-platform镜像

打包部署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。相关的数据流转示意图:

img

我们的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

image-20231031205423520

其中包含了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
      • Script Path: service/jtest/Jenkinsfile

应用并保存

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/Jenkinsfileservice/jtest/Jenkinsfile

构建成功后到k8s中看下jtest空间是否有对应的depoyment及pod跑起来。

nacos 看下服务列表jtest空间下有没有出现新的服务


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注