青年IT男

个人从事金融行业,就职过易极付、思建科技等重庆一流技术团队,目前就职于某网约车平台负责整个支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、人工智能等领域。

k8s+jenkins+微服务集成实战

k8s+jenkins+微服务集成实战

下面以实际项目为基础来简单总结微服务的自动化集成和部署,容器编排采用k8s、项目构建采用jenkins、镜像仓库Harbor、微服务采用springboot为基础这几本上是目前比较流行的架构。
环境准备:
1.采用rancher集成k8s集群参照文章
https://www.jianshu.com/nb/28940457
2.jenkins部署
https://www.jianshu.com/nb/28961729
3.springboot项目(这里以支付系统路由系统为例)
https://gitee.com/newitman/musfinance2.0.git
4.准备镜像仓库
https://www.jianshu.com/nb/28965048
5.代码仓库
https://www.jianshu.com/nb/28961884
##准备Dockerfile

FROM primetoninc/jdk:1.8
MAINTAINER liyong 1028826685@qq.com.com
COPY musfinance2.0-assemble/target/musfinance.jar /musfinance.jar
ENV PARAMS="sdev"
ENTRYPOINT ["sh","-c","java -Dspring.profiles.active=$PARAMS -jar /musfinance.jar"]

备注:这里的$PARAMS由外部启动容器传入即使用k8s启动容器时传入
##Jenkins构建项目
怎样构建流水线项目请参照https://www.jianshu.com/p/b09158462991
##Jenkins构建脚本

#!groovy
pipeline{

    agent any

    environment{
        REPOSITORY='ssh://git@gitlab.mooc.com:2222/ouwen/musfinance2.0.git'
        MODULE='musfinance2.0'
        SCRIPT_PATH="/root/build/"
    }

    stages{
        stage('获取代码'){
            steps{
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git "${REPOSITORY}"
            }
        }
        stage('代码静态检查'){
            steps{
                echo "start code check"

            }
        }
        stage('编译+测试'){
            steps{
                echo "start compile"
                sh "mvn clean package -Dmaven.test.skip=true"
            }
        }
        stage('构建镜像+镜像推送'){
            steps{
                echo "start build images  and push images"
                sh "${SCRIPT_PATH}build-fintch-images.sh ${MODULE}"
            }
        }
        stage('发布'){
            steps{
                echo "start deploy"
                sh "${SCRIPT_PATH}deploy-fintch.sh musfinance ${MODULE}"
            }
        }
    }
}

${SCRIPT_PATH}/build-fintch-images.sh

#!/bin/bash

MODULE=$1

TIME=`date "+%Y%m%d%H%M"`

GIT_REVISION=`git log -1 --pretty=format:"%h"`

IMAGE_NAME=harbor.ouwen.com/micro-service/${MODULE}:${TIME}_${GIT_REVISION}

#cd ${MODULE}

docker build -t ${IMAGE_NAME} .

echo `ls`

#cd -

echo `pwd`

docker push ${IMAGE_NAME}

echo "${IMAGE_NAME}" > IMAGE_NAME

${SCRIPT_PATH}/deploy-fintch.sh

#!/bin/bash
IMAGE=`cat IMAGE_NAME`
DEPLOYMENT=$1
MODULE=$2
echo "update image to :${IMAGE}"
kubectl set image deployments/${DEPLOYMENT} ${MODULE}=${IMAGE}

##Gitlab配置Webhooks
1.png
2.png

##Jenkins构建项目
立即构建musfinance2.0项目等待项目构建….
镜像上传到harbor
1.png

1.png
可以看到不存在deployments 这里第一次部署由于我的脚步使用kubectl set image所以为了通用第一次需要手动创建deployement
##手动创建Deployment
kubectl create -f musfinance2.0.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: musfinance
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: musfinance
    spec:
      containers:
      - name: musfinance
        image: harbor.ouwen.com/micro-service/musfinance2.0:201809060243_8f927db
        ports:
        - containerPort: 9082
        env:
        - name: PARAMS
          value: sdev

##手动创建Service
kubectl create -f musfinance2.0-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: musfinance
spec:
  type: NodePort
  ports:
       - port: 9081
         nodePort: 30022
  selector:
    app: musfinance

##查看kubernets dashboard 控制台
1.png
2.png
##查看容器运行日志
1.png
数据库连接报错,这里需要配置你自己的数据库
2.png
##修改数据库、redis、mysql为自己地址上传代码项目会自动构建并部署到k8s集群

备注:数据库脚本自行执行截图如下
##脚本目录
5.png

0
1028826685@qq.com