[Cloud-nativ | Kubernetes] Ausführliche Erklärung von WebHooks auf Basis von GitLab


1. WebHooks basierend auf GitLab

Ein hier zu automatisierender Vorgang CI, das heißt, nachdem der Entwicklercode Pushin das GitWarehouse gestellt wurde, wird Jenkinsdas Projekt automatisch erstellt, und der neueste Übermittlungspunktcode wird erstellt und gepackt und bereitgestellt.Hier werden die obigen CDVorgänge unterschieden CDBetrieb muss auf Basis einer bestimmten Version bereitgestellt werden, und hier wird jedes Mal der neuste Commit-Punkt in den Trunk integriert und getestet.

1.1 WebHooks-Benachrichtigung

JenkinsAutomatische Builds aktiviert :

Auslöser bauen
[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leech-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-eljuwASF-1661690703508)(Pictures/1642500817131.png)]

Richten Sie die Webhooks von Gitlab ein:

Einrichten der Webhooks von Gitlab
[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leech-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-8azha0AF-1661690703510)(Pictures/1642500933316.png)]

Die Jenkins- GitlabAuthentifizierung muss deaktiviert werden:

Deaktivieren Sie die Gitlab-Authentifizierung für Jenkins
[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leech-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-NLEfA09l-1661690703511)(Pictures/1642501016474.png)]

Gitlab erneut testen:

nochmal testen
[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leech-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-ZOYeaBTE-1661690703512)(Pictures/1642501065243.png)]

1.2 Ändern Sie die Konfiguration

Ändern Sie die JenkinsfileImplementierung, um eine kontinuierliche Integration basierend auf dem letzten Commit-Punkt zu erreichen, und entfernen Sie alle vorherigen Verweise auf ${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}" ]
            )
        }
    }
}

Modify pipeline.yml, ändern Sie die Mirror-Version:

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 Laufende Updates

Denn pipelinebei keiner Änderung wird nicht jedes Mal neu geladen, was dazu führt, dass Podder Container im Medium nicht dynamisch aktualisiert wird.Der hier zu kubectlverwendende rollout restartBefehl ist gescrollt und aktualisiert.

Jenkinsfle einrichten
[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leech-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-6jx4IX1z-1661690703513) (Pictures/1642501521065.png)]
[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leech-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-PNKfVYuI-1661690703514) (Pictures/1642501549176.png)]

Ich denke du magst

Origin blog.csdn.net/zhangxia_/article/details/126574154
Empfohlen
Rangfolge