首页 > 解决方案 > Declare configFileProvider only once in JenkinsFile and reference from all stages

问题描述

I am trying to set up scripted JenkinsFile for our pipeline automation and would like to use configFileProvider for maven. As such i end up defining this block in all maven stages within the scripted JenkinsFile. Is there a way to define it just once in the script and reference it across all stages. My sample JenkinsFile as of now looks something like this :-

node {
   
   
   def mvnHome
   def mvnSettings
   
   stage('Prepare') {
      mvnHome = tool 'maven-3.5.4'

   }

   stage('Checkout') {
      checkout scm
   }
   
   stage('Build'){
      configFileProvider(
        [configFile(fileId: '**********', variable: 'MAVEN_SETTINGS')]) {
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS install"
      }
   }
   
   stage('Integration Test') {
   
   
       sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore clean verify"
   }
   
   stage('Sonar') {
      configFileProvider(
        [configFile(fileId: '**********', variable: 'MAVEN_SETTINGS')]) {
   		sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS sonar:sonar"
		}
   }

   stage('Packaging') {
      configFileProvider(
        [configFile(fileId: '**********', variable: 'MAVEN_SETTINGS')]) {
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS package"
        }
   }

   stage('Deploy') {
      configFileProvider(
        [configFile(fileId: '**********', variable: 'MAVEN_SETTINGS')]) {
		
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy}"
      } 
     }
    }

Any help or suggestions here would be greatly appreciated as always.

Cheers,

Ashley

标签: jenkinsgroovyjenkins-pluginsjenkins-pipelinejenkins-groovy

解决方案


由于它是脚本化的,因此您不必遵循严格的结构,虽然不是很漂亮,但您可以更改顺序并将阶段放在 configFileProvider 中:

configFileProvider(
            [configFile(fileId: '**********', variable: 'MAVEN_SETTINGS')]) {

    stage('Build'){
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS install"
    }

    stage('Integration Test') {
        sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore clean verify"
    }

    stage('Sonar') {
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS sonar:sonar"
    }

    stage('Packaging') {
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS package"
    }

    stage('Deploy') {   
        sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy}"
    }
}

最好的,安德烈


推荐阅读