Déployer en privé gitlab, la soumission du code des webhooks et la fusion déclenchent automatiquement le pipeline de développement de Kubesphere

1. Création du pipeline de développement de Kubesphere

Vous devez utiliser "Utiliser Jenkinsfile pour créer un pipeline", voir la documentation officielle : Utiliser Jenkinsfile pour créer un pipeline

En d'autres termes, le fichier Jenkinsfile doit être dans l'entrepôt git. Nous plaçons généralement le fichier Jenkinsfile dans le même entrepôt git que le code source. Nous avons l'habitude de le placer dans le répertoire de premier niveau de l'entrepôt git.

1. Créez un pipeline, cliquez sur "Code Warehouse" --- "git", nous avons construit un entrepôt privé gitlab sur l'intranet, alors sélectionnez "git" ici, remplissez l'adresse git et les informations d'identification, cliquez sur la coche, "Suivant ".

 

2. Définissez le chemin du fichier Jenkins et affichez l'adresse WebHook, comme indiqué ci-dessous.

 N'oubliez pas l'adresse WebHook ici.

Le "filtrage régulier" peut filtrer les branches. Par exemple, si nous créons uniquement la branche de développement, remplissez "develop" dans le formulaire régulier ; notez que s'il y a plusieurs branches, il est préférable de créer 2 pipelines, sinon plusieurs branches seront déclenché en même temps. (S'il existe une meilleure méthode, j'en ajouterai d'autres)

 Ceci conclut la configuration du pipeline de Kubesphere. Contenu du code du script Jenkinsfile :

pipeline {
  agent {
    node {
      label 'base'
    }

  }
  stages {
    stage('拉取代码') {
      agent none
      steps {
        container('base') { 
         // echo "--printenv --" 
         // sh 'printenv'


          checkout(scm)

          script {
             
            gitbranch=env.GIT_BRANCH

            if(env.GIT_BRANCH=="develop"){
               env_name="test"
               env_name_big="Test"
              }
            else if(env.GIT_BRANCH=="master"){ 
               env_name="prod"
               env_name_big="Production" 
            }
            
            
          }
        //  echo "env_name=${env_name}"
        //  echo "env_name_big=${env_name_big}"
        //  echo "gitbranch=${gitbranch}"
        //  echo "GIT_COMMIT=${GIT_COMMIT}" 
         
          sh '''pwd
                ls'''
        }

      }
    }

    stage('构建镜像') {
      agent none
      steps {
        container('base') {

         // echo "env_name=${env_name}"
         // echo "env_name_big=${env_name_big}"
         //  echo "gitbranch=${gitbranch}"
         //  echo "GIT_COMMIT=${GIT_COMMIT}" 

           script { 
             docker_image_url="${REGISTRY}/${DOCKERHUB_NAMESPACE}/${APP_NAME}:${env_name}${timestr}_${BUILD_NUMBER}"
           }
           // echo "docker_image_url=${docker_image_url}"
           //sh "echo ${docker_image_url}"
          
          sh 'mv ${web_dictionary_name}/Dockerfile .'
          sh  " docker build --build-arg ASPNETCORE_ENVIRONMENT=${env_name_big} -t    ${docker_image_url}   .  "
          echo '镜像打tag完成了'

        }

      }
    }

    stage('推送镜像到Harbor仓库') {
      agent none
      steps {
        container('base') {

         // echo "env_name=${env_name}"
         // echo "env_name_big=${env_name_big}"
        //  echo "gitbranch=${gitbranch}"
        //  echo "GIT_COMMIT=${GIT_COMMIT}" 
        //  echo "docker_image_url=${docker_image_url}"

          withCredentials([usernamePassword(credentialsId : 'harbor-auth' ,passwordVariable : 'password_var' ,usernameVariable : 'username_var' ,)]) {
            //echo '本地镜像上传到harbor---start'

            sh " docker login -u ${username_var}  -p ${password_var} ${REGISTRY}"
            sh  " docker push $docker_image_url "
            //echo '本地镜像上传到harbor-ok'
          }

        }

      }
    }

    stage('部署') {
      agent none
       environment {
          env_name_big = "${env_name_big}"
          env_name = "${env_name}"
        }
      steps {
        container('base') {
             
          echo "env_name=${env_name}"
          echo "env_name_big=${env_name_big}"
          echo "gitbranch=${gitbranch}"
          echo "GIT_COMMIT=${GIT_COMMIT}" 
          echo "docker_image_url=${docker_image_url}"

          withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
             sh 'envsubst    < ${web_dictionary_name}/deploy/svc.yml | kubectl apply -f -'   
          }
          
          script {

            if(env_name=="prod")
            {              
               // echo "http请求更改版本号"  
               // echo docker_image_url
                sh """ curl -X 'POST'  '${version_update_posturi}' -H 'accept: text/plain'  -H 'Content-Type: application/json-patch+json' -H 'request-from: swagger' -d '{ "appCode": "${APP_NAME}",  "appVersionInfo": "${GIT_COMMIT}",  "dockerImageUrl": "${docker_image_url}" }'"""

                 echo "http请求更改版本号成功!"  
              }
          }

          echo "自动构建成功!"  
        }

      }
    }

  }
  
  environment {
    APP_NAME = 'test-api'
    web_dictionary_name = 'Test.WebAPI' 

    version_update_posturi='http://10.120.34.5/api/version/BuildNum'
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITHUB_CREDENTIAL_ID = 'github-id'
    KUBECONFIG_CREDENTIAL_ID = 'kubeconfig'
    REGISTRY = '150.10.1.26'
    DOCKERHUB_NAMESPACE = 'default'
    GITHUB_ACCOUNT = 'kubesphere'
    timestr=new Date().format("yyyyMMdd") 
    gitbranch=''
    env_name=''
    docker_image_url=''
  } 
}

Il y a un autre écueil : notre version de Kubesphere est la 3.2.1. Je ne connais pas les versions supérieures. Nous avons déployé 2 clusters, un cluster principal kubephere et un cluster membre (tous les sites développés webapi sont déployés dans ce cluster). L'adresse des webhooks affichée sur la page de création du pipeline indique l'adresse principale du cluster, qui est en fait erronée. Il devrait s'agir de l'adresse principale du cluster membre. L'adresse de tous les webhooks gitlab doit être l'adresse du maître du cluster membre. Bien sûr, s'il s'agit du mode "Tout-en-un", ce problème ne se posera pas.

2. Configuration des webhooks de gitlab

Ouvrez l'adresse git que vous venez de spécifier, "Paramètres" - "Webhooks", et remplissez l'URL avec l'adresse des webhooks que vous venez de voir dans Kubesphere.

N'oubliez pas de cocher uniquement « Événements push » ici et de renseigner le nom de la branche « développer ».

Décochez "Fusionner les événements de demande", Décochez "Fusionner les événements de demande", Décochez "Fusionner les événements de demande". Parce que lorsque le code de fusion demande le consentement, il envoie l'événement Push, il vous suffit donc de vérifier le premier.

Afin de prendre en charge plusieurs branches, créez plusieurs webhooks dans gitlab.

3. Scripts de fichiers Jenkins

Vous devez obtenir certains paramètres git, tels que le nom de la branche, l'identifiant de validation git et d'autres données. Vous pouvez d'abord imprimer les variables d'environnement. Si elles contiennent des valeurs pertinentes, vous pouvez les utiliser directement. 

sh 'printenv'

Vous pouvez constater qu'il existe plusieurs variables d'environnement qui peuvent être utilisées directement.

env.BRANCH_NAME   //分支名
env.GIT_BRANCH    //分支名
env.GIT_COMMIT   //git commit id

Je suppose que tu aimes

Origine blog.csdn.net/puzi0315/article/details/126996831
conseillé
Classement