使用jenkins发布服务至k8s

流水线——》配置

pipeline {
    agent any
    environment {
        PROJECT_NAME_CN        = '后端服务'
        PROJECT_NAME           = 'rules-server'
        PACKAGE_TYPE           = 'jar'
        PROJECT_VERSION        = 'v1.0.0'
        PROJECT_BRANCH         = 'development'
        PROJECT_GIT_URL        = 'http://.git'
        DOCKER_REG_PREFIX      = 'registry.com/app/'
        PROJECT_PORT           = master对外端口
        EXPOSE_PORT            = 服务端口
        KUBERNETES_ENV         = '集群缩写'
    }
    stages {
        stage('git') {
            steps {
                echo '-------------------------------------------get code from git-------------------------------------------'
                dir(path: "./") {
                    git(
                        branch: "${PROJECT_BRANCH}",
                        credentialsId: '',
                        url: "${PROJECT_GIT_URL}",
                        changelog: true
                        )
                }
            }
        }
        stage('prepare') {
            steps {
                echo '--------------------------------------------preparing file---------------------------------------------'
                sh '''
                    if [ ${PACKAGE_TYPE} == 'npm' ] ;then
                        cp /opt/jenkins/files/nginx.conf ./nginx.conf
                    fi
                    cp /opt/jenkins/files/Dockerfile-${PACKAGE_TYPE} ./Dockerfile
                    cp rules-server/src/main/resources/Deployment.yaml ./Deployment.yaml
                    sed -i $(echo "s/#PROJECT_NAME/${PROJECT_NAME}/g") Deployment.yaml
                    sed -i $(echo "s/#PROJECT_PORT/${PROJECT_PORT}/g") Deployment.yaml
                    sed -i $(echo "s/#EXPOSE_PORT/${EXPOSE_PORT}/g") Deployment.yaml
                    sed -i $(echo "s/#PROJECT_VERSION/${PROJECT_VERSION}/g") Deployment.yaml
                    '''
            }
        }
        stage('compile'){
            steps{
                 echo '--------------------------------------------compile start--------------------------------------------'
                sh '''
                    cd ${WORKSPACE}
                    pwd
                    if [ ${PACKAGE_TYPE} == 'npm' ] ;then
                       echo "npm compile start"
                       cnpm install --ignore-scripts
                       npm run build
                    else
                       echo "maven compile start"
                       mvn clean package -B -DskipTests
                       mv rules-server/target/*.${PACKAGE_TYPE} app.${PACKAGE_TYPE}
                    fi
                '''
            }
        }
        stage('docker-build') {
            steps {
                echo '-------------------------------------------push mirrors start-------------------------------------------'
                sh '''
                    docker build -t $(echo ${DOCKER_REG_PREFIX}${PROJECT_NAME}:${PROJECT_VERSION}) .
                    docker push $(echo ${DOCKER_REG_PREFIX}${PROJECT_NAME}:${PROJECT_VERSION})
                '''
            }
        }
        stage('k8s-deploy') {
            steps {
                echo '--------------------------------------------deployment start--------------------------------------------'
                sh '''
                    kubectl config use-context k8s-${KUBERNETES_ENV}-admin@k8s-${KUBERNETES_ENV}
                    kubectl apply -f Deployment.yaml
                    kubectl set env deploy/$PROJECT_NAME DEPLOY_DATE="$(date)"
                '''
            }
        }
        stage('sonar') {
            steps {
                echo '------------------------------------------------sonar----------------------------------------------------'
                sh '''
                    mvn sonar:sonar \
                        -Dsonar.host.url=$SONAR_URL \
                        -Dsonar.login=admin \
                        -Dsonar.password=admin \
                        -Dsonar.issuesReport.html.enable=true \
                        -Dsonar.preview.excludePlugins=issueassign,scmstats \
                        -Dsonar.projectName=${PROJECT_NAME_CN}
                '''
            }
        }
    }
}
 

6f82e3c-2b61-4bcf-902d-d681eddd1a2 aa

Deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: #PROJECT_NAME
  labels:
    app: #PROJECT_NAME
    version: #PROJECT_VERSION
spec:
  selector:
    matchLabels:
      app: #PROJECT_NAME
  replicas: 1
  template:
    metadata:
      labels:
        app: #PROJECT_NAME
    spec:
      containers:
      - name: #PROJECT_NAME
        image: registry..com/app/#PROJECT_NAME:#PROJECT_VERSION
        imagePullPolicy: Always
        env:
          - name: MSP_REGISTRY_PORT
            value: "8500"
          - name: JAVA_OPTS
            value: "-server -Xms1024m -Xmx1024m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
        volumeMounts:
          - name: nfs
            mountPath: /home/datacenter/appdata
      volumes:
      - name: nfs
        nfs:
          path: /home/datacenter/appdata
          server: ip
---
apiVersion: v1
kind: Service
metadata:
  name: #PROJECT_NAME
  labels:
    app: #PROJECT_NAME
    version: #PROJECT_VERSION
spec:
  selector:
    app: #PROJECT_NAME
  type: NodePort
  ports:
    - name: tcp-8080
      protocol: TCP
      port: #EXPOSE_PORT
      targetPort: #EXPOSE_PORT
      nodePort: #PROJECT_PORT

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值