[Cloud native | Kubernetes] Explication détaillée des WebHooks basés sur GitLab


1. WebHooks basés sur GitLab

Une opération à automatiser ici CI, c'est-à-dire qu'une fois le Pushcode du développeur placé dans l' Gitentrepôt, Jenkinsle projet sera automatiquement construit et le dernier code de point de soumission sera construit, empaqueté et déployé. Ici, les CDopérations ci-dessus sont distinguées. CDl'opération doit être déployée sur la base d'une certaine version. , et ici chaque fois que le dernier point de validation est intégré dans le tronc et testé.

1.1 Notification WebHooks

JenkinsCompilations automatiques activées :

construire un déclencheur
[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-eljuwASF-1661690703508)(Pictures/1642500817131.png)]

Configurez les webhooks de Gitlab :

Configurer les webhooks de Gitlab
[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-8azha0AF-1661690703510)(Pictures/1642500933316.png)]

L'authentification Jenkins Gitlabdoit être désactivée :

Désactiver l'authentification Gitlab pour Jenkins
[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-NLEfA09l-1661690703511)(Pictures/1642501016474.png)]

Testez à nouveau Gitlab :

Testez à nouveau
[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-ZOYeaBTE-1661690703512)(Pictures/1642501065243.png)]

1.2 Modifier la configuration

Modifiez l' Jenkinsfileimplémentation pour obtenir une intégration continue basée sur le dernier point de validation et supprimez toutes les références précédentes à ${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}" ]
            )
        }
    }
}

Modifier pipeline.yml, changer la version miroir :

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 Mises à jour continues

Parce que pipelinelorsqu'il n'y a pas de changement, il ne sera pas rechargé à chaque fois, ce qui empêchera Podla mise à jour dynamique du conteneur dans le support.La kubectlcommande rollout restartà utiliser ici est défilée et mise à jour.

Mise en place de Jenkinsfle
[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-6jx4IX1z-1661690703513) (Images/1642501521065.png)]
[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-PNKfVYuI-1661690703514) (Pictures/1642501549176.png)]

Je suppose que tu aimes

Origine blog.csdn.net/zhangxia_/article/details/126574154
conseillé
Classement