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
##Jenkins构建项目
立即构建musfinance2.0项目等待项目构建….
镜像上传到harbor
可以看到不存在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 控制台
##查看容器运行日志
数据库连接报错,这里需要配置你自己的数据库
##修改数据库、redis、mysql为自己地址上传代码项目会自动构建并部署到k8s集群
备注:数据库脚本自行执行截图如下
##脚本目录
![]()