前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 Kubernetes/Jenkins/Harbor/SonarQube 搭建微服务CI/CD系统

基于 Kubernetes/Jenkins/Harbor/SonarQube 搭建微服务CI/CD系统

作者头像
DevOps时代
发布2019-07-05 18:40:38
1.7K0
发布2019-07-05 18:40:38
举报
文章被收录于专栏:DevOps时代的专栏
项目说明
  • 14个JAVA spring cloud 微服务项目
  • 5个Node项目
  • 1个Node项目VUE生成静态页面做前端+nginx

pgsql redis rabbitmq emqx

项目思维导图

构建流程:

一、项目软件搭建

1、K8S搭建(参考阿良部署文档:kubeadmin安装单主K8S集群)

2、jenkins搭建

3、Harbor搭建

https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

4、Sonarqube搭建 sonarqube检测java项目:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven

sonarqube检测node项目:https://www.npmjs.com/package/sonarqube-scanner

二、CICD系统中使用的资料

1、jenkins pipeline(JAVA服务的)

代码语言:javascript
复制
node {
   def mvnHome = tool 'Maven'

   REGISTRY = 'hb.shubing.vip/k12soft'
   //environment {
   //REGISTRY = 'hb.shubing.vip/k12soft'
   //}


   stage('Pull Code from Gitlab.') {
        git branch: 'test_4', credentialsId: '1', url: 'http://10.0.0.82:9999/k12soft/xxx.git'
   }
   stage('Maven Package and Sonar.') {
        withMaven(jdk:'JDK'){
       // def  JAVA_HOME = "/usr/lib/jdk1.8.0_121"
        sh "'${mvnHome}/bin/mvn' clean package -e -U -Dmaven.test.skip=true sonar:sonar"
        //sh "'${mvnHome}/bin/mvn' -f ebase-api/pom.xml clean package sonar:sonar"
        }
    }

   stage('Build Docker Image.') {
        sh "sudo docker build -t $REGISTRY/${JOB_BASE_NAME}:${BUILD_ID} ."
    }
    stage('Push Docker Image to Harbor.') {
        sh "sudo docker push $REGISTRY/${JOB_BASE_NAME}:${BUILD_ID}"
    }
    stage('Deploy K8S Service.') {
        sh "sudo ssh 'root@10.0.0.102' 'cd /root/xtcloud && sh apply-config.sh ${BUILD_ID} ${JOB_BASE_NAME}'"
        dingTalk accessToken: 'https://oapi.dingtalk.com/robot/send?access_token=8241e530e0f2e68f74da6b78f893e2f526db4086a88e76de7348ddda101f13xx', imageUrl: '', jenkinsUrl: '', message: "  构建& K8S发布成功!", notifyPeople: ''
    }

}
2,jenkins pipeline(Node服务的)

node {

   REGISTRY = 'hb.shubing.vip/k12soft'
   stage('Pull Code from Gitlab.') {
        git branch: 'zangyunji', credentialsId: '1', url: 'http://10.0.0.82:9999/k12soft/xxx.git'
   }
   //stage('Node Install Modules.') {
     //   sh "source /etc/profile.d/node.sh && npm i"
    //}
    stage('Node Build and Sonar.') {
        sh "source /etc/profile.d/node.sh && sonar-scanner"
        sh "source /etc/profile.d/node.sh && npm run tsc"
    }

   stage('Build Docker Image.') {
        sh "sudo docker build -t $REGISTRY/${JOB_BASE_NAME}:${BUILD_ID} ."
    }
    stage('Push Docker Image to Harbor.') {
        sh "sudo docker push $REGISTRY/${JOB_BASE_NAME}:${BUILD_ID}"
    }
    stage('Deploy K8S Service.') {
        sh "sudo ssh 'root@10.0.0.102' 'cd /root/xtcloud && sh apply-config.sh ${BUILD_ID} ${JOB_BASE_NAME}'"
        dingTalk accessToken: 'https://oapi.dingtalk.com/robot/send?access_token=8241e530e0f2e68f74da6b78f893e2f526db4086a88e76de7348ddda101f13xx', imageUrl: '', jenkinsUrl: '', message: "  构建& K8S发布成功!", notifyPeople: ''
    }


}

3、dockerfile (JAVA服务的)

代码语言:javascript
复制
FROM java:8u111
MAINTAINER gongshubing@weds.com.cn
# 定义变量
ENV WORK_DIR /opt
ENV LOG_DIR /data/logs
EXPOSE 8086
# 从主机 copy 到容器里面
COPY target/bepf_archives.jar $WORK_DIR
WORKDIR $WORK_DIR
ENTRYPOINT ["sh", "-c"]
CMD ["java -server -Dspring.profiles.active=ops -Xmx512m -Xms256m -Xmn256m -XX:+UseG1GC -XX:+DisableExplicitGC -Duser.timezone=GMT+8 -jar *.jar > /dev/null"
]

4、dockerfile(NODE服务的)

代码语言:javascript
复制
FROM node:10.15.3
MAINTAINER gongshubing@weds.com.cn
# 定义变量
ENV WORK_DIR /opt
ENV LOG_DIR /data/logs
ENV EGG_SERVER_ENV ops
EXPOSE 8086
# 从主机 copy 到容器里面
COPY ./ $WORK_DIR/
RUN sed -i 's/\-\-daemon//g' $WORK_DIR/package.json
WORKDIR $WORK_DIR
ENTRYPOINT ["sh", "-c"]
CMD ["npm start"]

5、K8S 编排yaml文件(所有项目编排文件一样,不同之处只有镜像URL/IP/PORT):pod中的日志文件写入nfs

代码语言:javascript
复制
# deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: xtcloud-appgateway-deployment
  labels:
    app: xtcloud-appgateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: xtcloud-appgateway
  template:
    metadata:
      labels:
        app: xtcloud-appgateway
    spec:
      containers:
      - name: xtcloud-appgateway
        image: hb.shubing.vip/k12soft/xtcloud-appgateway:latest
        ports:
        - containerPort: 8097
        volumeMounts:
          - name: xtcloud-logs-persistent-storage
            mountPath: /data/logs
      volumes:
      - name: xtcloud-logs-persistent-storage
        nfs:
          path: /nfs
          server: 10.0.60.67
      imagePullSecrets:
        - name: weds-harbor-secret
# service
---
kind: Service
apiVersion: v1
metadata:
  name: xtcloud-appgateway-service
spec:
  clusterIP: 192.168.1.15
  selector:
    app: xtcloud-appgateway
  ports:
    - protocol: TCP
      port: 8097
      targetPort: 8097

6、Jenkins调用编排K8s脚本

代码语言:javascript
复制
#!/bin/bash

TAG=$1
JOB_NAME=$2

#sed "s/latest/$TAG/" ${JOB_NAME}.yml | kubectl apply -f -
sed "s/latest/$TAG/" ${JOB_NAME}.yml | kubectl replace --force -f -

效果图

来源:https://blog.51cto.com/onlyoulinux/2402092

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps时代 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目思维导图
  • 一、项目软件搭建
  • 二、CICD系统中使用的资料
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档