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 ''' } } } }