Build build = new Build(); if (StringUtils.isNotBlank(version)) { build.setVersion(version); build.setName(name); build.setNumber(number); build.setType(type); build.setAgent(agent); build.setBuildAgent(buildAgent); build.setStarted(started); build.setDurationMillis(durationMillis); build.setPrincipal(principal); build.setArtifactoryPrincipal(artifactoryPrincipal); build.setUrl(url); build.setParentName(parentName); build.setParentNumber(parentNumber); build.setModules(modules); build.setStatuses(statuses); build.setProperties(properties); build.setVcsRevision(vcsRevision); build.setLicenseControl(licenseControl); build.setBuildRetention(buildRetention); build.setIssues(issues); build.setGovernance(governance); return build;
public void append(Build other) { Properties properties = other.getProperties(); Env otherEnv = new Env(); if (properties != null) { for (String key : properties.stringPropertyNames()) { boolean isEnvVar = StringUtils.startsWith(key, BuildInfoProperties.BUILD_INFO_ENVIRONMENT_PREFIX); if (isEnvVar) { otherEnv.getEnvVars().put(StringUtils.substringAfter(key, BuildInfoProperties.BUILD_INFO_ENVIRONMENT_PREFIX), properties.getProperty(key)); } else { otherEnv.getSysVars().put(key, properties.getProperty(key)); } } this.env.append(otherEnv); } if (other.getModules() != null) { other.getModules().forEach(this::addModule); } if (other.getBuildDependencies() != null) { this.buildDependencies.addAll(other.getBuildDependencies()); } }
public String buildInfoToJsonString(Build buildInfo) throws Exception { ArtifactoryVersion version = verifyCompatibleArtifactoryVersion(); //From Artifactory 2.2.3 we do not need to discard new properties in order to avoid a server side exception on //JSON parsing. Our JSON writer is configured to discard null values. if (!version.isAtLeast(UNKNOWN_PROPERTIES_TOLERANT_ARTIFACTORY_VERSION)) { buildInfo.setBuildAgent(null); buildInfo.setParentName(null); buildInfo.setParentNumber(null); buildInfo.setVcsRevision(null); } //From Artifactory 2.2.4 we also handle non-numeric build numbers if (!version.isAtLeast(NON_NUMERIC_BUILD_NUMBERS_TOLERANT_ARTIFACTORY_VERSION)) { String buildNumber = buildInfo.getNumber(); verifyNonNumericBuildNumber(buildNumber); String parentBuildNumber = buildInfo.getParentNumber(); verifyNonNumericBuildNumber(parentBuildNumber); } return toJsonString(buildInfo); }
Build build = new Build(); if (StringUtils.isNotBlank(version)) { build.setVersion(version); build.setName(name); build.setNumber(number); build.setType(type); build.setAgent(agent); build.setBuildAgent(buildAgent); build.setStarted(started); build.setDurationMillis(durationMillis); build.setPrincipal(principal); build.setArtifactoryPrincipal(artifactoryPrincipal); build.setUrl(url); build.setParentName(parentName); build.setParentNumber(parentNumber); build.setModules(modules); build.setProperties(properties); build.setVcsRevision(vcsRevision); return build;
private PublishedBuildDetails createBuildInfoIdentifier(String artifactoryUrl, Run build, Build buildInfo) { String buildName; String buildNumber; if (StringUtils.isNotEmpty(buildInfo.getName())) { buildName = buildInfo.getName(); } else { buildName = BuildUniqueIdentifierHelper.getBuildName(build); } if (StringUtils.isNotEmpty(buildInfo.getNumber())) { buildNumber = buildInfo.getNumber(); } else { buildNumber = BuildUniqueIdentifierHelper.getBuildNumber(build); } return createBuildInfoIdentifier(artifactoryUrl, buildName, buildNumber); }
public BuildInfoDeployer(ArtifactoryConfigurator configurator, ArtifactoryBuildInfoClient client, Run build, TaskListener listener, BuildInfoAccessor buildinfoAccessor) throws IOException, InterruptedException, NoSuchAlgorithmException { super(configurator, build, listener, client); this.configurator = configurator; this.build = build; envVars = buildinfoAccessor.getEnvVars(); sysVars = buildinfoAccessor.getSysVars(); buildInfo = createBuildInfo("Pipeline", "", BuildType.GENERIC); buildInfo.setBuildRetention(buildinfoAccessor.getRetention().createBuildRetention()); asyncBuildRetention = buildinfoAccessor.getRetention().isAsync(); if (buildinfoAccessor.getStartDate() != null) { buildInfo.setStartedDate(buildinfoAccessor.getStartDate()); } buildInfo.setModules(new ArrayList<Module>(buildinfoAccessor.getModules())); this.buildInfo.setBuildDependencies(new ArrayList<BuildDependency>(buildinfoAccessor.getBuildDependencies())); if (StringUtils.isNotEmpty(buildinfoAccessor.getBuildName())) { buildInfo.setName(buildinfoAccessor.getBuildName()); } if (StringUtils.isNotEmpty(buildinfoAccessor.getBuildNumber())) { buildInfo.setNumber(buildinfoAccessor.getBuildNumber()); } addVcsDataToBuild(build); }
private Build createBuild() { List<Artifact> artifactList = Lists.newArrayList(deployedArtifact); Module module = new ModuleBuilder().id(npmPackageInfo.toString()).artifacts(artifactList).build(); List<Module> modules = Lists.newArrayList(module); Build build = new Build(); build.setModules(modules); return build; } }
private void addVcsDataToBuild(Run build) { if (Jenkins.getInstance().getPlugin(PluginsUtils.GIT_PLUGIN_ID) == null) { return; } List<Vcs> vcsList = Utils.extractVcsBuildData(build); buildInfo.setVcs(vcsList); if (!vcsList.isEmpty()) { Vcs lastVcs = vcsList.get(vcsList.size() - 1); buildInfo.setVcsUrl(lastVcs.getUrl()); buildInfo.setVcsRevision(lastVcs.getRevision()); } }
private void createDeployDetailsAndAddToBuildInfo(List<Artifact> deployedArtifacts, List<Dependency> publishedDependencies) throws IOException, NoSuchAlgorithmException { ModuleBuilder moduleBuilder = new ModuleBuilder().id( ExtractorUtils.sanitizeBuildName(build.getParent().getDisplayName()) + ":" + build.getNumber()) .artifacts(deployedArtifacts); moduleBuilder.dependencies(publishedDependencies); buildInfo.setModules(Lists.newArrayList(moduleBuilder.build())); } }
public static org.jfrog.build.api.Build getGeneratedBuildInfo(Run build, TaskListener listener, Launcher launcher, String jsonBuildPath) { ObjectMapper mapper = new ObjectMapper(); FilePath generatedBuildInfoFilePath = null; InputStream inputStream = null; try { StringWriter writer = new StringWriter(); generatedBuildInfoFilePath = new FilePath(launcher.getChannel(), jsonBuildPath); inputStream = generatedBuildInfoFilePath.read(); IOUtils.copy(inputStream, writer, "UTF-8"); String buildInfoFileContent = writer.toString(); if (StringUtils.isBlank(buildInfoFileContent)) { return new org.jfrog.build.api.Build(); } return mapper.readValue(buildInfoFileContent, org.jfrog.build.api.Build.class); } catch (Exception e) { listener.error("Couldn't read generated build info at : " + jsonBuildPath); build.setResult(Result.FAILURE); throw new Run.RunnerAbortedException(); } finally { if (inputStream != null) { IOUtils.closeQuietly(inputStream); } deleteFilePathQuietly(generatedBuildInfoFilePath); } }
private List<ModuleNameVersion> collectModulesFromLastPublishedBuildInfo(SBuildType buildType) throws Exception { List<ModuleNameVersion> modules = Lists.newArrayList(); Build latestBuildInfo = locateLatestBuildInfo(buildType); if (latestBuildInfo != null) { List<Module> buildInfoModules = latestBuildInfo.getModules(); if (buildInfoModules != null) { for (Module buildInfoModule : buildInfoModules) { String moduleId = buildInfoModule.getId(); // rely on module id format like groupId:artifactId:version String[] moduleIdTokens = moduleId.split(":"); if (moduleIdTokens.length == 3) { modules.add(new ModuleNameVersion(moduleIdTokens[0], moduleIdTokens[1], moduleIdTokens[2])); } } } } return modules; }
private Build createBuild(List<Dependency> dependencies) { Module module = new ModuleBuilder().id(npmPackageInfo.toString()).dependencies(dependencies).build(); List<Module> modules = new ArrayList<>(); modules.add(module); Build build = new Build(); build.setModules(modules); return build; }
private void gatherModuleAndDependencyInfo(MavenModuleSetBuild mavenModulesBuild) { Map<MavenModule, MavenBuild> mavenBuildMap = mavenModulesBuild.getModuleLastBuilds(); List<Module> modules = Lists.newArrayList(); for (Map.Entry<MavenModule, MavenBuild> moduleBuild : mavenBuildMap.entrySet()) { MavenModule mavenModule = moduleBuild.getKey(); MavenBuild mavenBuild = moduleBuild.getValue(); Result result = mavenBuild.getResult(); if (Result.NOT_BUILT.equals(result)) { // HAP-52 - the module build might be skipped if using incremental build continue; } MavenArtifactRecord mar = ActionableHelper.getLatestMavenArtifactRecord(mavenBuild); String moduleId = mavenModule.getName() + ":" + mavenModule.getVersion(); ModuleBuilder moduleBuilder = new ModuleBuilder().id(moduleId); // add artifacts moduleBuilder.addArtifact(toArtifact(mar.mainArtifact)); if (!mar.isPOM() && mar.pomArtifact != null && mar.pomArtifact != mar.mainArtifact) { moduleBuilder.addArtifact(toArtifact(mar.pomArtifact)); } for (MavenArtifact attachedArtifact : mar.attachedArtifacts) { moduleBuilder.addArtifact(toArtifact(attachedArtifact)); } addDependencies(moduleBuilder, mavenBuild); modules.add(moduleBuilder.build()); } buildInfo.setModules(modules); }
private Set<DeployDetails> prepareDeployableArtifacts(Build build, Map<String, DeployDetails> deployableArtifactBuilders) { Set<DeployDetails> deployableArtifacts = Sets.newLinkedHashSet(); List<Module> modules = build.getModules(); for (Module module : modules) { List<Artifact> artifacts = module.getArtifacts(); if(artifacts!=null){ for (Artifact artifact : artifacts) { String artifactId = BuildInfoExtractorUtils.getArtifactId(module.getId(), artifact.getName()); DeployDetails deployable = deployableArtifactBuilders.get(artifactId); if (deployable != null) { File file = deployable.getFile(); setArtifactChecksums(file, artifact); deployableArtifacts.add(new DeployDetails.Builder().artifactPath(deployable.getArtifactPath()). file(file).md5(artifact.getMd5()).sha1(artifact.getSha1()). addProperties(deployable.getProperties()). targetRepository(deployable.getTargetRepository()).build()); } } } } return deployableArtifacts; }
Build build = new Build(); if (StringUtils.isNotBlank(version)) { build.setVersion(version); build.setName(name); build.setNumber(number); build.setType(type); build.setAgent(agent); build.setBuildAgent(buildAgent); build.setStarted(started); build.setDurationMillis(durationMillis); build.setPrincipal(principal); build.setArtifactoryPrincipal(artifactoryPrincipal); build.setUrl(url); build.setParentName(parentName); build.setParentNumber(parentNumber); build.setModules(modules); build.setStatuses(statuses); build.setProperties(properties); build.setVcsRevision(vcsRevision); build.setLicenseControl(licenseControl); build.setBuildRetention(buildRetention); build.setIssues(issues); build.setGovernance(governance); return build;
private String buildInfoToJsonString(Build buildInfo) throws IOException { Version version = getVersion(); boolean isCompatibleArtifactory = version.isAtLeast(MINIMAL_ARTIFACTORY_VERSION); if (!isCompatibleArtifactory) { log.warn("Note: Please upgrade your Artifactory server! This plugin is designed to work with version " + MINIMAL_ARTIFACTORY_VERSION + " of Artifactory and above."); } //From Artifactory 2.2.3 we do not need to discard new properties in order to avoid a server side exception on //JSON parsing. Our JSON writer is configured to discard null values. if (!version.isAtLeast(UNKNOWN_PROPERTIES_TOLERANT_ARTIFACTORY_VERSION)) { buildInfo.setBuildAgent(null); buildInfo.setParentName(null); buildInfo.setParentNumber(null); buildInfo.setVcsRevision(null); } //From Artifactory 2.2.4 we also handle non-numeric build numbers if (!version.isAtLeast(NON_NUMERIC_BUILD_NUMBERS_TOLERANT_ARTIFACTORY_VERSION)) { String buildNumber = buildInfo.getNumber(); verifyNonNumericBuildNumber(buildNumber); String parentBuildNumber = buildInfo.getParentNumber(); verifyNonNumericBuildNumber(parentBuildNumber); } return toJsonString(buildInfo); }