org.jfrog.hudson.maven2.MavenBuildInfoDeployer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of artifactory Show documentation
Show all versions of artifactory Show documentation
Integrates Artifactory to Hudson
The newest version!
/*
* Copyright (C) 2010 JFrog Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jfrog.hudson.maven2;
import com.google.common.collect.Lists;
import hudson.maven.MavenBuild;
import hudson.maven.MavenModule;
import hudson.maven.MavenModuleSetBuild;
import hudson.maven.reporters.MavenArtifact;
import hudson.maven.reporters.MavenArtifactRecord;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.tasks.Fingerprinter;
import org.jfrog.build.api.Artifact;
import org.jfrog.build.api.Build;
import org.jfrog.build.api.BuildType;
import org.jfrog.build.api.Module;
import org.jfrog.build.api.builder.ArtifactBuilder;
import org.jfrog.build.api.builder.DependencyBuilder;
import org.jfrog.build.api.builder.ModuleBuilder;
import org.jfrog.build.client.ArtifactoryBuildInfoClient;
import org.jfrog.hudson.AbstractBuildInfoDeployer;
import org.jfrog.hudson.BuildInfoAwareConfigurator;
import org.jfrog.hudson.MavenDependenciesRecord;
import org.jfrog.hudson.MavenDependency;
import org.jfrog.hudson.action.ActionableHelper;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Builds the build info. This class is used only when the Maven 3 extractor is not active.
*
* @author Yossi Shaul
*/
public class MavenBuildInfoDeployer extends AbstractBuildInfoDeployer {
private final Build buildInfo;
private BuildInfoAwareConfigurator configurator;
public MavenBuildInfoDeployer(BuildInfoAwareConfigurator configurator, ArtifactoryBuildInfoClient client,
MavenModuleSetBuild build, BuildListener listener) throws IOException, InterruptedException {
super(configurator, build, listener, client);
this.configurator = configurator;
buildInfo = createBuildInfo("Maven", build.getParent().getMaven().getName(), BuildType.MAVEN);
gatherModuleAndDependencyInfo(build);
}
public void deploy() throws IOException {
String url = configurator.getArtifactoryServer().getUrl() + "/api/build";
listener.getLogger().println("Deploying build info to: " + url);
client.sendBuildInfo(buildInfo);
}
private void gatherModuleAndDependencyInfo(MavenModuleSetBuild mavenModulesBuild) {
Map mavenBuildMap = mavenModulesBuild.getModuleLastBuilds();
List modules = Lists.newArrayList();
for (Map.Entry 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 void addDependencies(ModuleBuilder moduleBuilder, MavenBuild mavenBuild) {
MavenDependenciesRecord dependenciesRecord =
ActionableHelper.getLatestAction(mavenBuild, MavenDependenciesRecord.class);
if (dependenciesRecord != null) {
Set dependencies = dependenciesRecord.getDependencies();
for (MavenDependency dependency : dependencies) {
DependencyBuilder dependencyBuilder = new DependencyBuilder()
.id(dependency.id)
.scopes(Arrays.asList(dependency.scope))
.type(dependency.type)
.md5(getMd5(dependency.groupId, dependency.fileName, mavenBuild));
moduleBuilder.addDependency(dependencyBuilder.build());
}
// delete them once used
build.getActions().removeAll(build.getActions(MavenDependenciesRecord.class));
}
}
private Artifact toArtifact(MavenArtifact mavenArtifact) {
ArtifactBuilder artifactBuilder = new ArtifactBuilder(mavenArtifact.canonicalName)
.type(mavenArtifact.type).md5(mavenArtifact.md5sum);
return artifactBuilder.build();
}
private String getMd5(String groupId, String fileName, MavenBuild mavenBuild) {
String md5 = null;
Fingerprinter.FingerprintAction fingerprint = ActionableHelper.getLatestAction(
mavenBuild, Fingerprinter.FingerprintAction.class);
if (fingerprint != null) {
md5 = fingerprint.getRecords().get(groupId + ":" + fileName);
}
return md5;
}
}