提前jenkins安装插件kubernetes pipeline

部署gitlab

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: deploy
spec:
  selector:
    matchLabels:
      app: gitlab
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      nodeName: k8s-node01
      restartPolicy: Always
      containers:
      - image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.2.0-ce.0 
        name: gitlab
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 443
          name: gitlab443
        - containerPort: 80
          name: gitlab80
        - containerPort: 22
          name: gitlab22
        volumeMounts:
        - name: gitlab-persistent-config
          mountPath: /etc/gitlab
        - name: gitlab-persistent-logs
          mountPath: /var/log/gitlab
        - name: gitlab-persistent-data
          mountPath: /var/opt/gitlab
      imagePullSecrets:
      - name: devops-repo
      volumes:
      - name: gitlab-persistent-config
        nfs:
          server: 172.30.11.133 
          path: /nfsdata/gitlab/config
      - name: gitlab-persistent-logs
        nfs:
          server: 172.30.11.133
          path: /nfsdata/gitlab/logs
      - name: gitlab-persistent-data
        nfs:
          server: 172.30.11.133
          path: /nfsdata/gitlab/data
---
apiVersion: v1
kind: Service
metadata:
  name: gitlab
  namespace: deploy
spec:
  selector:
    app: gitlab
  type: NodePort
  ports:
  - name: https
    port: 443
    targetPort: 443
    protocol: TCP
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP

配置jenkins的pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-data
  namespace: deploy
spec:
  storageClassName: "managed-nfs-storage"
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 10Gi

部署jenkins


root@k8s-master01:~# kubectl get ns test -o yaml | kubectl apply -f -
Warning: resource namespaces/test is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be u
root@k8s-master01:~/kubernetes/jenkins_deploy# ls
gitlab.yaml  jenkins-pvc.yaml  jenkins.yaml
root@k8s-master01:~/kubernetes/jenkins_deploy# cat gitlab.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: deploy
spec:
  selector:
    matchLabels:
      app: gitlab
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      nodeName: k8s-node01
      restartPolicy: Always
      containers:
      - image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.2.0-ce.0 
        name: gitlab
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 443
          name: gitlab443
        - containerPort: 80
          name: gitlab80
        - containerPort: 22
          name: gitlab22
root@k8s-master01:~/kubernetes/jenkins_deploy# ls
gitlab.yaml  jenkins-pvc.yaml  jenkins.yaml
root@k8s-master01:~/kubernetes/jenkins_deploy# cat jenkins
cat: jenkins: No such file or directory
root@k8s-master01:~/kubernetes/jenkins_deploy# cat jenkins.yaml 
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: deploy
  labels:
    app: jenkins
spec:
  type: NodePort
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    nodePort: 32001
  - name: jnlp
    port: 50000
    targetPort: 50000
    nodePort: 32002
  selector:
    app: jenkins
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: deploy
  labels:
    app: jenkins
spec:
  selector:
    matchLabels:
      app: jenkins
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins
      containers:
      - name: jenkins
        image: docker.io/jenkins/jenkins:2.488 
        securityContext:                     
          runAsUser: 0
          privileged: true
        ports:
        - name: http
          containerPort: 8080
        - name: jnlp
          containerPort: 50000
        resources:
          limits:
            memory: 2Gi
            cpu: "2000m"
          requests:
            memory: 2Gi
            cpu: "2000m"
        env:
        - name: LIMITS_MEMORY
          valueFrom:
            resourceFieldRef:
              resource: limits.memory
              divisor: 1Mi
        - name: "JAVA_OPTS"
          value: " 
                   -Xmx$(LIMITS_MEMORY)m 
                   -XshowSettings:vm 
                   -Dhudson.slaves.NodeProvisioner.initialDelay=0
                   -Dhudson.slaves.NodeProvisioner.MARGIN=50
                   -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
                   -Duser.timezone=Asia/Shanghai
                 "    
        - name: "JENKINS_OPTS"
          value: "--prefix=/jenkins"
        volumeMounts:
        - name: data
          mountPath: /var/jenkins_home
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: jenkins-data

Jenkins配置k8s集群,

因为jenkins是在k8s集群内部的,新建clouds只需要配置一个名称即可

配置PodTemplate

我这里容器配置就是用的默认,然后添加一个卷进去,因为要使用kubectl命令

创建Pipeline job测试

我这个比较简单,gitlab代码中只有一个yaml文件和index.html,这个就根据自己的业务发布需求重写pipeline就可以

pipeline {
	agent {label "jnlp-slave"}
	
	environment {
		harbor_addr = "172.30.11.133:8000"
	}
	parameters {
		choice(
			name: 'Namespace',
			choices: ["test", "dev", "cmdb"],
			description: "选择部署环境"
		)
	}
	
	stages {
	    stage('1. Clone') {
			steps {
				git credentialsId: 'gitlab', url: "http://gitlab/pro/cmdb.git", branch: "main"
				script {
					build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
					env.BRANCH_NAME = sh(returnStdout: true, script: 'git branch').trim()
				}
			}

		}
		stage('2. build') {
		    steps {
		        sh "kubectl get ns ${params.Namespace} -o yaml | kubectl apply -f -"
		        sh "kubectl create cm index --from-file=./index.html -n ${params.Namespace} --dry-run -o yaml | kubectl apply -f -"
		        sh "kubectl apply -f nginx-deploy.yaml -n ${params.Namespace}"
		        sh "ls"
		    }
		}
		stage('3. test') {
		    steps {
		        sh "curl -s http://nginx-cmdb.${params.Namespace}"
		    }
		}
		
	}
}

Logo

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

更多推荐