环境准备
OCP项目准备与配置
ocp项目作者Gitee地址:https://gitee.com/owenwangwen/open-capacity-platform
修改docker仓库配置
修改 open-capacity-platform/pom.xml
# 大概55、56行 将 docker.host 改成 docker.repostory 增加 docker.registry.name 标签 <!-- harbor地址,默认80端口 --> <docker.repostory>192.168.1.112</docker.repostory> <!-- harbor项目地址 --> <docker.registry.name>ocp</docker.registry.name> <!-- 制作镜像的前缀 --> <docker.image.prefix>ocp</docker.image.prefix>
|
修改eureka配置
修改 open-capacity-platform/register-center/eureka-server/src/main/resources/application-slave0.yml
# service名称为cloud-eureka defaultZone: http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka prefer-ip-address: false # instance字段下增加 hostname appname hostname: cloud-eureka appname: eureka-server
|
修改auth-server配置
修改 open-capacity-platform/oauth-center/auth-server/src/main/resources/bootstrap.yml
defaultZone: http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka
|
修改 open-capacity-platform/oauth-center/auth-server/src/main/resources/application.yml
# auth-center-mysql 是后面部署的 headless 名称 url: jdbc:mysql://auth-center-mysql:3306/oauth-center?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false # mysql用户名和密码 username: root password: xxxx
# redis配置 # ocp-redis 是后面部署的 headless 名称 host: ocp-redis
|
修改user-center配置
修改 open-capacity-platform/business-center/user-center/src/main/resources/bootstrap.yml
defaultZone: http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka
|
修改 open-capacity-platform/business-center/user-center/src/main/resources/application.yml
# user-center-mysql 是后面部署的 headless 名称 url: jdbc:mysql://user-center-mysql:3306/user-center?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false # mysql用户名和密码 username: root password: xxxx
# redis配置 # ocp-redis 是后面部署的 headless 名称 host: ocp-redis
|
修改log-center配置
修改 open-capacity-platform/monitor-center/log-center/src/main/resources/bootstrap.yml
defaultZone: http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka
|
修改 open-capacity-platform/monitor-center/log-center/src/main/resources/application.yml
# log-center-mysql 是后面部署的 headless 名称 url: jdbc:mysql://log-center-mysql:3306/log-center?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false # mysql用户名和密码 username: root password: xxxx
# redis配置 # ocp-redis 是后面部署的 headless 名称 host: ocp-redis
|
修改api-gateway配置
修改 open-capacity-platform/api-gateway/src/main/resources/bootstrap.yml
defaultZone: http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka
|
修改 open-capacity-platform/api-gateway/src/main/resources/application.yml
url: jdbc:mysql://auth-center-mysql:3306/oauth-center?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false # mysql用户名和密码 username: root password: xxxx
# redis配置 # ocp-redis 是后面部署的 headless 名称 host: ocp-redis
|
修改back-center配置
修改 open-capacity-platform/web-portal/back-center/src/main/view/static/module/config.js
# api-gateway的url,端口通过 kubectl get svc -n ingress-nginx 查看 base_server: 'http://api-gateway.ocp.com:32080/' # eureka_server的url eureka_server: 'http://eureka.ocp.com:32080/'
|
在 open-capacity-platform/web-portal/back-center/dockerfile 里编写Dockerfile制作nginx镜像
FROM tangweifeng/nginx RUN rm -rf /usr/share/nginx/html ADD ./src/main/view/static /usr/share/nginx/html EXPOSE 80 CMD ["nginx","-g","daemon off;"]
|
编写 dockerfile_auth-center
vim open-capacity-platform/sql/dockerfile_auth-center
FROM mysql:5.7.26 ADD 02.oauth-center.sql /docker-entrypoint-initdb.d/02.oauth-center.sql EXPOSE 3306
|
编写 dockerfile_log-center
vim open-capacity-platform/sql/dockerfile_log-center
FROM mysql:5.7.26 ADD 05.log-center.sql /docker-entrypoint-initdb.d/05.log-center.sql EXPOSE 3306
|
编写 dockerfile_user-center
vim open-capacity-platform/sql/dockerfile_user-center
FROM mysql:5.7.26 ADD 01.user-center.sql /docker-entrypoint-initdb.d/01.user-center.sql EXPOSE 3306
|
部署ingress-nginx
参考这篇文章:https://1335402049.github.io/2020/09/23/Kubernetes%E9%83%A8%E7%BD%B2ingress-nginx/
部署nfs storageclass
在部署微服务之前,考虑mysql、redis等服务数据的存储,我们准备使用nfs storageclass进行动态pv的创建,可以参考这篇文章:https://1335402049.github.io/2020/09/16/Kubernetes%E4%B8%AD%E4%BD%BF%E7%94%A8NFS%E7%9A%84StorageClass/
Kubernetes资源清单
eureka
eureka-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: cloud-eureka spec: replicas: 3 selector: matchLabels: app: eureka serviceName: cloud-eureka template: metadata: labels: app: eureka spec: imagePullSecrets: - name: harbor-registry containers: - name: eureka-server image: 192.168.1.112/ocp/eureka-server imagePullPolicy: IfNotPresent ports: - containerPort: 1111
|
eureka-service.yaml
apiVersion: v1 kind: Service metadata: name: cloud-eureka spec: type: ClusterIP ports: - port: 1111 targetPort: 1111 selector: app: eureka
|
eureka-ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: eureka annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: eureka.ocp.com http: paths: - path: / backend: serviceName: cloud-eureka servicePort: 1111
|
mysql
auth-center-mysql
auth-center-mysql-secret.yaml
apiVersion: v1 kind: Secret metadata: name: auth-center-mysql data: # 使用 echo -n '<密码>' |base64 获取加密后的密码 password: dGFuZzE2MTE= stringData: username: root
|
auth-center-mysql-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: auth-center-mysql data: mysqld.cnf: |- [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks
|
auth-center-mysql-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: auth-center-mysql spec: replicas: 1 selector: matchLabels: app: auth-center-mysql serviceName: auth-center-mysql volumeClaimTemplates: - metadata: name: auth-center-mysql-data spec: storageClassName: managed-nfs-storage accessModes: - ReadWriteMany resources: requests: storage: 500Mi template: metadata: labels: app: auth-center-mysql spec: imagePullSecrets: - name: harbor-registry volumes: - name: auth-center-mysql-conf configMap: name: auth-center-mysql containers: - name: auth-center-mysql image: 192.168.1.112/ocp/auth-center-mysql imagePullPolicy: IfNotPresent ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: auth-center-mysql key: password volumeMounts: - name: auth-center-mysql-data mountPath: /var/lib/mysql - name: auth-center-mysql-conf mountPath: /etc/mysql/mysql.conf.d/
|
auth-center-mysql-service.yaml
apiVersion: v1 kind: Service metadata: name: auth-center-mysql spec: clusterIP: None selector: app: auth-center-mysql ports: - port: 3306 targetPort: 3306
|
log-center-mysql
log-center-mysql-secret.yaml
apiVersion: v1 kind: Secret metadata: name: log-center-mysql data: # 使用 echo -n '<密码>' |base64 获取加密后的密码 password: dGFuZzE2MTE= stringData: username: root
|
log-center-mysql-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: log-center-mysql data: mysqld.cnf: |- [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks
|
log-center-mysql-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: log-center-mysql spec: replicas: 1 selector: matchLabels: app: log-center-mysql serviceName: log-center-mysql volumeClaimTemplates: - metadata: name: log-center-mysql-data spec: storageClassName: managed-nfs-storage accessModes: - ReadWriteMany resources: requests: storage: 500Mi template: metadata: labels: app: log-center-mysql spec: imagePullSecrets: - name: harbor-registry volumes: - name: log-center-mysql-conf configMap: name: log-center-mysql containers: - name: log-center-mysql image: 192.168.1.112/ocp/log-center-mysql imagePullPolicy: IfNotPresent ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: log-center-mysql key: password volumeMounts: - name: log-center-mysql-data mountPath: /var/lib/mysql - name: log-center-mysql-conf mountPath: /etc/mysql/mysql.conf.d/
|
log-center-mysql-service.yaml
apiVersion: v1 kind: Service metadata: name: log-center-mysql spec: clusterIP: None selector: app: log-center-mysql ports: - port: 3306 targetPort: 3306
|
user-center-mysql
user-center-mysql-secret.yaml
apiVersion: v1 kind: Secret metadata: name: user-center-mysql data: # 使用 echo -n '<密码>' |base64 获取加密后的密码 password: dGFuZzE2MTE= stringData: username: root
|
user-center-mysql-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: user-center-mysql data: mysqld.cnf: |- [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks
|
user-center-mysql-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: user-center-mysql spec: replicas: 1 selector: matchLabels: app: user-center-mysql serviceName: user-center-mysql volumeClaimTemplates: - metadata: name: user-center-mysql-data spec: storageClassName: managed-nfs-storage accessModes: - ReadWriteMany resources: requests: storage: 500Mi template: metadata: labels: app: user-center-mysql spec: imagePullSecrets: - name: harbor-registry volumes: - name: user-center-mysql-conf configMap: name: user-center-mysql containers: - name: user-center-mysql image: 192.168.1.112/ocp/user-center-mysql imagePullPolicy: IfNotPresent ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: user-center-mysql key: password volumeMounts: - name: user-center-mysql-data mountPath: /var/lib/mysql - name: user-center-mysql-conf mountPath: /etc/mysql/mysql.conf.d/
|
user-center-mysql-service.yaml
apiVersion: v1 kind: Service metadata: name: user-center-mysql spec: clusterIP: None selector: app: user-center-mysql ports: - port: 3306 targetPort: 3306
|
redis
redis-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: ocp-redis data: redis.conf: |- ################################## INCLUDES ################################### # include /path/to/local.conf # include /path/to/other.conf
################################## MODULES ##################################### # loadmodule /path/to/my_module.so # loadmodule /path/to/other_module.so
bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
# unixsocket /tmp/redis.sock # unixsocketperm 700
timeout 0
tcp-keepalive 300
################################# GENERAL #####################################
daemonize no
supervised no
pidfile /data/pid/redis_6379.pid
loglevel notice
logfile "/data/logs/redis.log"
# syslog-enabled no
# syslog-ident redis
# syslog-facility local0
databases 16
always-show-logo yes
save 900 1 save 300 10 save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data
# replicaof <masterip> <masterport>
# masterauth <master-password>
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
# repl-ping-replica-period 10
# repl-timeout 60
repl-disable-tcp-nodelay no
# repl-backlog-size 1mb
# repl-backlog-ttl 3600
replica-priority 100
# min-replicas-to-write 3 # min-replicas-max-lag 10
# replica-announce-ip 5.5.5.5 # replica-announce-port 1234
# requirepass xxxx
# rename-command CONFIG ""
maxclients 2000
# maxmemory <bytes>
# maxmemory-policy noeviction
# maxmemory-samples 5
# replica-ignore-maxmemory yes
lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
# appendfsync always appendfsync everysec # appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
# cluster-enabled yes
# cluster-config-file nodes-6379.conf
# cluster-node-timeout 15000
# cluster-replica-validity-factor 10
# cluster-migration-barrier 1
# cluster-require-full-coverage yes
# cluster-replica-no-failover no
# cluster-announce-ip 10.1.1.5 # cluster-announce-port 6379 # cluster-announce-bus-port 6380
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
# notify-keyspace-events Elg
# notify-keyspace-events Ex
notify-keyspace-events ""
hash-max-ziplist-entries 512 hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128 zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096 stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60
# client-query-buffer-limit 1gb
# proto-max-bulk-len 512mb
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
# lfu-log-factor 10 # lfu-decay-time 1
########################### ACTIVE DEFRAGMENTATION ####################### # activedefrag yes # active-defrag-ignore-bytes 100mb # active-defrag-threshold-lower 10 # active-defrag-threshold-upper 100 # active-defrag-cycle-min 5 # active-defrag-cycle-max 75 # active-defrag-max-scan-fields 1000
|
redis-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: ocp-redis spec: replicas: 1 selector: matchLabels: app: ocp-redis serviceName: ocp-redis volumeClaimTemplates: - metadata: name: ocp-redis-data spec: storageClassName: managed-nfs-storage accessModes: - ReadWriteMany resources: requests: storage: 500Mi template: metadata: labels: app: ocp-redis spec: volumes: - name: ocp-redis-conf configMap: name: ocp-redis containers: - name: ocp-redis image: redis:5.0.5 imagePullPolicy: IfNotPresent ports: - containerPort: 6379 volumeMounts: - name: ocp-redis-data mountPath: /data - name: ocp-redis-conf mountPath: /data/redis.conf command: - redis-server - /data/redis.conf
|
redis-service.yaml
apiVersion: v1 kind: Service metadata: name: ocp-redis spec: clusterIP: None selector: app: ocp-redis ports: - port: 6379 targetPort: 6379
|
auth-server
auth-server-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: auth-server spec: replicas: 2 selector: matchLabels: app: auth-server template: metadata: labels: app: auth-server spec: imagePullSecrets: - name: harbor-registry containers: - name: auth-server image: 192.168.1.112/ocp/auth-server imagePullPolicy: IfNotPresent ports: - containerPort: 8000
|
auth-server-service.yaml
apiVersion: v1 kind: Service metadata: name: auth-server spec: type: ClusterIP selector: app: auth-server ports: - port: 8000 targetPort: 8000
|
user-center
user-center-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: user-center spec: replicas: 2 selector: matchLabels: app: user-center template: metadata: labels: app: user-center spec: imagePullSecrets: - name: harbor-registry containers: - name: user-center image: 192.168.1.112/ocp/user-center imagePullPolicy: IfNotPresent ports: - containerPort: 7000
|
user-center-service.yaml
apiVersion: v1 kind: Service metadata: name: user-center spec: type: ClusterIP selector: app: user-center ports: - port: 7000 targetPort: 7000
|
log-center
log-center-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: log-center spec: replicas: 2 selector: matchLabels: app: log-center template: metadata: labels: app: log-center spec: imagePullSecrets: - name: harbor-registry containers: - name: log-center image: 192.168.1.112/ocp/log-center imagePullPolicy: IfNotPresent ports: - containerPort: 5006
|
log-center-service.yaml
apiVersion: v1 kind: Service metadata: name: log-center spec: type: ClusterIP selector: app: log-center ports: - port: 5006 targetPort: 5006
|
api-gateway
api-gateway-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: api-gateway spec: replicas: 1 selector: matchLabels: app: api-gateway template: metadata: labels: app: api-gateway spec: imagePullSecrets: - name: harbor-registry containers: - name: api-gateway image: 192.168.1.112/ocp/api-gateway imagePullPolicy: IfNotPresent ports: - containerPort: 9200
|
api-gateway-service.yaml
apiVersion: v1 kind: Service metadata: name: api-gateway spec: type: ClusterIP selector: app: api-gateway ports: - port: 9200 targetPort: 9200
|
api-gateway-ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: api-gateway annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: api-gateway.ocp.com http: paths: - path: / backend: serviceName: api-gateway servicePort: 9200
|
back-center
back-center-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: back-center data: nginx.conf: |- user nginx; worker_processes 1;
error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
events { worker_connections 1024; }
http { include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; #tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server { listen 80; listen [::]:80; server_name localhost;
location / { root /usr/share/nginx/html; index index.html index.htm; }
error_page 500 502 503 504 /50x.html;
location = /50x.html { root /usr/share/nginx/html; } } }
|
back-center-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: back-center spec: replicas: 2 selector: matchLabels: app: back-center template: metadata: labels: app: back-center spec: imagePullSecrets: - name: harbor-registry volumes: - name: nginx-conf configMap: name: back-center containers: - name: back-center image: 192.168.1.112/ocp/back-center imagePullPolicy: IfNotPresent ports: - containerPort: 80 volumeMounts: - name: nginx-conf mountPath: /etc/nginx/nginx.conf subPath: nginx.conf
|
back-center-service.yaml
apiVersion: v1 kind: Service metadata: name: back-center spec: type: NodePort selector: app: back-center ports: - port: 80 targetPort: 80
|
推送项目到GitLab

Jenkins持续发布

Pipeline
目前整个ocp微服务持续集成/持续交付分为7个流水线任务
mysql_redis
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('make mysql image') { steps { sh''' cd sql docker build -f dockerfile_auth-center -t 120.78.187.149/ocp/auth-center-mysql . docker build -f dockerfile_user-center -t 120.78.187.149/ocp/user-center-mysql . docker build -f dockerfile_log-center -t 120.78.187.149/ocp/log-center-mysql . ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker push 120.78.187.149/ocp/log-center-mysql docker push 120.78.187.149/ocp/auth-center-mysql docker push 120.78.187.149/ocp/user-center-mysql ''' } } stage('apply mysql resource list'){ steps { sh''' kubectl create secret docker-registry harbor-registry --docker-server=192.168.1.112 --docker-username=admin --docker-password=harbor123 --docker-email=admin@qq.com -n default kubectl apply -f k8s/auth-center-mysql/auth-center-mysql-secret.yaml -n default kubectl apply -f k8s/auth-center-mysql/auth-center-mysql-configmap.yaml -n default kubectl apply -f k8s/auth-center-mysql/auth-center-mysql-statefulset.yaml -n default kubectl apply -f k8s/auth-center-mysql/auth-center-mysql-service.yaml -n default kubectl apply -f k8s/user-center-mysql/user-center-mysql-secret.yaml -n default kubectl apply -f k8s/user-center-mysql/user-center-mysql-configmap.yaml -n default kubectl apply -f k8s/user-center-mysql/user-center-mysql-statefulset.yaml -n default kubectl apply -f k8s/user-center-mysql/user-center-mysql-service.yaml -n default kubectl apply -f k8s/log-center-mysql/log-center-mysql-secret.yaml -n default kubectl apply -f k8s/log-center-mysql/log-center-mysql-configmap.yaml -n default kubectl apply -f k8s/log-center-mysql/log-center-mysql-statefulset.yaml -n default kubectl apply -f k8s/log-center-mysql/log-center-mysql-service.yaml -n default ''' } } stage('apply redis resource list'){ steps { sh''' cd k8s/redis kubectl apply -f redis-configmap.yaml -n default kubectl apply -f redis-statefulset.yaml -n default kubectl apply -f redis-service.yaml -n default ''' } } } }
|
eureka
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('unpack code') { steps { sh "mvn -U -pl register-center/eureka-server/ -am clean package -DskipTests" } } stage('make eureka image') { steps { sh''' cd register-center/eureka-server && mvn docker:build ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker tag ocp/eureka-server 120.78.187.149/ocp/eureka-server docker rmi ocp/eureka-server docker push 120.78.187.149/ocp/eureka-server ''' } } stage('apply eureka resource list'){ steps { sh''' cd k8s/eureka kubectl apply -f eureka-statefulset.yaml -n default kubectl apply -f eureka-service.yaml -n default kubectl apply -f eureka-ingress.yaml -n default ''' } } } }
|
auth-server
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('unpack code') { steps { sh "mvn -U -pl oauth-center/auth-server -am clean package -DskipTests" } } stage('make auth-server image') { steps { sh''' cd oauth-center/auth-server && mvn docker:build ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker tag ocp/auth-server 120.78.187.149/ocp/auth-server docker rmi ocp/auth-server docker push 120.78.187.149/ocp/auth-server ''' } } stage('apply auth-server resource list'){ steps { sh''' cd k8s/auth-server kubectl apply -f auth-server-deployment.yaml -n default kubectl apply -f auth-server-service.yaml -n default ''' } } } }
|
user-center
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('unpack code') { steps { sh "mvn -U -pl business-center/user-center -am clean package -DskipTests" } } stage('make user-center image') { steps { sh''' cd business-center/user-center && mvn docker:build ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker tag ocp/user-center 120.78.187.149/ocp/user-center docker rmi ocp/user-center docker push 120.78.187.149/ocp/user-center ''' } } stage('apply user-center resource list'){ steps { sh''' cd k8s/user-center kubectl apply -f user-center-deployment.yaml -n default kubectl apply -f user-center-service.yaml -n default ''' } } } }
|
log-center
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('unpack code') { steps { sh "mvn -U -pl monitor-center/log-center -am clean package -DskipTests" } } stage('make log-center image') { steps { sh''' cd monitor-center/log-center && mvn docker:build ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker tag ocp/log-center 120.78.187.149/ocp/log-center docker rmi ocp/log-center docker push 120.78.187.149/ocp/log-center ''' } } stage('apply log-center resource list'){ steps { sh''' cd k8s/log-center kubectl apply -f log-center-deployment.yaml -n default kubectl apply -f log-center-service.yaml -n default ''' } } } }
|
api-gateway
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('unpack code') { steps { sh "mvn -U -pl api-gateway -am clean package -DskipTests" } } stage('make api-gateway image') { steps { sh''' cd api-gateway && mvn docker:build ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker tag ocp/api-gateway 120.78.187.149/ocp/api-gateway docker rmi ocp/api-gateway docker push 120.78.187.149/ocp/api-gateway ''' } } stage('apply api-gateway resource list'){ steps { sh''' cd k8s/api-gateway kubectl apply -f api-gateway-deployment.yaml -n default kubectl apply -f api-gateway-service.yaml -n default kubectl apply -f api-gateway-ingress.yaml -n default ''' } } } }
|
back-center
pipeline { agent { label 'node1' } environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } stage('make back-center image') { steps { sh''' cd web-portal/back-center/ docker build -t 120.78.187.149/ocp/back-center . ''' } } stage('upload image') { steps { sh''' docker login 120.78.187.149 -u admin -p tang1611 docker push 120.78.187.149/ocp/back-center ''' } } stage('apply back-center resource list'){ steps { sh''' cd k8s/back-center kubectl apply -f back-center-configmap.yaml -n default kubectl apply -f back-center-deployment.yaml -n default kubectl apply -f back-center-service.yaml -n default ''' } } } }
|
在 windows的hosts文件里面添加记录
192.168.1.110 eureka.ocp.com 192.168.1.110 api-gateway.ocp.com
|
构建
在构建之前,由于cnych/jenkins:jnlp6镜像没有maven环境,我们在这个镜像基础上重新制作镜像,增加maven环境
# 直接拉取即可,修改jenkins slave的pod模板,填写这个镜像 docker pull tangweifeng/jenkins-slave:latest
|
还需要再本地宿主机上安装maven,提前准备下载好本地需要的依赖jar
修改本地maven的settings.xml
# 在setting标签下添加localRepository <localRepository>/nfs/jarHome</localRepository>
|
执行,依赖会被下载到/nfs/jarHome路径下
mvn clean package -DskipTests
|
修改jenkins slave 的Pod模板,增加一个volume
如果不这样挂载依赖到容器里面,每次构建都会耗费大量时间在maven打包上

按照顺序依次执行pipeline,mysql_redis - eureka - auth-server - user-center - log-center - api-gateway - back-center

上面的各个pipeline脚本还有很多需要完善的地方,需要根据自己的实际情况进行完善,比如:job的触发器、sonarqube代码质量检查、邮件通知、自动化测试、shell脚本进行一些特定需求的开发、在制作镜像的时候先判断docker上是否存在此镜像(是否需要先进行删除)等等其他需求
最后在pipeline执行完成之,pod等资源被成功创建运行后,在浏览器通过任意node的ip:NodePort(back-center的nodeport)访问
