jenkins+pipeline+kubernetes部署java服务

脚本文件编写

查询模板脚本情况

[root@k8s-jenkins jenkins_home]# ls model/
build.sh  deploy.yaml  dockerfile  leaf.properties

查询dockerfile文件

cat model/dockerfile 
FROM java:8
 
VOLUME /app
 
COPY INAME.jar INAME.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
 
RUN bash -c "touch /INAME.jar"
EXPOSE 8085
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./uranedom","-jar","-Dspring.profiles.active=test", "-Dserver.port=8085", "-Duser.timezone=GMT+08", "/INAME.jar"]

查看build.sh文件

[root@k8s-jenkins jenkins_home]# cat model/build.sh 
#!/bin/bash
#DOCKER_HOME=/var/jenkins_home/tools/docker 
#export PATH=$PATH:$DOCKER_HOME

docker build -t $1:$2 . 
# 制作镜像
docker tag $1:$2 harbor-test.sgpexchange.com/sgpexchange_test/$1:$2 # 镜像做tar标记
docker login -u admin -p 12345 harbor-test.sgpexchange.com
docker push harbor-test.sgpexchange.com/sgpexchange_test/$1:$2 # 将镜像上传致我们的镜像库,一般都是私有镜像库

4、文件中的leaf.properties文件为服务配置文件

jenkins配置
1、配置丢弃构建

在这里插入图片描述

 

2、配置构建发布参数

在这里插入图片描述

 

3、配置git参数

在这里插入图片描述

 

4、配置java服务名称

在这里插入图片描述

 

5、配置环境参数

在这里插入图片描述

 

6、配置Pipeline Script

在这里插入图片描述

 

其中需要配置gitlab账号参数(credentialsId: ‘c5d7e5af-f442-44ed-98ff-d7a097cd4f49’)

 

pipeline script脚本内容


// 部署远程主机ip地址,需要通过密钥的方式设置免密登录
def remoteIp = "192.168.1.214"
def remotePort='22'
// 远程tomcat位置(windows要使用/来表示路径)
def tomcatPath = "/var/jenkins_home/image/${envir}"
def project='leaf-server'
def service='test'
def v='123'
def img=''
  node (){ //指定Slave标签

  stage('Git Checkout') {
      if("Deploy" == env.status){
                checkout([$class: 'GitSCM', branches: [[name: '${tag}']],
						userRemoteConfigs: [[credentialsId: 'c5d7e5af-f442-44ed-98ff-d7a097cd4f49', 
							url: 'http://gitlab.tqxd.com/new-sgp/leaf.git']]])
      }else{
          echo "回滚版本跳过拉取代码";
      }

	}
  stage('Maven Build') {
      if("Deploy" == env.status){
       sh '''
          MAVEN_HOME=/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3
          export PATH=$MAVEN_HOME/bin:/var/jenkins_home/tools/jdk1.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
          mvn clean install  -am -Dmaven.test.skip=true
       '''
      }else{
          echo "回滚版本跳过拉取代码";
      }
       
  }
  stage('push') {
	    if("Deploy" == env.status){
		echo "pushde时间:${v}"
		sh '''
		mkdir -p /var/jenkins_home/image/${envir}/
		cp /var/jenkins_home/model/dockerfile /var/jenkins_home/image/${envir}/
		cp /var/jenkins_home/model/build.sh /var/jenkins_home/image/${envir}
		mkdir -p /var/jenkins_home/image/${envir}/${name}-conf/
		cp /var/jenkins_home/model/leaf.properties /var/jenkins_home/image/${envir}/${name}-conf/
		cp /var/jenkins_home/model/deploy.yaml /var/jenkins_home/image/${envir}/${name}.yaml
		sed -i 's/model/'${name}'/g' /var/jenkins_home/image/${envir}/${name}.yaml
		sed -i 's/version/'${envir}'/g' /var/jenkins_home/image/${envir}/${name}.yaml
		sed -i 's/INAME/'${name}'/g' /var/jenkins_home/image/${envir}/dockerfile
		cp /var/jenkins_home/workspace/${JOB_NAME}/${name}/target/*.jar /var/jenkins_home/image/${envir}/${name}.jar
		'''
		v = sh(script: "date +%Y%m%d.%H%M%S", returnStdout: true).trim()
		sh(script: "cd /var/jenkins_home/image/${envir}/ && ./build.sh ${name} ${envir}", returnStdout: true).trim()
		img = "harbor-test.sgpexchange.com/${name}:v${envir}"
	    }else{
          echo "回滚版本跳过拉取代码";
      }
		
  }
  stage('publish') {
      if("Rollback" == env.status){
           img = env.Deploy
      }
		sh '''
		pwd 
		'''
		echo "end的时间出:${v}"
		sh(script: "cd /var/jenkins_home/image/test && ./build.sh ${name} ${envir}", returnStdout: true).trim()
		sh '''
		echo "end img:${img}"
		'''
  }

  stage('end') {
      if("Rollback" == env.status){
      img = env.Deploy
      }
      sh(script: "scp -i /var/jenkins_home/.ssh/id_rsa.pem  /var/jenkins_home/image/${envir}/${name}.yaml root@192.168.1.214:/root/", returnStdout: true).trim()
      sh(script: "scp -i /var/jenkins_home/.ssh/id_rsa.pem -r /var/jenkins_home/image/${envir}/${name}-conf/ root@192.168.1.214:/root/", returnStdout: true).trim()
      sh(script: "ssh -i /var/jenkins_home/.ssh/id_rsa.pem -t root@192.168.1.214 'kubectl replace --force -f '${name}'.yaml'", returnStdout: true).trim()
  }
}

构建job查看job运行情况

在这里插入图片描述

k8s服务pods查询
在k8s服务中查看各种信息
1、查询pods服务

[root@k8s-master ~]# kubectl get pods -n k8s-test -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
leaf-server-6c8b4d8454-r2blv   1/1     Running   0          90m   10.244.3.58   k8s-node3   <none>           <none>

2、查询service服务

[root@k8s-master ~]# kubectl get svc -n k8s-test -o wide
NAME                  TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE   SELECTOR
leaf-server-service   NodePort   10.109.121.210   <none>        8085:31079/TCP   91m   app=leaf-server

3、查询deployment服务

[root@k8s-master ~]# kubectl get deployment -n k8s-test -o wide
NAME          READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS    IMAGES                                                          SELECTOR
leaf-server   1/1     1            1           92m   leaf-server   harbor-test.sgpexchange.com/sgpexchange_test/leaf-server:test   app=leaf-server

4、查询configmap服务

[root@k8s-master ~]# kubectl get configmap -n k8s-test -o wide
NAME                 DATA   AGE
kube-root-ca.crt     1      3d1h
leaf-server-config   1      3d

 

测试

1、通过nodeport地址测试
http://192.168.1.214:31079/api/segment/get/leaf_ransom_order_id
在这里插入图片描述
2、宿主服务测试
在这里插入图片描述
至此服务部署完毕

————————————————
版权声明:本文为CSDN博主「yunson_Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_38432732/article/details/124988310

jenkins+pipeline+k8s+harbor部署java环境

1、gitlab部署

部署详情:Ubuntu系统安装gitlab-server(https://blog.csdn.net/baidu_38432732/article/details/90371731)

再上传代码

2、部署harbor镜像仓库

详情见:https://blog.csdn.net/baidu_38432732/article/details/106430307

3、jenkins安装部署并创建job项目

1)创建pipeline项目

 

 

2)设置版本参数

 

3)配置gitlab源

 

4)配置pipeline

 

3、编写pipeline文件jenkinsfile

 
pipeline {
 
  agent {
    node {
      label 'master'
    }
  }
    // 拉取代码
  stages {
    stage('GetCode') {
      steps {
        sleep 5
      }
    }
 
    // 代码打包
    stage('Maven Build') {
        steps {
          sh '''
          export JAVA_HOME=/home/java8
          cd /root/.jenkins/workspace/now-pipeline-test/mall-portal/
          /home/maven-3.6.2/bin/mvn clean install -Ptest
          '''
        }
    }
 
    // 推送到镜像仓库
    stage('Push Image') {
      steps {
      sh '''
        REPOSITORY=registry.yunson.com/hahamall/portal:${Tag}
        docker build -t $REPOSITORY /root/.jenkins/workspace/now-pipeline-test/mall-portal/docker/pre-prod/
        docker login registry.yunson.com -u admin -p Harbor12345
        docker push $REPOSITORY
        '''
      }
    }
 
    // 部署到Docker主机
    stage('Deploy to Docker') {
      steps {
       //远程执行脚本
      sh '''
       ssh -i /root/.ssh/harbor root@registry.yunson.com "sh /root/portal/portal.sh"
        '''
      }
    }
  }
}

dockerfile文件

FROM java:8
 
VOLUME /app
 
COPY mall-portal*.jar mall-portal.jar
COPY application.yml application.yml
 
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
 
RUN bash -c "touch /mall-portal.jar"
EXPOSE 8085
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./uranedom","-jar","-Dspring.profiles.active=pre-prod", "-Duser.timezone=GMT+08", "/mall-portal.jar"]

k8s yaml配置文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: portal
  labels:
    name: portal
 
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: portal
  template:
    metadata:
      labels:
        app: portal
    spec:
      containers:
        - name: portal
          image: registry.yunson.com/hahamall/portal:v1.0.0
          #imagePullPolicy: Never 
          imagePullPolicy: IfNotPresent 
          #imagePullPolicy: Always
          ports:
            - containerPort: 8080
              protocol: TCP
          volumeMounts:
          - name: tz-config
            mountPath: /etc/localtime
          #- name: portal-config
          #  mountPath: /config/
 
      volumes:
      - name: tz-config
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
       #- name: portal-config
       #configMap:
       #   name: otc-config
          #定义configmap名称
 
---
kind: Service
apiVersion: v1
metadata:
  name: portal-service
spec:
 # clusterIP: 10.108.124.235
  clusterIP: 10.96.0.234
  selector:
   #node: portal
    app: portal
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 31098
  type: NodePort


————————————————
版权声明:本文为CSDN博主「yunson_Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_38432732/article/details/115233922

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值