io.fabric8.kubernetes.api.builds.Builds Maven / Gradle / Ivy
/**
* Copyright 2005-2016 Red Hat, Inc.
*
* Red Hat licenses this file to you 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 io.fabric8.kubernetes.api.builds;
import io.fabric8.kubernetes.api.KubernetesHelper;
import io.fabric8.kubernetes.api.builders.ListEnvVarBuilder;
import io.fabric8.openshift.api.model.Build;
import io.fabric8.openshift.api.model.BuildConfig;
import io.fabric8.openshift.api.model.BuildConfigSpec;
import io.fabric8.openshift.api.model.BuildSource;
import io.fabric8.openshift.api.model.BuildStrategy;
import io.fabric8.openshift.api.model.BuildTriggerPolicy;
import io.fabric8.openshift.api.model.BuildTriggerPolicyBuilder;
import io.fabric8.openshift.api.model.GitBuildSource;
import io.fabric8.openshift.api.model.JenkinsPipelineBuildStrategy;
import io.fabric8.utils.Objects;
import io.fabric8.utils.Strings;
import io.fabric8.utils.URLUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static io.fabric8.kubernetes.api.KubernetesHelper.getOrCreateMetadata;
public class Builds {
public static final String DEFAULT_SECRET = "secret101";
public static final String DEFAULT_BUILD_IMAGE_STREAM = "triggerJenkins";
public static final String DEFAULT_IMAGE_TAG = "latest";
public static final String DEFAULT_CUSTOM_BUILDER_IMAGE = "fabric8/openshift-s2i-jenkins-trigger";
public static class Status {
public static final String COMPLETE = "Complete";
public static final String FAIL = "Fail";
public static final String ERROR = "Error";
public static final String CANCELLED = "Cancelled";
}
public static BuildConfig createDefaultBuildConfig(String name, String gitUrl, String jenkinsUrl) {
BuildConfig buildConfig = new BuildConfig();
getOrCreateMetadata(buildConfig).setName(name);
boolean foundExistingGitUrl = false;
return configureDefaultBuildConfig(buildConfig, name, gitUrl, foundExistingGitUrl, jenkinsUrl);
}
public static BuildConfig configureDefaultBuildConfig(BuildConfig buildConfig, String name, String gitUrl, boolean foundExistingGitUrl, String jenkinsUrl) {
return configureDefaultBuildConfig(buildConfig, name, gitUrl, foundExistingGitUrl, DEFAULT_BUILD_IMAGE_STREAM, DEFAULT_IMAGE_TAG, DEFAULT_CUSTOM_BUILDER_IMAGE, DEFAULT_SECRET, jenkinsUrl);
}
public static BuildConfig configureDefaultBuildConfig(BuildConfig buildConfig, String name, String gitUrl, boolean foundExistingGitUrl, String buildImageStream, String buildImageTag, String s2iCustomBuilderImage, String secret, String jenkinsUrl) {
BuildConfigSpec spec = buildConfig.getSpec();
if (spec == null) {
spec = new BuildConfigSpec();
buildConfig.setSpec(spec);
}
if (!foundExistingGitUrl && Strings.isNotBlank(gitUrl)) {
BuildSource source = spec.getSource();
if (source == null) {
source = new BuildSource();
spec.setSource(source);
}
source.setType("Git");
GitBuildSource git = source.getGit();
if (git == null) {
git = new GitBuildSource();
source.setGit(git);
}
git.setUri(gitUrl);
}
if (Strings.isNotBlank(buildImageStream) && Strings.isNotBlank(buildImageTag)) {
BuildStrategy strategy = spec.getStrategy();
if (strategy == null) {
strategy = new BuildStrategy();
spec.setStrategy(strategy);
}
// TODO only do this if we are using Jenkins?
strategy.setType("JenkinsPipeline");
JenkinsPipelineBuildStrategy buildStrategy = strategy.getJenkinsPipelineStrategy();
if (buildStrategy == null) {
buildStrategy = new JenkinsPipelineBuildStrategy();
strategy.setJenkinsPipelineStrategy(buildStrategy);
}
ListEnvVarBuilder envBuilder = new ListEnvVarBuilder();
if (Strings.isNotBlank(jenkinsUrl)) {
envBuilder.withEnvVar("BASE_URI", jenkinsUrl);
}
buildStrategy.setJenkinsfilePath("Jenkinsfile");
}
List triggers = spec.getTriggers();
if (triggers == null) {
triggers = new ArrayList<>();
}
if (triggers.isEmpty()) {
triggers.add(new BuildTriggerPolicyBuilder().withType("GitHub").withNewGithub().withSecret(secret).endGithub().build());
triggers.add(new BuildTriggerPolicyBuilder().withType("Generic").withNewGeneric().withSecret(secret).endGeneric().build());
spec.setTriggers(triggers);
}
return buildConfig;
}
public static boolean isCompleted(String status) {
return Objects.equal(Status.COMPLETE, status);
}
public static boolean isCancelled(String status) {
return Objects.equal(Status.CANCELLED, status);
}
public static boolean isFailed(String status) {
if (status != null) {
return status.startsWith(Status.FAIL) || status.startsWith(Status.ERROR);
}
return false;
}
public static boolean isFinished(String status) {
return isCompleted(status) || isFailed(status) || isCancelled(status);
}
/**
* Returns a unique UUID for a build
*/
public static String getUid(Build build) {
String answer = null;
if (build != null) {
answer = build.getMetadata().getUid();
if (Strings.isNullOrBlank(answer)) {
Map metadata = getMetadata(build);
answer = getString(metadata, "uid");
if (Strings.isNullOrBlank(answer)) {
answer = getString(metadata, "id");
}
if (Strings.isNullOrBlank(answer)) {
answer = getString(metadata, "name");
}
}
if (Strings.isNullOrBlank(answer)) {
answer = build.getMetadata().getName();
}
}
return answer;
}
protected static String getString(Map metadata, String name) {
Object answer = metadata.get(name);
if (answer != null) {
return answer.toString();
}
return null;
}
public static Map getMetadata(Build build) {
if (build != null) {
Map additionalProperties = build.getAdditionalProperties();
if (additionalProperties != null) {
Object metadata = additionalProperties.get("metadata");
if (metadata instanceof Map) {
return (Map) metadata;
}
}
}
return Collections.EMPTY_MAP;
}
public static Map getMetadata(BuildConfig build) {
if (build != null) {
Map additionalProperties = build.getAdditionalProperties();
if (additionalProperties != null) {
Object metadata = additionalProperties.get("metadata");
if (metadata instanceof Map) {
return (Map) metadata;
}
}
}
return Collections.EMPTY_MAP;
}
public static String getName(BuildConfig build) {
String answer = null;
if (build != null) {
Map metadata = getMetadata(build);
answer = getString(metadata, "name");
if (Strings.isNullOrBlank(answer)) {
answer = build.getMetadata().getName();
}
}
return answer;
}
public static String getName(Build build) {
String answer = null;
if (build != null) {
Map metadata = getMetadata(build);
answer = getString(metadata, "name");
if (Strings.isNullOrBlank(answer)) {
answer = build.getMetadata().getName();
}
}
return answer;
}
public static String getNamespace(Build build) {
String answer = null;
if (build != null) {
Map metadata = getMetadata(build);
answer = getString(metadata, "namespace");
if (Strings.isNullOrBlank(answer)) {
answer = build.getMetadata().getNamespace();
}
}
return answer;
}
public static String getCreationTimestamp(Build build) {
String answer = null;
if (build != null) {
Map metadata = getMetadata(build);
answer = getString(metadata, "creationTimestamp");
if (Strings.isNullOrBlank(answer)) {
answer = build.getMetadata().getCreationTimestamp();
}
}
return answer;
}
public static Date getCreationTimestampDate(Build build) {
String text = getCreationTimestamp(build);
if (Strings.isNullOrBlank(text)) {
return null;
} else {
return KubernetesHelper.parseDate(text);
}
}
public static String getBuildConfigName(Build build) {
if (build != null) {
Map metadata = getMetadata(build);
Object labels = metadata.get("labels");
if (labels instanceof Map) {
Map labelMap = (Map) labels;
return getString(labelMap, "buildconfig");
}
}
return null;
}
/**
* Returns the link to the build page in the console for the given build UUID
*/
public static String createConsoleBuildLink(String fabricConsoleExternalUrl, String buildName) {
return URLUtils.pathJoin(fabricConsoleExternalUrl, "kubernetes/builds", buildName);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy