Sharing Jenkins Pipeline Workspace with build

174 views
Skip to first unread message

paolo ponzano

unread,
May 3, 2017, 10:31:44 AM5/3/17
to Jenkins Users
Hello,
I premit I'm quite new to jenkins and to pipeline in particular.
I've a web application that's composed of a main application and several modules.

My jenkins pipeline is the following

node
{
    def libName     = "Project"
    def slnPath     = "F:\\Build\\Jenkins\\jobs\\Project\\workspace\\"
    def slnName     = "${slnPath}${libName}.sln"
    def nuget       = "F:\\NugetBin\\nuget.exe"
    def msbHome     = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\MSBuild\\15.0\\Bin\\msbuild.exe"
    def webProject  = "${slnPath}Project.Server\\Project.Server.csproj"
    def profile     = getProperty("PublishProfile");
    def version     = getProperty("Version");
    def deployFolder= "${slnPath}Deploy"
    
    def buildName = profile + "_" + version;
    

    stage('SCM update')
    {
        checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: '08ae9e8c-8db8-43e1-b081-eb352eb14d11', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'http://myserver:18080/svn/Prod/Projects/Project/Project/trunk']], workspaceUpdater: [$class: 'UpdateWithRevertUpdater']])
    }
    
     stage('SCM Revision')
    {
       bat("svn info ${slnPath} >revision.txt");

        for (String i : readFile('revision.txt').split("\r?\n"))
        {
            if(i.contains("Last Changed Rev: ")) //This is odd but it's the only way I've found to get revision
            {
                def splitted = i.split(": ")
                
                echo "Revisione : "+ splitted[1];
                
                buildName += "." + splitted[1];
                currentBuild.displayName = buildName;
            }
        }
    }
    
    stage('Nuget restore')
    {
         bat("${nuget} restore \"${slnName}\"")
    }
    
    stage('Build Web Main project')
    {
        bat("\"${msbHome}\" \"${webProject}\" /p:Configuration=\"${profile}\" /p:DeployOnBuild=true /p:publishUrl=\"${deployFolder}\\${profile}\" /nologo /t:Clean,Build" )
    }
    
    stage('Build modules')
    {
         def moduleName = getProperty("modules");
         
         if(moduleName != "")
         {
             
         
         def modules = moduleName.split(',');

         echo "Processing " + modules.length + "modules";

         for(int i=0;i<modules.length;i++)
         {
             bat("\"${msbHome}\" ${slnPath}IFMS.Modules\\" + modules[i] + "\\" + modules[i] + ".csproj /p:Configuration=Release /nologo /t:Clean,Build" )
             //step to pack it as nuget
             bat("\"${nuget}\" pack ${slnPath}Project.Modules\\" + modules[i] + "\\" + modules[i] + ".csproj -ForceEnglishOutput -IncludeReferencedProjects -Prop Configuration=Release;Platform=AnyCPU -ExcludeEmptyDirectories  -OutputDirectory " + deployFolder +"\\" + profile +"\\packages" )
         }
         }
         else
         {
         echo "No module selected";
         }
   
   
//   parallel jobs;
    }
    
    stage('Compress artifacts')
    {
        def filename= buildName + ".zip";
        bat("del "+ filename);
        
        zip(zipFile:filename, dir:"Deploy\\" + profile)
        
        archiveArtifacts artifacts: filename
    }
}

My code smell is here when I define  stage('Build modules'), I wish to call a build and call another jenkins job so that it can be build in parallel. But as far I've seen using the simple build(....) I've to do again the svn checkout, nuget package restore and so on.... what's the best way to pass the pipeline workspace down to the modules?

Thanks
Paolo
Reply all
Reply to author
Forward
0 new messages