安装:

GitLab+Jenkins+sonarqube+harbor+k8s安装-CSDN博客

springboot:

前置条件:

GitLab+Jenkins+Sonarqube使用-CSDN博客

触发器看上面的链接:

shell获取pom.xml版本号命令:

V=`xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml`

流水线脚本:

该脚本直接删除了pod.yaml中的服务和容器然后重新拉起,存在很大缺陷,涉及版本发布之类可以自行编辑脚本

pipeline {
    agent none

    tools {
        // 设定maven环境
        maven "maven"
        jdk "jdk17"
    }

    stages {
        // 定义一个git块,拉取代码并进行代码测试
        stage('Git') {
            agent any
            steps {
                // 片段生成器生成的拉取代码
                git branch: 'main', credentialsId: 'gitlab', poll: false, url: 'http://172.16.4.141:12000/root/test.git'
            }
        }
        // 构建并代码检查
        stage("build & SonarQube") {
            agent any
            steps {
              withSonarQubeEnv('SonarQube') {
                sh "mvn clean package sonar:sonar -Dsonar.projectKey=root_test_789a3938-6ad8-46c6-9008-04829a1223b7 -Dsonar.projectName='test'"
              }
            }
        }
        // 等待检查结果,如果不通过则停止
        stage("wait sonarqube result") {
            steps {
                timeout(time: 1) {
                waitForQualityGate abortPipeline: true
              }
            }
        }
        stage("pass"){
            agent any
            steps {
                sh '''
                    SERVER_NAME=test
                    JAR_NAME=test-0.0.1-SNAPSHOT
                    JENKINS_HOME=/var/lib/jenkins/workspace/test
                    cd $JENKINS_HOME/target
                    cp $JENKINS_HOME/Dockerfile $JENKINS_HOME/target
                    docker rmi 172.16.4.141:13000/k8s/$SERVER_NAME > /dev/null || true
                    docker build -t $SERVER_NAME .
                    docker tag $SERVER_NAME:latest 172.16.4.141:13000/k8s/$SERVER_NAME:latest
                    docker push 172.16.4.141:13000/k8s/$SERVER_NAME:latest
                    kubectl delete -f ../pod.yaml
                    kubectl apply -f ../pod.yaml'''
            }
        }
    }
}

dockerfile:

FROM openjdk:17-jdk-slim

ENV PARAMS=""

ADD *.jar /test.jar

ENTRYPOINT ["sh","-c","java -jar /test.jar $PARAMS"]

pod.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: opt-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: opt-test
  template:
    metadata:
      labels:
        app: opt-test
    spec:
      imagePullSecrets:
        - name: harbor
      containers:
        - name: opt-test
          image: harbor.cncf.net/k8s/test:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 9999

---
apiVersion: v1
kind: Service
metadata:
  name: opt-service
spec:
  selector:
    app: opt-test
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9999

VUE项目:

需要安装node插件,然后进入tools里面设置安装位置

流水线脚本

pipeline {
    agent none
    tools{
        nodejs 'node16'
    }
    stages {
        // 定义一个git块,拉取代码并进行代码测试
        stage('Git') {
            agent any
            steps {
                // 片段生成器生成的拉取代码
                git branch: 'main', credentialsId: 'gitlab', poll: false, url: 'http://172.16.4.141:12000/root/web.git'
            }
        }
        // 构建并代码检查
        stage("build & SonarQube") {
            agent any
            steps {
                script{
                    scannerHome = tool 'SonarScanner'
                }
                withSonarQubeEnv('SonarQube') {
                    sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=root_web_d2e6b02f-147f-46f4-9a4f-04d2c4063882"
                }
            }
        }
        // 等待检查结果,如果不通过则停止
        stage("wait sonarqube result") {
            steps {
                timeout(time: 1) {
                waitForQualityGate abortPipeline: true
              }
            }
        }
        stage("pass"){
            agent any
            steps {
                sh '''
                    SERVER_NAME=web
                    JENKINS_HOME=/var/lib/jenkins/workspace/web
                    cd $JENKINS_HOME
                    npm install
                    npm run build
                    docker rmi 172.16.4.141:13000/k8s/$SERVER_NAME > /dev/null || true
                    docker build -t $SERVER_NAME . 
                    docker tag $SERVER_NAME:latest 172.16.4.141:13000/k8s/$SERVER_NAME:latest
                    docker push 172.16.4.141:13000/k8s/$SERVER_NAME:latest
                    kubectl delete -f ./pod.yaml
                    kubectl apply -f ./pod.yaml'''
            }
        }
    }
}

dockerfile:

# 使用官方的Nginx镜像
FROM nginx:1.25.4

# 将工作目录设置为/app
WORKDIR /app

# 复制文件到工作目录 如打包后有其他文件需增加
COPY dist/css/* /app/css/
COPY dist/js/* /app/js/
COPY dist/favicon.ico /app/
COPY dist/index.html /app/


# 删除nginx容器中代码目录中自带的文件
RUN rm /usr/share/nginx/html/*

# 将/app 中所有文件复制到 /usr/share/nginx/html/
RUN cp -r /app/*  /usr/share/nginx/html/

# 暴露 80 端口供外部访问
EXPOSE 80

# 容器启动时运行 Nginx
CMD ["nginx", "-g", "daemon off;"]

pod.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-test
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: web-test
  template:
    metadata:
      labels:
        app: web-test
    spec:
      imagePullSecrets:
        - name: harbor
      containers:
        - name: web-test
          image: harbor.cncf.net/k8s/web
          imagePullPolicy: Always
          ports:
            - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web-test
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

如果要设置域名访问:

新建一个ingressClass:

新建ingress:

修改解析,将域名指向k8s集群中任一地址

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐