Search in sources :

Example 6 with BuildInfo

use of org.jfrog.build.extractor.ci.BuildInfo in project build-info by JFrogDev.

the class DeployTask method prepareAndDeploy.

/**
 * This method will be activated only at the "end" of the build, when we reached the root project.
 *
 * @throws java.io.IOException In case the deployment fails.
 */
private void prepareAndDeploy() throws IOException {
    ArtifactoryClientConfiguration accRoot = ArtifactoryPluginUtil.getArtifactoryConvention(getProject()).getClientConfig();
    Map<String, String> propsRoot = accRoot.publisher.getProps();
    // Reset the default properties, they may have changed
    GradleArtifactoryClientConfigUpdater.setMissingBuildAttributes(accRoot, getProject().getRootProject());
    Map<String, Set<DeployDetails>> allDeployDetails = new ConcurrentHashMap<>();
    List<ArtifactoryTask> orderedTasks = findArtifactoryPublishTasks(getProject().getGradle().getTaskGraph());
    int publishForkCount = getPublishForkCount(accRoot);
    if (publishForkCount <= 1) {
        orderedTasks.forEach(t -> deployArtifacts(accRoot, propsRoot, allDeployDetails, t, null));
    } else {
        try {
            ExecutorService executor = Executors.newFixedThreadPool(publishForkCount);
            CompletableFuture<Void> allUploads = CompletableFuture.allOf(orderedTasks.stream().map(t -> CompletableFuture.runAsync(() -> deployArtifacts(accRoot, propsRoot, allDeployDetails, t, "[" + Thread.currentThread().getName() + "]"), executor)).toArray(CompletableFuture[]::new));
            allUploads.get();
        } catch (InterruptedException | ExecutionException e) {
            throw new RuntimeException(e);
        }
    }
    // Extract Build Info.
    GradleBuildInfoExtractor gbie = new GradleBuildInfoExtractor(accRoot, moduleInfoFileProducers);
    BuildInfo buildInfo = gbie.extract(getProject().getRootProject());
    exportBuildInfo(buildInfo, getExportFile(accRoot));
    // Export generated.
    generateBuildInfoJson(accRoot, buildInfo);
    // Handle deployment.
    handleBuildInfoDeployment(accRoot, buildInfo, allDeployDetails);
}
Also used : ArtifactoryClientConfiguration(org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration) BuildInfo(org.jfrog.build.extractor.ci.BuildInfo)

Example 7 with BuildInfo

use of org.jfrog.build.extractor.ci.BuildInfo in project build-info by JFrogDev.

the class BuildDockerCreator method execute.

@Override
public BuildInfo execute() {
    logger.info("Generating build info for: " + imageFile);
    try {
        List<Module> modules = new ArrayList<>();
        List<ImageFileWithDigest> imageFilesWithDigest = imageFileType == ImageFileType.KANIKO ? getKanikoImageFileWithDigests(imageFile) : getJibImageFilesWithDigests(imageFile);
        if (imageFilesWithDigest.isEmpty()) {
            throw new RuntimeException("No image files found at path '" + imageFile + "'");
        }
        for (ImageFileWithDigest imageFileWithDigest : imageFilesWithDigest) {
            DockerImage image = new DockerImage("", imageFileWithDigest.imageName, imageFileWithDigest.manifestSha256, sourceRepo, artifactoryManagerBuilder, "", "");
            Module module = image.generateBuildInfoModule(logger, DockerUtils.CommandType.Push);
            if (module.getArtifacts() == null || module.getArtifacts().size() == 0) {
                logger.warn("Could not find docker image: " + imageFileWithDigest.imageName + " in Artifactory.");
            } else {
                setImageLayersProps(image.getLayers(), artifactProperties, artifactoryManagerBuilder);
            }
            modules.add(module);
            logger.info("Successfully created build info for image: " + imageFileWithDigest.imageName);
        }
        BuildInfo buildInfo = new BuildInfo();
        buildInfo.setModules(modules);
        return buildInfo;
    } catch (Exception e) {
        logger.error(ExceptionUtils.getRootCauseMessage(e), e);
        throw new RuntimeException(e);
    }
}
Also used : BuildInfo(org.jfrog.build.extractor.ci.BuildInfo) ArrayList(java.util.ArrayList) DockerImage(org.jfrog.build.extractor.docker.types.DockerImage) Module(org.jfrog.build.extractor.ci.Module) IOException(java.io.IOException)

Example 8 with BuildInfo

use of org.jfrog.build.extractor.ci.BuildInfo in project build-info by JFrogDev.

the class DockerPush method execute.

@Override
public BuildInfo execute() {
    String message = "Pushing image: " + imageTag;
    if (StringUtils.isNotEmpty(host)) {
        message += " using docker daemon host: " + host;
    }
    logger.info(message);
    try {
        DockerJavaWrapper.pushImage(imageTag, username, password, host, env, logger);
        String imageId = DockerJavaWrapper.getImageIdFromTag(imageTag, host, env, logger);
        DockerImage image = new DockerImage(imageId, imageTag, "", targetRepository, artifactoryManagerBuilder, "", "");
        Module module = image.generateBuildInfoModule(logger, DockerUtils.CommandType.Push);
        if (module.getArtifacts() == null || module.getArtifacts().size() == 0) {
            logger.warn("Could not find docker image: " + imageTag + " in Artifactory.");
        } else {
            setImageLayersProps(image.getLayers(), artifactProperties, artifactoryManagerBuilder);
        }
        BuildInfo buildInfo = new BuildInfo();
        modulesList.add(module);
        buildInfo.setModules(modulesList);
        logger.info("Successfully pushed docker image: " + imageTag);
        return buildInfo;
    } catch (IOException | InterruptedException e) {
        logger.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
}
Also used : BuildInfo(org.jfrog.build.extractor.ci.BuildInfo) DockerImage(org.jfrog.build.extractor.docker.types.DockerImage) IOException(java.io.IOException) Module(org.jfrog.build.extractor.ci.Module)

Example 9 with BuildInfo

use of org.jfrog.build.extractor.ci.BuildInfo in project build-info by JFrogDev.

the class DockerPull method execute.

@Override
public BuildInfo execute() {
    String message = "Pulling image: " + imageTag;
    if (StringUtils.isNotEmpty(host)) {
        message += " using docker daemon host: " + host;
    }
    logger.info(message);
    try {
        DockerJavaWrapper.pullImage(imageTag, username, password, host, env, logger);
        String imageId = DockerJavaWrapper.getImageIdFromTag(imageTag, host, env, logger);
        Pair<String, String> archDetails = DockerJavaWrapper.getImageArch(imageTag, host, env, logger);
        DockerImage image = new DockerImage(imageId, imageTag, "", targetRepository, artifactoryManagerBuilder, archDetails.getLeft(), archDetails.getRight());
        Module module = image.generateBuildInfoModule(logger, DockerUtils.CommandType.Pull);
        if (module.getDependencies() == null || module.getDependencies().size() == 0) {
            logger.warn("Could not find docker image: " + imageTag + " in Artifactory.");
        }
        BuildInfo buildInfo = new BuildInfo();
        modulesList.add(module);
        buildInfo.setModules(modulesList);
        logger.info("Successfully pulled docker image: " + imageTag);
        return buildInfo;
    } catch (IOException | InterruptedException e) {
        logger.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
}
Also used : BuildInfo(org.jfrog.build.extractor.ci.BuildInfo) DockerImage(org.jfrog.build.extractor.docker.types.DockerImage) IOException(java.io.IOException) Module(org.jfrog.build.extractor.ci.Module)

Example 10 with BuildInfo

use of org.jfrog.build.extractor.ci.BuildInfo in project build-info by JFrogDev.

the class GradleBuildInfoExtractor method extract.

@Override
public BuildInfo extract(Project rootProject) {
    String buildName = clientConf.info.getBuildName();
    BuildInfoBuilder bib = new BuildInfoBuilder(buildName);
    String buildNumber = clientConf.info.getBuildNumber();
    bib.number(buildNumber);
    String buildStartedIso = clientConf.info.getBuildStarted();
    Date buildStartDate = null;
    try {
        buildStartDate = new SimpleDateFormat(BuildInfo.STARTED_FORMAT).parse(buildStartedIso);
    } catch (ParseException e) {
        log.error("Build start date format error: " + buildStartedIso, e);
    }
    bib.started(buildStartedIso);
    BuildAgent buildAgent = new BuildAgent(clientConf.info.getBuildAgentName(), clientConf.info.getBuildAgentVersion());
    bib.buildAgent(buildAgent);
    // CI agent
    String agentName = clientConf.info.getAgentName();
    String agentVersion = clientConf.info.getAgentVersion();
    if (StringUtils.isNotBlank(agentName) && StringUtils.isNotBlank(agentVersion)) {
        bib.agent(new Agent(agentName, agentVersion));
    } else {
        // Fallback for standalone builds
        bib.agent(new Agent(buildAgent.getName(), buildAgent.getVersion()));
    }
    long durationMillis = buildStartDate != null ? System.currentTimeMillis() - buildStartDate.getTime() : 0;
    bib.durationMillis(durationMillis);
    Set<File> moduleFilesWithModules = moduleInfoFileProducers.stream().filter(ModuleInfoFileProducer::hasModules).flatMap(moduleInfoFileProducer -> moduleInfoFileProducer.getModuleInfoFiles().getFiles().stream()).collect(Collectors.toSet());
    moduleFilesWithModules.forEach(moduleFile -> {
        try {
            Module module = ModuleExtractorUtils.readModuleFromFile(moduleFile);
            List<Artifact> artifacts = module.getArtifacts();
            List<Dependency> dependencies = module.getDependencies();
            if ((artifacts != null && !artifacts.isEmpty()) || (dependencies != null && !dependencies.isEmpty())) {
                bib.addModule(module);
            }
        } catch (IOException e) {
            throw new RuntimeException("Cannot load module info from file: " + moduleFile.getAbsolutePath(), e);
        }
    });
    String parentName = clientConf.info.getParentBuildName();
    String parentNumber = clientConf.info.getParentBuildNumber();
    if (parentName != null && parentNumber != null) {
        bib.parentName(parentName);
        bib.parentNumber(parentNumber);
    }
    String principal = clientConf.info.getPrincipal();
    if (StringUtils.isBlank(principal)) {
        principal = System.getProperty("user.name");
    }
    bib.principal(principal);
    String artifactoryPrincipal = clientConf.publisher.getUsername();
    if (StringUtils.isBlank(artifactoryPrincipal)) {
        artifactoryPrincipal = System.getProperty("user.name");
    }
    bib.artifactoryPrincipal(artifactoryPrincipal);
    String artifactoryPluginVersion = clientConf.info.getArtifactoryPluginVersion();
    if (StringUtils.isBlank(artifactoryPluginVersion)) {
        artifactoryPluginVersion = "Unknown";
    }
    bib.artifactoryPluginVersion(artifactoryPluginVersion);
    String buildUrl = clientConf.info.getBuildUrl();
    if (StringUtils.isNotBlank(buildUrl)) {
        bib.url(buildUrl);
    }
    String vcsRevision = clientConf.info.getVcsRevision();
    if (StringUtils.isNotBlank(vcsRevision)) {
        bib.vcsRevision(vcsRevision);
    }
    String vcsUrl = clientConf.info.getVcsUrl();
    if (StringUtils.isNotBlank(vcsUrl)) {
        bib.vcsUrl(vcsUrl);
    }
    Vcs vcs = new Vcs(vcsUrl, vcsRevision, clientConf.info.getVcsBranch(), clientConf.info.getVcsMessage());
    if (!vcs.isEmpty()) {
        bib.vcs(Arrays.asList(vcs));
    }
    if (clientConf.info.isReleaseEnabled()) {
        String stagingRepository = clientConf.publisher.getRepoKey();
        String comment = clientConf.info.getReleaseComment();
        if (comment == null) {
            comment = "";
        }
        bib.addStatus(new PromotionStatusBuilder(Promotion.STAGED).timestampDate(buildStartDate).comment(comment).repository(stagingRepository).ciUser(principal).user(artifactoryPrincipal).build());
    }
    String issueTrackerName = clientConf.info.issues.getIssueTrackerName();
    if (StringUtils.isNotBlank(issueTrackerName)) {
        Issues issues = new Issues();
        issues.setAggregateBuildIssues(clientConf.info.issues.getAggregateBuildIssues());
        issues.setAggregationBuildStatus(clientConf.info.issues.getAggregationBuildStatus());
        issues.setTracker(new IssueTracker(issueTrackerName, clientConf.info.issues.getIssueTrackerVersion()));
        Set<Issue> affectedIssuesSet = clientConf.info.issues.getAffectedIssuesSet();
        if (!affectedIssuesSet.isEmpty()) {
            issues.setAffectedIssues(affectedIssuesSet);
        }
        bib.issues(issues);
    }
    for (Map.Entry<String, String> runParam : clientConf.info.getRunParameters().entrySet()) {
        MatrixParameter matrixParameter = new MatrixParameter(runParam.getKey(), runParam.getValue());
        bib.addRunParameters(matrixParameter);
    }
    log.debug("buildInfoBuilder = " + bib);
    // for backward compatibility for Artifactory 2.2.3
    BuildInfo buildInfo = bib.build();
    if (parentName != null && parentNumber != null) {
        buildInfo.setParentBuildId(parentName);
    }
    PackageManagerUtils.collectEnvIfNeeded(clientConf, buildInfo);
    return buildInfo;
}
Also used : Arrays(java.util.Arrays) Date(java.util.Date) SimpleDateFormat(java.text.SimpleDateFormat) Agent(org.jfrog.build.extractor.ci.Agent) StringUtils(org.apache.commons.lang3.StringUtils) Logger(org.gradle.api.logging.Logger) Issues(org.jfrog.build.extractor.ci.Issues) MatrixParameter(org.jfrog.build.extractor.ci.MatrixParameter) Artifact(org.jfrog.build.extractor.ci.Artifact) BuildInfoExtractor(org.jfrog.build.extractor.BuildInfoExtractor) BuildInfoBuilder(org.jfrog.build.extractor.builder.BuildInfoBuilder) Module(org.jfrog.build.extractor.ci.Module) BuildAgent(org.jfrog.build.extractor.ci.BuildAgent) Map(java.util.Map) IssueTracker(org.jfrog.build.extractor.ci.IssueTracker) ParseException(java.text.ParseException) Dependency(org.jfrog.build.extractor.ci.Dependency) PackageManagerUtils(org.jfrog.build.extractor.packageManager.PackageManagerUtils) Project(org.gradle.api.Project) PromotionStatusBuilder(org.jfrog.build.api.builder.PromotionStatusBuilder) Set(java.util.Set) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) File(java.io.File) List(java.util.List) Logging(org.gradle.api.logging.Logging) Issue(org.jfrog.build.extractor.ci.Issue) BuildInfo(org.jfrog.build.extractor.ci.BuildInfo) Promotion(org.jfrog.build.api.release.Promotion) Vcs(org.jfrog.build.extractor.ci.Vcs) ModuleExtractorUtils(org.jfrog.build.extractor.ModuleExtractorUtils) ArtifactoryClientConfiguration(org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration) Issue(org.jfrog.build.extractor.ci.Issue) Issues(org.jfrog.build.extractor.ci.Issues) Vcs(org.jfrog.build.extractor.ci.Vcs) BuildAgent(org.jfrog.build.extractor.ci.BuildAgent) Agent(org.jfrog.build.extractor.ci.Agent) BuildAgent(org.jfrog.build.extractor.ci.BuildAgent) IssueTracker(org.jfrog.build.extractor.ci.IssueTracker) MatrixParameter(org.jfrog.build.extractor.ci.MatrixParameter) Dependency(org.jfrog.build.extractor.ci.Dependency) IOException(java.io.IOException) Date(java.util.Date) Artifact(org.jfrog.build.extractor.ci.Artifact) BuildInfoBuilder(org.jfrog.build.extractor.builder.BuildInfoBuilder) PromotionStatusBuilder(org.jfrog.build.api.builder.PromotionStatusBuilder) BuildInfo(org.jfrog.build.extractor.ci.BuildInfo) ParseException(java.text.ParseException) Module(org.jfrog.build.extractor.ci.Module) SimpleDateFormat(java.text.SimpleDateFormat) File(java.io.File) Map(java.util.Map)

Aggregations

BuildInfo (org.jfrog.build.extractor.ci.BuildInfo)28 Module (org.jfrog.build.extractor.ci.Module)18 IOException (java.io.IOException)11 Path (java.nio.file.Path)6 ModuleBuilder (org.jfrog.build.extractor.builder.ModuleBuilder)6 Test (org.testng.annotations.Test)6 File (java.io.File)3 ArrayList (java.util.ArrayList)3 Date (java.util.Date)3 BuildInfoBuilder (org.jfrog.build.extractor.builder.BuildInfoBuilder)3 Artifact (org.jfrog.build.extractor.ci.Artifact)3 Vcs (org.jfrog.build.extractor.ci.Vcs)3 ArtifactoryClientConfiguration (org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration)3 DockerImage (org.jfrog.build.extractor.docker.types.DockerImage)3 Map (java.util.Map)2 BuildInfoExtractorUtils.jsonStringToBuildInfo (org.jfrog.build.extractor.BuildInfoExtractorUtils.jsonStringToBuildInfo)2 Agent (org.jfrog.build.extractor.ci.Agent)2 BuildAgent (org.jfrog.build.extractor.ci.BuildAgent)2 Dependency (org.jfrog.build.extractor.ci.Dependency)2 Issue (org.jfrog.build.extractor.ci.Issue)2