[Cloud native | Kubernetes] Explicación detallada de WebHooks basada en GitLab


1. WebHooks basados ​​en GitLab

Una operación que se automatizará aquí CI, es decir, después de que el Pushcódigo del desarrollador se coloque en el Gitalmacén, Jenkinsel proyecto se compilará automáticamente y el último código de punto de envío se compilará, empaquetará e implementará. Aquí, se distinguen las CDoperaciones anteriores. CDLa operación debe implementarse en función de una determinada versión. , y aquí cada vez que se integra el último punto de compromiso en el tronco y se prueba.

1.1 Notificación de WebHooks

JenkinsConstrucciones automáticas habilitadas :

desencadenador de compilación
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y subirla directamente (img-eljuwASF-1661690703508)(Pictures/1642500817131.png)]

Configure los webhooks de Gitlab:

Configuración de los webhooks de Gitlab
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-8azha0AF-1661690703510)(Pictures/1642500933316.png)]

La autenticación de Jenkins Gitlabdebe desactivarse:

Desactive la autenticación de Gitlab para Jenkins
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-NLEfA09l-1661690703511)(Pictures/1642501016474.png)]

Prueba Gitlab de nuevo:

prueba nuevamente
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y subirla directamente (img-ZOYeaBTE-1661690703512)(Pictures/1642501065243.png)]

1.2 Modificar la configuración

Modifique la Jenkinsfileimplementación para lograr una integración continua basada en el último punto de confirmación y elimine todas las referencias anteriores a ${tag}:

// 所有的脚本命令都放在pipeline中
pipeline{
    
    
	// 指定任务再哪个集群节点中执行
	agent any

	// 声明全局变量,方便后面使用
	environment {
    
    
		harborUser = 'admin'
        harborPasswd = 'Harbor12345'
        harborAddress = '192.168.11.102:80'
        harborRepo = 'repo'
	}

    stages {
    
    
        stage('拉取git仓库代码') {
    
    
            steps {
    
    
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.11.101:8929/root/mytest.git']]])
            }
        }
        stage('通过maven构建项目') {
    
    
            steps {
    
    
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }
        stage('通过SonarQube做代码质量检测') {
    
    
            steps {
    
    
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=40306ae8ea69a4792df2ceb4d9d25fe8a6ab1701'
            }
        }
        stage('通过Docker制作自定义镜像') {
    
    
            steps {
    
    
                sh '''mv ./target/*.jar ./docker/
                docker build -t ${JOB_NAME}:latest ./docker/'''
            }
        }
        stage('将自定义镜像推送到Harbor') {
            steps {
                sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
                docker tag ${JOB_NAME}:latest  ${harborAddress}/${harborRepo}/${JOB_NAME}:latest
                docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:latest '''
            }
        }
        stage('将yml文件传到k8s-master上') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
        stage('远程执行k8s-master的kubectl命令') {
            steps {
               sh '''ssh [email protected] kubectl apply -f /usr/local/k8s/pipeline.yml
                ssh [email protected] kubectl rollout restart deployment pipeline -n test'''
            }
        }

    }
    post {
        success {
            dingtalk(
                robot: 'Jenkins-DingDing',
                type: 'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 成功构建:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ]
            )
        }
        failure {
            dingtalk(
                robot: 'Jenkins-DingDing',
                type: 'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 构建失败:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ]
            )
        }
    }
}

Modificar pipeline.yml, cambiar la versión del espejo:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pipeline
  template:
    metadata:
      labels:
        app: pipeline    
    spec:
      containers:
      - name: pipeline
        image: 192.168.11.102:80/repo/pipeline:latest   # 这里
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
# 省略其他内容…………

1.3 Actualizaciones continuas

Porque pipelinecuando no hay cambios, no se recargará cada vez, lo que hará que el contenedor en el Podmedio no se actualice dinámicamente.El comando que se usará aquí se desplaza y se actualiza.kubectlrollout restart

Configuración de Jenkinsfle
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-6jx4IX1z-1661690703513) (Imágenes/1642501521065.png)]
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-PNKfVYuI-1661690703514) (Imágenes/1642501549176.png)]

Supongo que te gusta

Origin blog.csdn.net/zhangxia_/article/details/126574154
Recomendado
Clasificación