基於jenkins的k8s ci/cd實例

K8S ci/cd三劍客:jenkinsfile、dockerfile、k8s.yaml
k8s的ci/cd實例
jenkins+jenkinsfile+dockerfile+k8s.yaml
一、dockerfile 實例 java

FROM harbor.k8s.site/library/jdk/jre:1.8-apline
ENV TZ=Asia/Shanghai
VOLUME /tmp
ADD build/libs/*.jar /app/app.jar
RUN mkdir /logs/ && echo 'java ${JVMSIZE} ${EUREKA} ${LOGPATH}  ${APOLLO} -jar app.jar' > /usr/bin/run.sh;chmod a+x /usr/bin/run.sh
WORKDIR /app/
CMD run.sh

二、k8s.yaml 實例git

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: yryd-client
  namespace: default
  labels:
    k8s-app: yryd-client

spec:
  replicas: 1
  revisionHistoryLimit: 1
  #滾動升級時70s後認爲該pod就緒
  minReadySeconds: 70
  strategy:
    ##因爲replicas爲3,則整個升級,pod個數在2-4個之間
    rollingUpdate:
      #滾動升級時會先啓動1個pod    
      maxSurge: 1 
      #滾動升級時容許的最大Unavailable的pod個數
      maxUnavailable: 1   
  selector:
    matchLabels:
      k8s-app: yryd-client
  template:
    metadata:
      labels:
        k8s-app: yryd-client
    spec:
      containers:
      - name: yryd-client
        image: harbor.k8s..site/yryd/yryd-client:build-<BUILD_TAG>
        ports:
        #容器的端口
        - containerPort: 5001
          name: yryd-client
          protocol: TCP
        env:
        - name: JVMSIZE
          value: -Xms1G -Xmx1G
        - name: LOGPATH
          value: -Dlogging.path=/logs/yryd/yryd-client/
---
apiVersion: v1
kind: Service
metadata:
  name: yryd-client
  namespace: default
  labels:
    k8s-app: yryd-client
spec:
  ports:
  #集羣IP的端口
  - port: 5001
    name: yryd-client
    protocol: TCP
    #容器的端口
    targetPort: 5001
  selector:
    k8s-app: yryd-client

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: yryd-client
  namespace: default
spec:
  rules:
  - host: yryd-client.k8s..site
    http:
      paths:
      - backend:
          serviceName: yryd-client
          servicePort: 5001

三、jenkinsfile實例docker

pipeline {
    agent {
        label 'master'
    }
    parameters {
        string(name: "branch", defaultValue: "master", description: "code branch")      
        extendedChoice( 
            defaultValue: '', 
            description: '選擇發佈模塊', 
            multiSelectDelimiter: ',', 
            name: 'module', 
            quoteValue: false, 
            saveJSONParameterToFile: false, 
            type: 'PT_CHECKBOX', 
            value:'yryd-client', 
            visibleItemCount: 10)       
    }   
    options {
        skipDefaultCheckout(true)
        buildDiscarder(logRotator(daysToKeepStr: '5', numToKeepStr: '8'))
    }
    stages{  
        stage('get code'){
            steps{
                git branch: '$branch', credentialsId: 'dd93cf17-ab6c-48e4-9aca-b063d05a031b', url: 'http://git.xxx.club/MMT-YRYD/mmt-yryd.git'
            }
        }
        stage('yryd-client'){
            when {
                expression { return "$params.module".contains('yryd-client')}
            }
            steps {
                sh '''
                    imageName="harbor.k8s.site/yryd/yryd-client:build-${BUILD_NUMBER}"
                    cd mmt-yryd-client-service/
                    /opt/software/gradle-4.8/bin/gradle clean excludedev build -x test
                    docker build -t ${imageName} .
                    docker push ${imageName}
                    docker rmi ${imageName} 
                    sed -i "s/<BUILD_TAG>/${BUILD_NUMBER}/g" k8s.yaml
                    kubectl  apply -f k8s.yaml --record                 
                '''
            }           
        }      
    }
}
相關文章
相關標籤/搜索