0
点赞
收藏
分享

微信扫一扫

7、pipeline job的分布式构建(基于docker的动态agent)

pipeline job的分布式构建(基于docker的动态agent)

依赖于Docker Pipeline Plugin插件,先安装插件
测试示例

pipeline {
  agent none

  stages {
    stage('JDK') {
      agent {
        docker {
          image 'eclipse-temurin:17-jdk-alpine'
          label 'master'
        }
      }
      steps {
        sh 'java --version'
      }
    }
    stage('Maven') {
      agent {
        docker {
          image 'maven:3.8.6-eclipse-temurin-17-alpine'
          label 'master'
        }
      }
      steps {
         sh 'mvn --version'
          sh 'java --version'
      }
    }
  }
}

立即构建并查看结果

7、pipeline job的分布式构建(基于docker的动态agent)_pipeline job的分布式构建

如以下作业如果基于动态agent来运行则需:

克隆代码指定gitlab镜像,并在某一docker中进行运行
build、test、代码质量扫描,指定maven镜像

但如果在docker运行的动态agent当中执行复杂的步骤,需要拼接起来很多镜像,而且众多镜像得能共享同一个工作空间才可以。否则工作空间的相关数据都下载到本地了,在其他阶段当中如打镜像是做不到的,而kubernetes pod不具有这样的问题,因为在一个pod当中可运行多个容器,不同容器用于实现不同的功能

pipeline {
  agent { label 'linux-jnlp-agent' }   #与agent定义标签一致
  parameters {
    booleanParam(name:'pushImage', defaultValue: 'true', description: 'Push Image to Harbor?')
  }
  tools {
    maven 'maven-3.8.7'
  }
  triggers {
    GenericTrigger(
      genericVariables: [
        [key: 'ref', value: '$.ref']
      ],
      token: 'fClZ0e/kTcqL2ARh7YqxW/3ndOCZA2SqfKnRTLat',
      causeString: 'Triggered on $ref',
      printContributedVariables: true,
      printPostContent: true
    )
  }   
  environment {
    codeRepo="http://gitlab.mengfanchao.com/root/spring-boot-helloWorld.git"
    harborServer='harbor.meng.org'
    projectName='spring-boot-helloworld'
    imageUrl="${harborServer}/ikubernetes/${projectName}"
    imageTag='latest'
  }
  stages {
    stage('Source') {
      steps {
        git branch: 'main', credentialsId: 'gitlab-root-credential', url: "${codeRepo}"
      }
    }
    stage('Build') {
        steps {
          sh 'mvn -B -DskipTests clean package'
      }
    }
    stage('Test') {
      steps {
        sh 'mvn test'
      }
    }
    stage("SonarQube Analysis") {
      steps {
        withSonarQubeEnv('SonarQube-Server') {
          sh 'mvn sonar:sonar'
        }
      }
    }
    stage("Quality Gate") {
      steps {
        timeout(time: 30, unit: 'MINUTES') {
          waitForQualityGate abortPipeline: true
        }
      }
    }        
    stage('Build Docker Image') {
      agent { label 'master' }
      steps {
        sh 'docker image build . -t "${harborServer}/ikubernetes/${projectName}:${imageTag}"'
      }           
    }
    stage('Push Docker Image') {
      agent { label 'master' }
      when {
        expression { params.pushImage }
        beforeAgent true     #提前评估代码,通过了在去master上完成镜像推送
      steps {
        withCredentials([usernamePassword(credentialsId: 'harbor-user-credential', \
          passwordVariable: 'harborUserPassword', usernameVariable: 'harborUserName')]) {
          sh "echo ${harborUserPassword} | docker login -u ${env.harborUserName} --password-stdin ${harborServer}"
          sh "docker image push ${imageUrl}:${imageTag}"
        }
      }
    }
  }
  post {
    always {
      mail to: '1153454651@qq.com',
      subject: "Status of pipeline: ${currentBuild.fullDisplayName}",
      body: "${env.BUILD_URL} has result ${currentBuild.result}"
    }
  }      
}

举报

相关推荐

0 条评论