Hello all, I've learned a ton from this google group and now I think I've 
run into something new.

Background: We have created 15 deployment pipelines for applications in our 
platform to deploy into a Dev integration environment and a QA environment 
using a single deploy job for each destination. When the root job of the 
pipelines has successfully pushed through the QA deploy we are including 
that root job build in another pipeline which pushes all applications to 
other environments.

Central function: We rely on Project Relationship (using 
getRelationship)and fingerprints. We create a special file for 
fingerprinting in each build: %JOB_NAME%_%BUILD_NUMBER%.fingerprint

Issue: We find that sometimes the project relationship is not created even 
though the fingerprint file was created, archived in the root job, and 
archived in each downstream deploy job. 

Workaround: We find we can repair the relationship by deleting the deploy 
builds, changing the affected pipeline to manual trigger steps and then 
executing each build pipeline step again. Thus the same root job was 
deployed a 2nd time but this time the project relationship exists. 
(Confirmed by using the project relationship page to compare root job to 
each downstream deploy job)

Note: Build pipeline appearance sample as follows
App-ABC > Deploy D1 > Deploy Q1
App-DEF > Deploy D1 > Deploy Q1
AllApp >Deploy Q2 > Deploy Stress > Deploy UAT
(AllApp uses groovy to CopyArtifact from latest relationship between App-* 
and Deploy Q1)

groovy snippet which chooses the build number of the root job for 
copyartifact

          //Get the relationship of upstream job build # to downstream job 
build number       
          //If the downstream job was run more than one time for a single 
upstream build then the rangeset will have number values per Key.
          //The key is the upstream job's build number
          SortedMap<Integer, Fingerprint.RangeSet> relationship = 
uProj.getRelationship(relationProj);     
          // Iterate through the relationships between matched job and this 
upstream job
         // Because they come out last build first, we will break the loop 
when a successful match build is found
          for( Map.Entry<Integer, Fingerprint.RangeSet> entry : 
relationship.entrySet()) 
          {
              buildByNumber= uProj.getBuildByNumber(entry.getKey());         
//Get Upstream build so we can print it's name
              println(entry.getKey() +" | "+entry.getValue());            
//Print the Upstream build number | downstream associated builds           
           
               dbuilds = relationProj.getBuilds(entry.getValue());    //Get 
list of matched builds correcponding to this upstream build
              for(AbstractBuild dbuild : dbuilds)
              {
                 if(dbuild.getResult()==hudson.model.Result.SUCCESS)
                 {
                   String defaultDate = "01/01/2014 00:00:00";
                   java.util.Date parsedDate;
                   try{                    
                      SimpleDateFormat formatter = new 
SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
                      parsedDate= formatter.parse(minDate);
                    } catch (ParseException ex) {
                        println ("Date parsing failed: " +minDate);
                        parsedDate= formatter.parse(defaultDate);
                    }
                    if(dbuild.getTime().after(parsedDate)) 
                    {
                       println ("Last " +relationProj.getName() +" SUCCESS 
at Build Number " + dbuild.number + " From " + dbuild.getTime().toString());
                       //buildnumber=entry.getKey();
                       //break;
                    }
                 }
              }

Thanks for reading
Ken

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to