国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD

這篇具有很好參考價(jià)值的文章主要介紹了k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

測(cè)試環(huán)境使用的jenkins
正式環(huán)境使用的gitlab-ci

測(cè)試環(huán)境

  1. 創(chuàng)建yaml文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: dtk-go-tiktok-admin-config
  labels:
    app.kubernetes.io/name: dtk-go-tiktok-admin
    app.kubernetes.io/business: infrastructure
    app.kubernetes.io/runtime: golang
    app.kubernetes.io/tier: backend
    app.kubernetes.io/environment: test
    app.kubernetes.io/managed-by: yong.xd
data:
  config.yaml: |
          max-age: 0
          show-line: true
          log-in-console: true

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: dtk-vue-tiktok-admin-config
  labels:
    app.kubernetes.io/name: dtk-go-tiktok-admin
    app.kubernetes.io/business: infrastructure
    app.kubernetes.io/runtime: golang
    app.kubernetes.io/tier: front
    app.kubernetes.io/environment: test
    app.kubernetes.io/managed-by: yong.xd
data:
  default.conf: |
    server{
      
        listen       80 default_server;
        server_name  _;
        access_log   /dev/stdout;
        error_log    /dev/stdout;
        root         /opt/app/dist/;
        location / {
                try_files $uri $uri/ /index.html;
            }
        location /api {
          proxy_set_header Host $http_host;
          proxy_set_header  X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
          rewrite ^/api/(.*)$ /$1 break;  #重寫(xiě)
          add_header 'dtk-debug' 'api';
    #一個(gè)deployment2個(gè)pod是網(wǎng)絡(luò)資源是共享的,所以可以直接代理
          proxy_pass http://127.0.0.1:8888; # 設(shè)置代理服務(wù)器的協(xié)議和地址
          }

       location /api/swagger/index.html {
         proxy_pass http://127.0.0.1:8888/swagger/index.html;
         }
        location /health {
          access_log off;
          return 200;
        }
    }
    
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dtk-go-tiktok-admin
  labels:
    app.kubernetes.io/name: dtk-go-tiktok-admin
    app.kubernetes.io/business: infrastructure
    app.kubernetes.io/runtime: golang
    app.kubernetes.io/tier: backend
    app.kubernetes.io/environment: test
    app.kubernetes.io/managed-by: yong.xd
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: dtk-go-tiktok-admin
      app.kubernetes.io/business: infrastructure
      app.kubernetes.io/runtime: golang
      app.kubernetes.io/tier: backend
      app.kubernetes.io/environment: test
      app.kubernetes.io/managed-by: yong.xd
  template:
    metadata:
      labels:
        app.kubernetes.io/name: dtk-go-tiktok-admin
        app.kubernetes.io/business: infrastructure
        app.kubernetes.io/runtime: golang
        app.kubernetes.io/tier: backend
        app.kubernetes.io/environment: test
        app.kubernetes.io/managed-by: yong.xd
    spec:
      imagePullSecrets:
        - name: aliyun-regcred
      serviceAccountName: default
      securityContext:
      dnsPolicy: None
      dnsConfig:
        nameservers:
          - 172.31.74.196
        searches:
          - test1.svc.cluster.local
          - svc.cluster.local
          - cluster.local


      containers:
        - name: golang
          securityContext:
            runAsUser: 0
          image: "regisy.buydce.com/dataoke-test/dtk-go-tiktok-admin-golang:latest"
          volumeMounts:
          - name: config
            mountPath: /opt/app/conf/
          ports:
            - name: http
              containerPort: 8888
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /health
              port: 8888
            initialDelaySeconds: 5
            periodSeconds: 20
            timeoutSeconds: 3
          readinessProbe:
            httpGet:
              path: /health
              port: 8888
            initialDelaySeconds: 5
            periodSeconds: 10
            timeoutSeconds: 3
          resources:
            requests:
              cpu: 1m
              memory: 20Mi

        - name: nginx
          securityContext:
          image: "restry.buydce.com/dataoke-test/dtk-go-tiktok-admin-nginx:latest"
          volumeMounts:
          - name: ng-config
            mountPath: /etc/nginx/conf.d/
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /health
              port: 80
            periodSeconds: 5
          readinessProbe:
            httpGet:
              path: /health
              port: 80
            periodSeconds: 5
          resources:
            requests:
              cpu: 1m
              memory: 64Mi
            limits:
              cpu: 200m
              memory: 256Mi
      volumes:
      - name: ng-config
        configMap:
          name: dtk-vue-tiktok-admin-config
      - name: config
        configMap:
          name: dtk-go-tiktok-admin-config
---
apiVersion: v1
kind: Service
metadata:
  name: dtk-go-tiktok-admin
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: nginx
    - port: 8888
      targetPort: 8888
      protocol: TCP
      name: golang
  selector:
    app.kubernetes.io/name: dtk-go-tiktok-admin
    app.kubernetes.io/business: infrastructure
    app.kubernetes.io/runtime: golang
    app.kubernetes.io/tier: backend
    app.kubernetes.io/environment: test
    app.kubernetes.io/managed-by: yong.xd
  1. 啟動(dòng)服務(wù)
kubectl apply -f ./ -n test1
  1. 配置jenkins
#!/usr/bin/env groovy
import groovy.json.JsonOutput

String gitRepositryURL = 'https://test.com/dtk-go-tiktok-admin.git'
String dockerRegistry = 'test.com'
String dockerRegistryURL = 'https://test.com'
String dockerRegistryNameSpace = 'dataoke-test'
#dockerfile路徑
String kubeManifestsRepo = '/home/jenkins/repo/dtk-kubernetes-test/app'
Map dockerFiles = ["nginx":"Dockerfile.test.nginx", "golang":"Dockerfile.test.golang"]
Map dockerImages = [:]
boolean notify = false

String jobBaseName = env.JOB_NAME[4..-1]
String jobK8sName = jobBaseName.replaceAll('_', "-") 

Map commitInfo = [:]
Map buildInfo = [:]

commitInfo.projectName = gitRepositryURL.replaceFirst(/^.*\/([^\/]+?).git$/, '$1') 
commitInfo.gitRepositryURL = gitRepositryURL
buildInfo.buildId = currentBuild.id

@NonCPS
def newSh(String cmd) {
	def script = '#!/bin/sh +x\n' << cmd
	result = sh(returnStdout: true, script: script.toString())
	return result
}

pipeline {
	agent any

	options {
		buildDiscarder logRotator(
			artifactDaysToKeepStr: '', 
			artifactNumToKeepStr: '', 
			daysToKeepStr: '10', 
			numToKeepStr: '10'
			)
	}

	parameters {
        
        choice( 
        	name: 'PENV',
        	choices: [
        		'dev1',
        		'dev2',
        		'test1',
        		'test2', 
        		'test3', 
        		'test4',
        		'test5',
                        'test6',
                        'test7',
        		'huise',
'huise4',
                        'huise3'
        	], 
        	description: '選擇發(fā)布環(huán)境,默認(rèn)發(fā)布至dev1測(cè)試環(huán)境'
        	)

        gitParameter(
        	name: 'GIT_BRANCH', 
            type: 'PT_BRANCH_TAG',
            branchFilter: 'origin/(.*)',
            defaultValue: 'master',
            selectedValue: 'DEFAULT',
            sortMode: 'DESCENDING_SMART',
            quickFilterEnabled: true, 
            description: 'Select your branch or tag.'
        	)
		 booleanParam(name: 'force', defaultValue: false, description: '代碼重復(fù)強(qiáng)制發(fā)版')
    }

	stages {

		stage('預(yù)處理') {
			steps {
				script {
					def now = new Date()
					buildInfo.buildDate = now.format("yy-MM-dd HH:mm", TimeZone.getTimeZone('UTC'))

					def causes = currentBuild.getBuildCauses()
					buildInfo.buildUser = causes[0]['userName']
					userList = readYaml(file:'/etc/jenkins/users.yaml')
					if (!(PENV in userList.env.dev ) && !(buildInfo.buildUser in userList.user.allow)) {
						error(message: "開(kāi)發(fā)只能發(fā)布環(huán)境到${userList.env.dev.join(',')}")			
					}
					buildInfo.gitBranch = GIT_BRANCH
					buildInfo.publishEnv = PENV
					currentBuild.description = "k8s環(huán)境: ${PENV} 構(gòu)建人:${buildInfo.buildUser} 分支: ${GIT_BRANCH}"
					newSh("check.py -u ${buildInfo.buildUser} -e ${PENV}")
				}
			}
		}

		stage('同步代碼倉(cāng)庫(kù)') {
			steps {
				script {
					def scmVars = checkout([
								$class: 'GitSCM', 
								branches: [[name: "${GIT_BRANCH}"]], 
								extensions: [[$class: 'CheckoutOption', timeout: 20], [$class: 'CloneOption', depth: 1]], 
								userRemoteConfigs: [[credentialsId: "5411496d-3606-4-ab9c-2e4453cd2880", url: "${gitRepositryURL}"]]
								])
					commitInfo.gitCommit = scmVars.GIT_COMMIT
					commitInfo.gitBranch = GIT_BRANCH
					commitInfo.xiangmu_name = env.JOB_BASE_NAME
					commitInfo.commitDate = newSh('git log --pretty=format:"%ci" -1')
					commitInfo.cmmitMessage = newSh('git log --pretty=format:"%s" -1')

					String gitDiff = newSh('git diff HEAD^ HEAD')
					def committer = [:]
					committer.name = newSh('git log --pretty=format:"%cn" -1')
					committer.email =  newSh('git log --pretty=format:"%ce" -1')
					commitInfo.committer = committer
					
					String consoleStdout = "\n\n---------SYNCHRONIZE GIT REPOSITORY---------\nGit repo sync successfully.\n\n" + JsonOutput.prettyPrint(JsonOutput.toJson(commitInfo))
					println(consoleStdout)

					consoleStdout = "\n\n---------CHANGE LOGS---------\nGit diff:\n\n" + gitDiff
					println(consoleStdout)
					getDatabaseConnection(type: 'GLOBAL') {
						def sqlString="select commit_seccec from jenkins_commit.jenkins_jilu where xm_name = ? and env = ?"
                        def params=[commitInfo.xiangmu_name,PENV]
                        def rest_null = sql sql:sqlString,parameters:params
						if (rest_null.size() == 0){
						  def sqlString2="insert  into  jenkins_commit.jenkins_jilu(xm_name,env,commit_seccec)   values(?,?,?)"
                          def params2=[commitInfo.xiangmu_name,PENV,commitInfo.gitCommit]
						  sql sql:sqlString2,parameters:params2
						  println("mysql插入數(shù)據(jù)")
						}
						if (rest_null.size() >= 1) {
							   def Map rest = rest_null.get(0)
                        if (rest.get("commit_seccec") == commitInfo.gitCommit && force == "false"){
                        currentBuild.description = "k8s環(huán)境: ${PENV} 構(gòu)建人:${buildInfo.buildUser} 分支: ${GIT_BRANCH} 構(gòu)建失敗: 代碼重復(fù)不發(fā)版"
							   println("代碼沒(méi)有變化不做發(fā)版")
                               error "上一個(gè)版本和現(xiàn)在正在發(fā)的版本一致,不做發(fā)版"
							   }
						}
				
					}
				}
			}
		}

		stage('構(gòu)建') {		
			agent {
          		docker { 
              		image 'reistry.buynce.com/dataoke-test/golang:1.19'
              		args '--user root -v /data/jenkins_build_cache/.cache:/.cache'
              		args '--user root -v /data/lib/go:/go'
              		reuseNode true
          		}	
      		}

        	steps {
            	script {
					env.STAGE = "goujian"
            		def now = new Date()
					String buildDate = now.format("yy-MM-dd HH:mm", TimeZone.getTimeZone('UTC'))

         			sh (script: '#!/bin/sh +x\n' + '''
         			cd ./server
         			mkdir -p .cache
             		export GO111MODULE=on
             		export GOPROXY=https://goproxy.cn,direct
             		export GOPRIVATE="gitlab.buydance.com/*"
             		export CGO_ENABLED=0
             		go mod  tidy
             		go build -o main
         			'''
         			)

           			def files = findFiles(glob: '**/main')
           			String artifactPath = files[0].path
           			String sha1Checksum = sha1(file: artifactPath)
           			String sha256Checksum = sha256(file: artifactPath)
            				


            		consoleStdout = "\n\n---------BUILD RESULTS---------\nBuild info generated successfully.\n\n" + JsonOutput.prettyPrint(JsonOutput.toJson(buildInfo))
            		println(consoleStdout)
        		}	
			}
		}
		
		stage('構(gòu)建vue') {		
			agent {
          		docker { 
              		image 'node:14.19.3-alpine3.15'
                    args '--user root -v /data/jenkins_build_cache/.cache:${HOME}/.cache'
                    args '--user root -v /data/lib/composer:/root/.composer'
                    reuseNode true
          		}	
      		}

        	steps {
            	script {
            		sh """
					cd ./web
                    npm config set puppeteer_download_host=https://npm.taobao.org/mirrors
                    npm i --registry=https://registry.npm.taobao.org
                    npm run build
                    """
					
            		consoleStdout = "\n\n---------BUILD RESULTS---------\nBuild info generated successfully.\n\n" + JsonOutput.prettyPrint(JsonOutput.toJson(buildInfo))
            		println(consoleStdout)
        		}	
			}
		}
		

		stage('Docker') {
			steps {
				script {
					env.STAGE = "DOCKERFIEL"
				//	docker.withRegistry(dockerRegistryURL, '8f1a40fa-3258-4717-825c-a9f87299916d') {
					docker.withRegistry(dockerRegistryURL) {
						
						String dockerFile = kubeManifestsRepo + '/' + jobBaseName + '/' + 'Dockerfile.test.nginx'
						    
						if (!fileExists(dockerFile)) {
							dockerFile = kubeManifestsRepo + '/' + jobK8sName + '/' + 'Dockerfile.test.nginx'
						}

						String dockerRepository = dockerRegistry + '/' + dockerRegistryNameSpace + '/' + jobK8sName + '-' + 'nginx'
						def customImage = docker.build(dockerRepository, "-f ${dockerFile} .")
						customImage.push(commitInfo.gitCommit)
						customImage.push('latest')
						
						dockerImages.nginx = dockerRepository + ':' + commitInfo.gitCommit

						dockerFile = kubeManifestsRepo + '/' + jobBaseName + '/' + 'Dockerfile.test.golang'
						    
						if (!fileExists(dockerFile)) {
							dockerFile = kubeManifestsRepo + '/' + jobK8sName + '/' + 'Dockerfile.test.golang'
						}

						dockerRepository = dockerRegistry + '/' + dockerRegistryNameSpace + '/' + jobK8sName + '-' + 'golang'
						customImage = docker.build(dockerRepository, "-f ${dockerFile} .")
						customImage.push(commitInfo.gitCommit)
						customImage.push('latest')

						dockerImages."golang" = dockerRepository + ':' + commitInfo.gitCommit
					}
				}
			}
		}

		stage('部署') {
			steps {
				script {
					env.STAGE = "bushu"
					dockerImages.each { k, v -> 
						newSh("kubectl -n ${PENV} set image deployment/${jobK8sName} ${k}=${v}")
						newSh("kubectl -n ${PENV} rollout status deployment/${jobK8sName} --timeout=2m")
					}
					String content = "![screenshot](https://comquent.de/wp-content/uploads/CQ-Pipeline-Kurs.png)\n\n### Jenkins Pipeline\n>**構(gòu)建信息**:\n>- 構(gòu)建項(xiàng)目: ${jobBaseName}\n>- 構(gòu)建id: ${currentBuild.number}\n>- 構(gòu)建人: ${buildInfo.buildUser}\n>- 構(gòu)建分支: ${GIT_BRANCH}\n>- 發(fā)布環(huán)境: ${PENV}\n>**版本信息**:\n>- commit_hash: ${commitInfo.gitCommit}\n>- commit_date: ${commitInfo.commitDate}\n>- commit_message: ${commitInfo.cmmitMessage}\n>- committer: ${commitInfo.committer.name}"	
					def workflowMessage = [
						"msgtype": "actionCard",
						"actionCard":[
							"title":"構(gòu)建信息",
							"text":content,
							"btnOrientation": "0",
							"btns": [
								[
									"title": "詳細(xì)信息",
									"actionURL": "https://k8sns.haojqu.com/blue/organizations/jenkins/k8s_dtk_go_app_api/detail/k8s_dtk_go_app_api/${currentBuild.number}/pipeline"
								],
								[
									"title": "日志監(jiān)控",
									"actionURL": "http://k8sana.hou.com/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'18d51920-96c3-11eb-811f-1383c86a1d0',interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))"
								],
							]
						]
					]	

					String workflowMessageJSON = JsonOutput.toJson(workflowMessage)
					timeout(unit: 'SECONDS', time: 30) {
						newSh("curl 'https://oapi.dingtalk.com/robot/send?access_token=9e91f6860736ff69e7f6f986179e154e497b70e26fd749c' -s -H 'Content-Type: application/json' -d '${workflowMessageJSON}'")
					}
				}
			}
		}
		stage("commit入庫(kù)"){
             steps {
                  script{
                        getDatabaseConnection(type: 'GLOBAL') {
				        def sqlString3="update jenkins_commit.jenkins_jilu set commit_seccec=?    where xm_name=? and env=?;"
                        def params3=[commitInfo.gitCommit,commitInfo.xiangmu_name,PENV]
                        sql sql:sqlString3,parameters:params3
				  }
				  }
			 }
		}
	}
	post {
		failure {
			script{
			if (STAGE == "goujian") {
				println("----> goujian失敗")
			}
		    if (STAGE == "bushu") {
			   println("----> bushu失敗")		   
			}
			if (STAGE == "DOCKERFIEL") {
				println("----> DOCKERFIEL失敗")
			}
	
			}
		}
	}
}
  1. 配置nginx
upstream  dtk-vue-tiktok-admin  {
        server dtk-go-tiktok-admin  weight=1 max_fails=0 fail_timeout=0s;
                keepalive 20;
}

server {
listen  80;
listen      443 ssl;
server_name test.com;
access_log  /var/log/nginx/dtest.com.access.log json;
error_log   /var/log/nginx/dtest.com.error.log;
ssl_certificate     conf.d/dtkcert/test.com.pem;
ssl_certificate_key conf.d/dtkcert/test.com.key;
more_set_headers 'Access-Control-Allow-Headers: Cookie,DNT,X-CSRF-Token,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Auth-token';
more_set_headers 'Access-Control-Allow-Origin: *';
more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT';
more_set_headers 'Access-Control-Allow-Credentials: true';
default_type     'text/html';
set $backend 'dtk-vue-tiktok-admin';


include  public/deny.conf;
location / {
    proxy_pass http://$backend;
}

location ~ /\.ht {
    deny  all;
}
}
  1. jenkins機(jī)器上的dockerfile
[root@k8s-jenkins dtk-go-tiktok-admin]# cat Dockerfile.test.golang
FROM test.com/dataoke-test/alpine:3.12-CST as test
WORKDIR /opt/app
COPY  $CI_PROJECT_DIR/server/main /opt/app/main
CMD ["/opt/app/main", "-c", "/opt/app/conf/config.yaml"]

[root@k8s-jenkins dtk-go-tiktok-admin]# cat Dockerfile.test.nginx
FROM test.com/dataoke-test/openresty:base
WORKDIR /opt/app/dist/
COPY --chown=nobody:nobody web/dist /opt/app/dist

線上環(huán)境配置

  1. yaml其它都一樣除了svc,因?yàn)閟vc需要綁定slb地址
apiVersion: v1
kind: Service
metadata:
  name: dtk-go-tiktok-admin
  annotations:
  #開(kāi)啟slb使用
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
   #slb地址
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-2ze1hpcomc
    #    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:9090"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "wrr"
    namespace: default
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
    - port: 16107  #slb端口
      targetPort: 80 #pod服務(wù)端口
      protocol: TCP
  selector:
    app.kubernetes.io/name: dtk-go-tiktok-admin
    app.kubernetes.io/business: infrastructure
    app.kubernetes.io/runtime: golang
    app.kubernetes.io/tier: backend
    app.kubernetes.io/environment: prod
    app.kubernetes.io/managed-by: yong.xd
  1. 啟動(dòng)
cat .gitlab-ci.yml

stages:
  - build
  - package
  - docker
  - deploy
  - notify


build:
  stage: build
  image: test.com/dataoke-prod/golang:1.19-with-repo-cert
  cache:
    key:
      files:
      - go.mod
    paths:
      - .cache/pkg
  artifacts:
    expire_in: 20 mins
    untracked: false
    paths:
      - $CI_PROJECT_DIR/server/main
  script:
  - mkdir -p .cache
  - cd ./server 
  - export GOPATH="$CI_PROJECT_DIR/.cache"
  - go env -w GO111MODULE=on 
  - go env -w GOPROXY=https://goproxy.cn,direct 
  - go env -w GOPRIVATE=gitlab.buydance.com 
  - go env -w CGO_ENABLED=0
  - go build -o main
  only:
    - tags

package:
  stage: package
  image: test.com/dataoke-prod/node:14.19.3-alpine3.15
  script:
  - cd ./web
  - npm config set puppeteer_download_host=https://npm.taobao.org/mirrors
  - npm i --registry=https://registry.npm.taobao.org
  - npm run build
  cache:
    key:
      files:
      - package.json
    paths:
      - node_modules
  artifacts:
    name: "dist"
    untracked: false
    expire_in: 5 mins
    paths:
      - $CI_PROJECT_DIR/web/dist
  only:
    - tags



docker:
  stage: docker
  image: test.com/dataoke-prod/kaniko-executor:debug
  script:
  - mkdir -p /kaniko/.docker
  - echo "${DOCKER_AUTH_CONFIG}" > /kaniko/.docker/config.json
  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.prod.nginx --destination test.aliyuncs.com/dataoke-prod/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`-nginx:${CI_COMMIT_SHORT_SHA} --destination test.aliyuncs.com/dataoke-prod/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`-nginx:latest
  - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.prod.golang --destination test.aliyuncs.com/dataoke-prod/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`-golang:${CI_COMMIT_SHORT_SHA} --destination test.aliyuncs.com/dataoke-prod/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`-golang:latest
  only:
    - tags

deploy:
  stage: deploy
  image: test.com/dataoke-prod/kubectl:1.18.1
  variables:
    GIT_STRATEGY: none
    K8S_NAME_SPACE: default
  script:
  - mkdir -p $HOME/.kube
  - echo "$KUBERNETES_SECRET" >> "$HOME/.kube/config"
  - kubectl version
  - kubectl get deployments.apps -n ${K8S_NAME_SPACE}
  - kubectl -n ${K8S_NAME_SPACE} set image deployment/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'` nginx=test.aliyuncs.com/dataoke-prod/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`-nginx:${CI_COMMIT_SHORT_SHA} golang=test.aliyuncs.com/dataoke-prod/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`-golang:${CI_COMMIT_SHORT_SHA} --record
  - kubectl rollout status deployment/`echo ${CI_PROJECT_NAME} |sed 's@_@-@g'`
  only:
    - tags


notifyFailWeChat:
  stage: notify
  image: test.aliyuncs.com/dataoke-prod/curl-image:v1
  script:
    - curl 'https://oapi.dingtalk.com/robot/send?access_token=6147ec1eb7d8b9bd5cd1b15f1c' -H 'Content-Type:application/json' -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$CI_PROJECT_NAME項(xiàng)目構(gòu)建失敗\n>本次構(gòu)建由:$GITLAB_USER_NAME 觸發(fā)\n>項(xiàng)目名稱(chēng):$CI_PROJECT_NAME\n>提交號(hào):$CI_COMMIT_SHA\n>提交日志:$CI_COMMIT_MESSAGE\n>構(gòu)建分支:$CI_COMMIT_BRANCH\n>流水線地址:[$CI_PIPELINE_URL]($CI_PIPELINE_URL)\"}}"

  only:
    - tags
  when: on_failure

# 構(gòu)建成功時(shí)的通知消息
notifySuccessWeChat:
  stage: notify
  image: test.aliyuncs.com/dataoke-prod/curl-image:v1
  script:
    - curl 'https://oapi.dingtalk.com/robot/send?access_token=d6147ec1eb7d8b9bd5cd1b15f1c' -H 'Content-Type:application/json' -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$CI_PROJECT_NAME項(xiàng)目構(gòu)建成功\n>本次構(gòu)建由:$GITLAB_USER_NAME 觸發(fā)\n>項(xiàng)目名稱(chēng):$CI_PROJECT_NAME\n>提交號(hào):$CI_COMMIT_SHA\n>提交日志:$CI_COMMIT_MESSAGE\n>構(gòu)建分支:$CI_COMMIT_BRANCH\n>流水線地址:[$CI_PIPELINE_URL]($CI_PIPELINE_URL)\"}}"
  only:
    - tags
  when: on_success
  1. 配置dockerfile
cat  Dockerfile.prod.golang

FROM test.aliyuncs.com/dataoke-prod/alpine:3.12-CST as prod
WORKDIR /opt/app
COPY  $CI_PROJECT_DIR/server/main /opt/app/main
CMD ["/opt/app/main", "-c", "/opt/app/conf/config.yaml"]

cat Dockerfile.prod.nginx

FROM test.aliyuncs.com/dataoke-prod/openresty:base
WORKDIR /opt/app/dist/
COPY --chown=nobody:nobody web/dist /opt/app/dist
  1. 配置nginx
upstream  dtk-go-tiktok-admin {
#svc內(nèi)網(wǎng)ip
server 192.168.10.123:16107  weight=1 max_fails=0 fail_timeout=0s;
keepalive 20;
}

server {
listen  80;
listen      443 ssl;
server_name test.com;
access_log  /var/log/nginx/dtest.com.access.log json;
error_log   /var/log/nginx/dtest.com.error.log;
ssl_certificate     conf.d/dtkcert/test.com.pem;
ssl_certificate_key conf.d/dtkcert/test.com.key;

more_set_headers 'Access-Control-Allow-Headers: Cookie,DNT,X-CSRF-Token,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Auth-token';
more_set_headers 'Access-Control-Allow-Origin: *';
more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT';
more_set_headers 'Access-Control-Allow-Credentials: true';
default_type     'text/html';
set $backend 'dtk-vue-tiktok-admin';

include  public/deny.conf;
location / {
proxy_pass http://$backend;
}

location ~ /\.ht {
deny  all;
}
}
  1. 結(jié)果圖
    k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD,k8s,CICD,gitlab,kubernetes,gin,vue.js
    k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD,k8s,CICD,gitlab,kubernetes,gin,vue.js

k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD,k8s,CICD,gitlab,kubernetes,gin,vue.js
k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD,k8s,CICD,gitlab,kubernetes,gin,vue.js
k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD,k8s,CICD,gitlab,kubernetes,gin,vue.js
k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD,k8s,CICD,gitlab,kubernetes,gin,vue.js

原文文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-714559.html

到了這里,關(guān)于k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【四】將vue部署到k8s中

    【四】將vue部署到k8s中

    準(zhǔn)備dockerfile和jenkinsfile還有yml文件 我準(zhǔn)備的dockerfile 我準(zhǔn)備的Jenkinsfile 里面配置和后端寫(xiě)的區(qū)分開(kāi)就行了 我準(zhǔn)備的 front.yml kuboard配置 1、創(chuàng)建上面yml文件中的命名空間 2、在front命名空間內(nèi)創(chuàng)建密文 步驟都和前面三步中的步驟差不多,如果有什么報(bào)錯(cuò)對(duì)著日志改一改就可以了

    2024年03月19日
    瀏覽(15)
  • 阿里云K8S部署Go+Vue項(xiàng)目

    阿里云K8S部署Go+Vue項(xiàng)目

    ????????Kubernetes是一個(gè)可以移植、可擴(kuò)展的開(kāi)源平臺(tái),使用聲明式的配置并依據(jù)配置信息自動(dòng)地執(zhí)行容器化應(yīng)用程序的管理。在所有的容器編排工具中(類(lèi)似的還有 docker swarm / mesos等),Kubernetes的生態(tài)系統(tǒng)更大、增長(zhǎng)更快,有更多的支持、服務(wù)和工具可供用戶(hù)選擇。 優(yōu)勢(shì)

    2024年01月16日
    瀏覽(31)
  • 構(gòu)建 dotnet&vue 應(yīng)用鏡像->推送到 Nexus 倉(cāng)庫(kù)->部署為 k8s 服務(wù)實(shí)踐

    構(gòu)建 dotnet&vue 應(yīng)用鏡像->推送到 Nexus 倉(cāng)庫(kù)->部署為 k8s 服務(wù)實(shí)踐

    前面分享了 k8s 的部署安裝,本篇來(lái)點(diǎn)實(shí)操,將會(huì)把一個(gè) .net core + vue 的項(xiàng)目(zhontai),打包構(gòu)建成 docker 鏡像,推送到 nexus 鏡像倉(cāng)庫(kù),并部署到 k8s 中 要實(shí)現(xiàn)項(xiàng)目的部署,除了準(zhǔn)備要部署的環(huán)境(k8s),還需要準(zhǔn)備項(xiàng)目所用到的各中間件,本文旨在分享部署的一個(gè)整體流程

    2024年02月03日
    瀏覽(24)
  • K8S單機(jī)部署-01.單機(jī)部署K8S

    轉(zhuǎn)載請(qǐng)注明出處 K8S單機(jī)部署-00.舊版本卸載 K8S單機(jī)部署-01.單機(jī)部署K8S K8S單機(jī)部署-02.Kuboard面板部署 K8S單機(jī)部署-03.驗(yàn)證K8S的第一個(gè)Deployment K8S單機(jī)部署-04.NFS服務(wù)器搭建 K8S單機(jī)部署-05.靜態(tài)持久化之PV、PVC(基于NFS) K8S單機(jī)部署-06.動(dòng)態(tài)持久化StorageClass(基于NFS) K8S單機(jī)部署-07.調(diào)整

    2024年04月24日
    瀏覽(49)
  • k8s非root用戶(hù)報(bào)錯(cuò):error loading config file “/etc/kubernetes/admin.conf“: open /etc/kubernetes/admin.conf

    chatgpt回答的…… 這個(gè)錯(cuò)誤是由于當(dāng)前非root用戶(hù)沒(méi)有足夠的權(quán)限來(lái)讀取 \\\"/etc/kubernetes/admin.conf\\\" 配置文件導(dǎo)致的。在 Kubernetes 中,\\\"/etc/kubernetes/admin.conf\\\" 是用于管理員訪問(wèn) Kubernetes 集群的配置文件,因此通常需要 root 用戶(hù)或有足夠權(quán)限的用戶(hù)才能訪問(wèn)。 解決這個(gè)問(wèn)題的方法有以

    2024年02月13日
    瀏覽(21)
  • K8s進(jìn)階之路-安裝部署K8s

    K8s進(jìn)階之路-安裝部署K8s

    參考:(部署過(guò)程參考的下面紅色字體文檔鏈接就可以,步驟很詳細(xì),重點(diǎn)部分在下面做了標(biāo)注) ?安裝部署K8S集群文檔: 使用kubeadm方式搭建K8S集群 · GitBook 本機(jī):?master:10.0.0.13?master ? ? ? ? ? ?node1: 10.0.0.11?node1 ? ? ? ? ? ?node2: 10.0.0.12?node2 #systemctl stop firewalldsy

    2024年02月22日
    瀏覽(32)
  • k8s入門(mén):裸機(jī)部署 k8s 集群

    k8s入門(mén):裸機(jī)部署 k8s 集群

    系列文章 第一章:? k8s入門(mén):裸機(jī)部署 k8s 集群 第二章:? k8s入門(mén):部署應(yīng)用到 k8s 集群 第三章:? k8s入門(mén):service 簡(jiǎn)單使用 第四章:? k8s入門(mén):StatefulSet 簡(jiǎn)單使用 第五章:? k8s入門(mén):存儲(chǔ)(storage) 第六章:? K8S 配置 storageclass 使用 nfs 動(dòng)態(tài)申領(lǐng)本地磁盤(pán)空間 第七章:

    2023年04月20日
    瀏覽(25)
  • K8S平臺(tái)安全框架

    K8S平臺(tái)安全框架

    1.1.1 認(rèn)證框架 學(xué)習(xí)目標(biāo) 這一節(jié),我們從 基礎(chǔ)知識(shí)、認(rèn)證流程、小結(jié) 三個(gè)方面來(lái)學(xué)習(xí)。 基礎(chǔ)知識(shí) 安全機(jī)制 資源操作 表現(xiàn)樣式 認(rèn)證流程 簡(jiǎn)介 解析 小結(jié) 1.1.2 框架解讀 學(xué)習(xí)目標(biāo) 這一節(jié),我們從 流程解讀、對(duì)象梳理、小結(jié) 三個(gè)方面來(lái)學(xué)習(xí)。 流程解讀 認(rèn)證 常見(jiàn)令牌 授權(quán) 準(zhǔn)入

    2024年02月12日
    瀏覽(23)
  • k8s 入門(mén)到實(shí)戰(zhàn)--部署應(yīng)用到 k8s

    k8s 入門(mén)到實(shí)戰(zhàn)--部署應(yīng)用到 k8s

    k8s 入門(mén)到實(shí)戰(zhàn) 01.png 本文提供視頻版: 最近這這段時(shí)間更新了一些 k8s 相關(guān)的博客和視頻,也收到了一些反饋;大概分為這幾類(lèi): 公司已經(jīng)經(jīng)歷過(guò)服務(wù)化改造了,但還未接觸過(guò)云原生。 公司部分應(yīng)用進(jìn)行了云原生改造,但大部分工作是由基礎(chǔ)架構(gòu)和運(yùn)維部門(mén)推動(dòng)的,自己只

    2024年02月09日
    瀏覽(20)
  • K8S:K8S部署常見(jiàn)錯(cuò)誤及解決方法

    K8S:K8S部署常見(jiàn)錯(cuò)誤及解決方法

    目錄 1、node節(jié)點(diǎn)kubelet服務(wù)起不來(lái) 2、安裝cni網(wǎng)絡(luò)插件時(shí) kubectl get node master和node一直noready①有延時(shí),需要等待10分鐘左右,超過(guò)15分鐘則有問(wèn)題 3、部署報(bào)錯(cuò)kubectl get nodes No resources found 4、k8s部署報(bào)錯(cuò)error:kubectl get csr No resources found 問(wèn)題:node節(jié)點(diǎn)kublet起不來(lái)服務(wù)器內(nèi)存資源不足

    2024年02月09日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包