Jenkens流水线自动化布置vue服务到k8s

jenkens流水线案例

#!groovy
def getHost(){
    def remote = [:]
    remote.name = ''
    remote.host = ''
    remote.user = ''
    remote.port = 
    remote.password = ''
    remote.allowAnyHosts = true
    return remote
}
pipeline {
    agent any
    environment {
        repoUrl = "http://xxx.git"
        sonarqube = "http://..."
        sonarqube_user = ""
        sonarqube_projectkey = ""
        sonarqube_projectName = ""
        sonarqube_language = "vue"
    }
    parameters {
        string(name:'repoBranch', defaultValue: 'publish', description: 'git分支名称')
    }
    tools {
        maven 'maven_...'
        jdk   'JDK_...'
        nodejs  'node_...'
    }
    triggers {
        GenericTrigger(
            genericVariables: [
                [key: 'branch', value: '$.ref']
            ],
            token: 'DATA-CENTER-WEB' ,
            causeString: ' Triggered on $branch' ,
            printContributedVariables: true,
            printPostContent: true
        )
    }
    stages {
        stage('init-server'){
            steps {
                script {                 
                   server = getHost()                                   
                }
            }
        }
        
        stage('get git branch'){
            steps{
                script{
                    try{
                        if("${branch}" != ""){
                            println "webhook式触发 ......"
                            branchName = branch - "refs/heads"
                            branchName = sh(returnStdout: true,script: "echo ${branchName}|awk -F '/' '{print \$NF}'").trim()
                            println "webhook触发的分支是: " + "${branchName}"
                        }
                    } catch(exc) { }

                    if("${params.repoBranch}" != ""){
                        println "手动方式触发 ......"
                        branchName = "${params.repoBranch}"
                        println "手动触发的分支是: " + "${branchName}"
                    }
                }
            }
        }
        stage('git checkout') {
            steps {
                echo 'Checkout Start:[repoUrl:'+env.repoUrl+', branch${branchName}:'+branchName+'] ......'
                checkout([$class: 'GitSCM', branches: [[name: '*/'+branchName]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '213b8f59-9198-4fe9-b5b9-f5758b93da0f', url: env.repoUrl]]])
            }
        }

        stage('npm run build') {
            steps {
                // echo 'mvn clean package ......'
                sh "npm config set registry https://registry.npm.taobao.org/ "
                sh "cd Base \n npm i \n npm run build"
            }
        }
        
        stage('Login VPN'){
            steps {
                sshCommand remote: server, command: "cd /usr/vpn \n ./login.sh"
            }
        }
        
        stage('Image Build'){
            steps {
                sshCommand remote: server, command: "cd /...\n docker build -f /.../Dockerfile -t data-center-web:latest ."
                sshCommand remote: server, command: "docker tag xxx:latest .../xxx:latest"
                sshCommand remote: server, command: "docker push .../xxx:latest"
            }
        }

        stage('Publish To K8S'){
          steps {
                sshCommand remote: server, command: "source /etc/profile \n kubectl delete -f /.../deployment.yaml"
                sshCommand remote: server, command: "source /etc/profile \n kubectl apply -f /.../deployment.yaml"
                sshCommand remote: server, command: "docker image prune -a -f"
            }
        }
        
        stage('Logout VPN'){
            steps {
                sshCommand remote: server, command: "cd /usr/vpn \n ./logout.sh"
            }
        }
    }
}

Dockerfile案例

FROM nginx

MAINTAINER xt

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

WORKDIR /usr/share/nginx/html

ADD ./Base/xxx/ ./xxx/


COPY ./nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

#CMD [nginx-debug, '-g', 'daemon off;']

deployment.yaml案例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xxx-deployment
  namespace: harbor spacename
  labels:
    app: xxx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: xxx
  template:
    metadata:
      labels:
        app: xxx
    spec:
      containers:
        - name: xxx
          image: 10.41.3.63:9999/harbor spacename/xxx:latest
          env:
            - name: TZ
              value: Asia/Shanghai
          imagePullPolicy: Always
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: '1'
              memory: 1Gi
            requests:
              cpu: '0'
              memory: 0Gi
      imagePullSecrets:
        - name: harbor-secret

---
apiVersion: v1
kind: Service
metadata:
  name: xxx-svc
  namespace: harbor spacename
  labels:
    run: xxx
spec:
  ports:
    - name: port
      nodePort: 80
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: xxx
  type: NodePort

自定义nginx.conf替换原有案例

events {
        worker_connections  1024;  ## Default: 1024
    } 
    http {
        
    include       mime.types;
    default_type  application/octet-stream;
    client_max_body_size 500m;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

   map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
   }

    #gzip  on;
    upstream xxx {
        server ip:port;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
		
	add_header Access-Control-Allow-Origin *;
	add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
	add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';


        location / {
            root   /usr/share/nginx/html/;
            index  index.html index.htm;
        }

        location /xxx {
          root  /usr/share/nginx/html; 
          index  index.html index.htm;
          try_files $uri $uri/ /xxx/index.html;
        }	
    
        location = /50x.html {
            root   html;
        }

        location /name {
            proxy_pass  http://xxx/name;
            proxy_set_header    X-Real-IP  $remote_addr;
            proxy_set_header    Host       $host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';        
       }


	 location /xxx {
            proxy_pass  http://ip:port/xxx;
            proxy_set_header    X-Real-IP  $remote_addr;
            proxy_set_header    Host       $host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        }  

        location ~ (/xxx) {
            proxy_pass  http://xxx;
            proxy_set_header    X-Real-IP  $remote_addr;
            proxy_set_header    Host       $host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_connect_timeout    900;
            proxy_read_timeout       900;
            proxy_send_timeout       900;
            proxy_buffer_size 32k;
            proxy_buffers 4 64k;
            proxy_busy_buffers_size 128k;
            proxy_temp_file_write_size 1024m;
            proxy_max_temp_file_size 2048m;
            client_max_body_size 1024m;
            client_body_buffer_size 128k;
            proxy_cache_valid any 4;
            expires 10;
        }
    }
}

具体流程阐述可以查看我上一篇文章,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值