This page lists job-precondition scripts that are taken straight from the public JIRA site. Please note that some scripts may be snippets and probably WILL need modification to work properly for your situation. Treat these as templates that you can modify from.
import com.urbancode.anthill3.domain.buildlife.BuildLife; import com.urbancode.anthill3.domain.buildrequest.BuildRequest; import com.urbancode.logic.Criteria; import com.urbancode.anthill3.domain.buildrequest.RequestSourceEnum; public class TriggeredJobStatus extends Criteria { public TriggeredJobStatus() { super(); } public boolean matches(Object obj) { BuildLife bl = BuildLifeLookup.getCurrent(); BuildRequest request = bl.getOriginatingRequest(); if (request.getRequestSource().equals(RequestSourceEnum.EVENT) || request.getRequestSource().equals(RequestSourceEnum.SCHEDULED) || request.getRequestSource().equals(RequestSourceEnum.REPOSITORY)) { return true; } else { return false; } } } return Logic.and(new TriggeredJobStatus(), JobStatus.anyAre(JobStatusEnum.FAILED));
return new Criteria() { public boolean matches(Object obj) { return true; } }
return new Criteria() { public boolean matches(Object obj) throws Exception { return BuildLifeLookup.getCurrent().hasStatus(StatusLookup.getStatusByName(".....")); } }
return new Criteria() { public boolean matches(Object obj) { String value = PropertyLookup.get("property"); boolean propertyExists = value != null; return propertyExists; } }
Job Pre-condition script that only runs in a specified Environment
return new Criteria() { public boolean matches(Object obj) throws Exception { return EnvironmentLookup.getCurrent().getName().equals("Build-Farm"); } }
import com.urbancode.anthill3.services.jobs.JobStatusEnum; Logic.not(JobStatus.parentsIn(new JobStatusEnum[] { JobStatusEnum.ABORTED, JobStatusEnum.FAILED, JobStatusEnum.SUCCESS, JobStatusEnum.SUCCESS_WARN }));
import com.urbancode.anthill3.domain.buildrequest.RequestSourceEnum; return new Criteria() { public boolean matches(Object obj) throws Exception { return RequestSourceEnum.MANUAL.equals(BuildRequestLookup.getCurrent().getRequestSource()); } }
return new Criteria() { public boolean matches(Object obj) { return ProjectLookup.getCurrent().getLifeCycleModel().getArtifactSetGroup().getArtifactSet("artifacts") != null; } }
import com.urbancode.anthill3.domain.profile.*; return new Criteria() { public boolean matches(Object obj) { ArtifactDeliverPatterns[] patterns = BuildLifeLookup.getCurrent().getProfile().getArtifactConfigArray(); for (int i=0; i<patterns.length; i++) { if ("artifacts".equals(patterns[i].getArtifactSet().getName())) { return true; } } return false; } }
import com.urbancode.codestation2.server.*; return new Criteria() { public boolean matches(Object obj) { return CodestationRepositoryFileHelper.getInstance().hasBuildLifeArtifactSet(BuildLifeLookup.getCurrent(), ProjectLookup.getCurrent().getLifeCycleModel().getArtifactSetGroup().getArtifactSet("artifacts")); } }
import com.urbancode.anthill3.domain.jobconfig.JobConfig; import com.urbancode.anthill3.domain.jobtrace.JobTrace; import com.urbancode.anthill3.domain.jobtrace.buildlife.BuildLifeJobTrace; import com.urbancode.anthill3.domain.jobtrace.buildlife.BuildLifeJobTraceFactory; import com.urbancode.anthill3.domain.jobtrace.operations.OperationsJobTrace; import com.urbancode.anthill3.domain.jobtrace.operations.OperationsJobTraceFactory; import com.urbancode.anthill3.domain.persistent.PersistenceException; import com.urbancode.anthill3.domain.persistent.PersistenceRuntimeException; import com.urbancode.anthill3.domain.workflow.Workflow; import com.urbancode.anthill3.domain.workflow.WorkflowCase; import com.urbancode.anthill3.domain.workflow.WorkflowDefinition; import com.urbancode.anthill3.runtime.scripting.helpers.WorkflowLookup; import com.urbancode.anthill3.services.jobs.JobStatusEnum; import com.urbancode.commons.dag.Vertex; import com.urbancode.logic.Criteria; return new Criteria() { final JobStatusEnum[] statuses = new JobStatusEnum[] { JobStatusEnum.SUCCESS, JobStatusEnum.NOT_NEEDED, JobStatusEnum.QUEUED, JobStatusEnum.RUNNING, JobStatusEnum.WAITING_ON_AGENTS }; final boolean checkAncestors = true; public boolean matches(Object obj) { JobStatus jobStatus = JobStatus.allAncestorsIn(statuses); boolean match = jobStatus.matches(obj); if (match) { // check the previous iteration jobs JobConfig jobConfig = (JobConfig) obj; JobTrace[] jobTraces = getJobTracesForJobConfig(WorkflowLookup.getCurrentCase(), jobConfig); for (int j=0; j<jobTraces.length; j++) { if (!jobStatus.matches(jobTraces[j])) { match = false; setResultMessage(jobStatus.getResultMessage()); break; } } } else { setResultMessage(jobStatus.getResultMessage()); } return match; } JobTrace[] getJobTracesForJobConfig(WorkflowCase wcase, JobConfig jobConfig) { try { HashSet jobTraceSet = new HashSet(); if (wcase.getProject().isLifeCycleBased()) { // do not use the method on workflow case, you may get locally cached jobs that are not up to date BuildLifeJobTrace[] jobTraces = BuildLifeJobTraceFactory.getInstance().restoreAllForWorkflowCase(wcase); for (int i = 0; i < jobTraces.length; i++) { if (jobConfig.equals(jobTraces[i].getJobConfig())) { jobTraceSet.add(jobTraces[i]); } } } else { OperationsJobTrace[] jobTraces = OperationsJobTraceFactory.getInstance().restoreAllForWorkflowCase(wcase); for (int i = 0; i < jobTraces.length; i++) { if (jobConfig.equals(jobTraces[i].getJobConfig())) { jobTraceSet.add(jobTraces[i]); } } } JobTrace[] result = new JobTrace[jobTraceSet.size()]; jobTraceSet.toArray(result); return result; } catch (PersistenceException e) { throw new PersistenceRuntimeException(e.getMessage(), e); } } }
return JobStatus.allAncestorsIn(new JobStatusEnum[] {JobStatusEnum.SUCCESS, JobStatusEnum.NOT_NEEDED})
import com.urbancode.anthill3.domain.workflow.WorkflowCase; import org.apache.log4j.Logger; Logger log = Logger.getLogger("script"); return new Criteria() { public boolean matches(Object obj) throws Exception { boolean match = false; WorkflowCase workflowCase = WorkflowLookup.getCurrentCase(); JobTrace[] jobTraceArray = workflowCase.getJobTraceArray(); if ("1".equals(PropertyLookup.get("anthill.job.iteration"))) { log.warn("Running job because it is the first iteration."); match = true; } else { boolean anyJobsFailed = false; for (int i = 0; i < jobTraceArray.length; ++i) { if (JobStatusEnum.FAILED.equals(jobTraceArray[i].getStatus())) { anyJobsFailed = true; break; } } if (anyJobsFailed){ log.warn("Running job because the first job failed."); match = true; } else { log.warn("Not running job. job count = " + jobTraceArray.length + "."); } } return match; } }