You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/03/31 19:03:38 UTC
[camel-karavan] branch main updated: Default pipelines for #646
This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new eafb6f64 Default pipelines for #646
eafb6f64 is described below
commit eafb6f641298f3536545b5e2b14322c69ad090b0
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Fri Mar 31 15:03:30 2023 -0400
Default pipelines for #646
---
.../org/apache/camel/karavan/model/Project.java | 1 +
.../apache/camel/karavan/service/CodeService.java | 25 +++++-
.../camel/karavan/service/ProjectService.java | 35 +++++++--
.../pipelines/karavan-pipeline-dev-quarkus.yaml | 27 +++++++
.../karavan-pipeline-dev-spring-boot.yaml | 27 +++++++
.../pipelines/karavan-task-dev-quarkus.yaml | 90 ++++++++++++++++++++++
.../pipelines/karavan-task-dev-spring-boot.yaml | 78 +++++++++++++++++++
7 files changed, 272 insertions(+), 11 deletions(-)
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java b/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java
index 0325952a..254d38c4 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java
@@ -10,6 +10,7 @@ public class Project {
public static final String NAME_TEMPLATES = "templates";
public static final String NAME_KAMELETS = "kamelets";
+ public static final String NAME_PIPELINES = "pipelines";
@ProtoField(number = 1)
String projectId;
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
index 4fb5e67a..a7cdb1a2 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
@@ -59,6 +59,10 @@ public class CodeService {
@Inject
Engine engine;
+ List<String> runtimes = List.of("quarkus", "spring-boot");
+ List<String> targets = List.of("openshift", "kubernetes");
+ List<String> interfaces = List.of("org.apache.camel.AggregationStrategy.java", "org.apache.camel.Processor.java");
+
public String getApplicationProperties(Project project) {
String target = kubernetesService.isOpenshift() ? "openshift" : "kubernetes";
String templateName = project.getRuntime() + "-" + target + "-application.properties";
@@ -86,10 +90,6 @@ public class CodeService {
public Map<String,String> getApplicationPropertiesTemplates() {
Map<String, String> result = new HashMap<>();
- List<String> runtimes = List.of("quarkus", "spring-boot");
- List<String> targets = List.of("openshift", "kubernetes");
- List<String> interfaces = List.of("org.apache.camel.AggregationStrategy.java", "org.apache.camel.Processor.java");
-
List<String> files = new ArrayList<>(interfaces);
files.addAll(targets.stream().map(target -> target + "-application.properties").collect(Collectors.toList()));
@@ -104,6 +104,23 @@ public class CodeService {
return result;
}
+ public Map<String,String> getPipelinesTemplates() {
+ Map<String, String> result = new HashMap<>();
+
+ List<String> files = new ArrayList<>(targets);
+ files.addAll(targets.stream().map(target -> target + ".yaml").collect(Collectors.toList()));
+
+ runtimes.forEach(runtime -> {
+ files.forEach(file -> {
+ String templateName = runtime + "-" + file;
+ String templatePath = "/pipelines/" + templateName;
+ String templateText = getResourceFile(templatePath);
+ result.put(templateName, templateText);
+ });
+ });
+ return result;
+ }
+
public String getResourceFile(String path) {
try {
InputStream inputStream = KameletResources.class.getResourceAsStream(path);
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index e679ceb2..0a574614 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -29,7 +29,6 @@ import org.jboss.logging.Logger;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import java.time.Instant;
-import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -100,9 +99,11 @@ public class ProjectService {
Project project;
String folderName = repo.getName();
if (folderName.equals(Project.NAME_TEMPLATES)) {
- project = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "quarkus", repo.getCommitId(), repo.getLastCommitTimestamp());
+ project = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "", repo.getCommitId(), repo.getLastCommitTimestamp());
} else if (folderName.equals(Project.NAME_KAMELETS)){
- project = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "quarkus", repo.getCommitId(), repo.getLastCommitTimestamp());
+ project = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "", repo.getCommitId(), repo.getLastCommitTimestamp());
+// } else if (folderName.equals(Project.NAME_PIPELINES)){
+// project = new Project(Project.NAME_PIPELINES, "Pipelines", "CI/CD Pipelines", "", repo.getCommitId(), repo.getLastCommitTimestamp());
} else {
project = getProjectFromRepo(repo);
}
@@ -173,9 +174,9 @@ public class ProjectService {
try {
Project kamelets = infinispanService.getProject(Project.NAME_KAMELETS);
if (kamelets == null) {
- kamelets = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "quarkus", "", Instant.now().toEpochMilli());
+ kamelets = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "", "", Instant.now().toEpochMilli());
infinispanService.saveProject(kamelets, true);
- commitAndPushProject("kamelets", "Add custom kamelets");
+ commitAndPushProject(Project.NAME_KAMELETS, "Add custom kamelets");
}
} catch (Exception e) {
LOGGER.error("Error during custom kamelets project creation", e);
@@ -187,17 +188,37 @@ public class ProjectService {
try {
Project templates = infinispanService.getProject(Project.NAME_TEMPLATES);
if (templates == null) {
- templates = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "quarkus", "", Instant.now().toEpochMilli());
+ templates = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "", "", Instant.now().toEpochMilli());
infinispanService.saveProject(templates, true);
codeService.getApplicationPropertiesTemplates().forEach((name, value) -> {
ProjectFile file = new ProjectFile(name, value, Project.NAME_TEMPLATES, Instant.now().toEpochMilli());
infinispanService.saveProjectFile(file);
});
- commitAndPushProject("templates", "Add default templates");
+ commitAndPushProject(Project.NAME_TEMPLATES, "Add default templates");
}
} catch (Exception e) {
LOGGER.error("Error during templates project creation", e);
}
}
+
+ void addPipelinesProject() {
+ LOGGER.info("Add pipelines project if not exists");
+ try {
+ Project pipelines = infinispanService.getProject(Project.NAME_PIPELINES);
+ if (pipelines == null) {
+ pipelines = new Project(Project.NAME_PIPELINES, "Pipelines", "CI/CD Pipelines", "", "", Instant.now().toEpochMilli());
+ infinispanService.saveProject(pipelines, true);
+
+ codeService.getApplicationPropertiesTemplates().forEach((name, value) -> {
+ ProjectFile file = new ProjectFile(name, value, Project.NAME_PIPELINES, Instant.now().toEpochMilli());
+ infinispanService.saveProjectFile(file);
+ });
+ commitAndPushProject(Project.NAME_PIPELINES, "Add default pipelines");
+ }
+ } catch (Exception e) {
+ LOGGER.error("Error during pipelines project creation", e);
+ }
+ }
+
}
diff --git a/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-quarkus.yaml b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-quarkus.yaml
new file mode 100644
index 00000000..7d063ba0
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-quarkus.yaml
@@ -0,0 +1,27 @@
+apiVersion: tekton.dev/v1beta1
+kind: Pipeline
+metadata:
+ name: karavan-pipeline-dev-quarkus
+spec:
+ params:
+ - description: ProjectId
+ name: PROJECT_ID
+ type: string
+ tasks:
+ - name: karavan-task-dev-quarkus
+ params:
+ - name: project
+ value: $(params.PROJECT_ID)
+ taskRef:
+ kind: Task
+ name: karavan-task-dev-quarkus
+ workspaces:
+ - name: karavan-m2-cache
+ workspace: karavan-m2-cache
+ - name: karavan-jbang-cache
+ workspace: karavan-jbang-cache
+ workspaces:
+ - description: Maven Cache
+ name: karavan-m2-cache
+ - description: JBang Cache
+ name: karavan-jbang-cache
\ No newline at end of file
diff --git a/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-spring-boot.yaml b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-spring-boot.yaml
new file mode 100644
index 00000000..6c50b4bb
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-spring-boot.yaml
@@ -0,0 +1,27 @@
+apiVersion: tekton.dev/v1beta1
+kind: Pipeline
+metadata:
+ name: karavan-pipeline-dev-spring-boot
+spec:
+ params:
+ - description: ProjectId
+ name: PROJECT_ID
+ type: string
+ tasks:
+ - name: karavan-task-dev-spring-boot
+ params:
+ - name: project
+ value: $(params.PROJECT_ID)
+ taskRef:
+ kind: Task
+ name: karavan-task-dev-spring-boot
+ workspaces:
+ - name: karavan-m2-cache
+ workspace: karavan-m2-cache
+ - name: karavan-jbang-cache
+ workspace: karavan-jbang-cache
+ workspaces:
+ - description: Maven Cache
+ name: karavan-m2-cache
+ - description: JBang Cache
+ name: karavan-jbang-cache
\ No newline at end of file
diff --git a/karavan-app/src/main/resources/pipelines/karavan-task-dev-quarkus.yaml b/karavan-app/src/main/resources/pipelines/karavan-task-dev-quarkus.yaml
new file mode 100644
index 00000000..b47285d7
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-task-dev-quarkus.yaml
@@ -0,0 +1,90 @@
+apiVersion: tekton.dev/v1beta1
+kind: Task
+metadata:
+ name: karavan-task-dev-quarkus
+spec:
+ params:
+ - description: ProjectId
+ name: project
+ type: string
+ steps:
+ - env:
+ - name: GIT_REPOSITORY
+ valueFrom:
+ secretKeyRef:
+ key: git-repository
+ name: karavan
+ - name: GIT_USERNAME
+ valueFrom:
+ secretKeyRef:
+ key: git-username
+ name: karavan
+ - name: GIT_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ key: git-password
+ name: karavan
+ - name: GIT_BRANCH
+ valueFrom:
+ secretKeyRef:
+ key: git-branch
+ name: karavan
+ - name: IMAGE_REGISTRY
+ valueFrom:
+ secretKeyRef:
+ key: image-registry
+ name: karavan
+ optional: true
+ image: 'ghcr.io/apache/camel-karavan-builder:3.20.0'
+ name: karavan-build-deploy
+ script: >-
+ #!/usr/bin/env bash
+ CHECKOUT_DIR="/scripts"
+ KAMELETS_DIR="/scripts/kamelets"
+
+ if [[ $GIT_REPOSITORY == https* ]] ;
+ then
+ replacer=https://$GIT_PASSWORD@
+ prefix=https://
+ url="${GIT_REPOSITORY/$prefix/$replacer}"
+ git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+ else
+ git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} ${CHECKOUT_DIR}
+ fi
+
+ cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+ entrypoint -Dcamel.jbang.version=3.20.1 camel@apache/camel export
+ --local-kamelet-dir=${KAMELETS_DIR}
+
+ export LAST_COMMIT=$(git rev-parse --short HEAD)
+ export DATE=$(date '+%Y%m%d%H%M%S')
+ export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+
+ export NAMESPACE=$(cat
+ /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+ /opt/mvnd/bin/mvnd package \
+ -Dquarkus.container-image.build=true \
+ -Dquarkus.container-image.push=true \
+ -Dquarkus.container-image.insecure=true \
+ -Dquarkus.container-image.username=sa \
+ -Dquarkus.container-image.password=${TOKEN} \
+ -Dquarkus.container-image.registry=${IMAGE_REGISTRY} \
+ -Dquarkus.container-image.builder=jib \
+ -Dquarkus.kubernetes-client.master-url=kubernetes.default.svc \
+ -Dquarkus.kubernetes-client.token=${TOKEN} \
+ -Dquarkus.kubernetes.deploy=true \
+ -Dquarkus.openshift.deployment-kind=Deployment \
+ -Dquarkus.openshift.add-version-to-label-selectors=false \
+ -Dquarkus.openshift.labels.\"app\"=$(inputs.params.project) \
+ -Dquarkus.openshift.labels.\"app.openshift.io/runtime\"=camel \
+ -Dquarkus.container-image.group=${NAMESPACE} \
+ -Dquarkus.container-image.tag=${DATE}
+ workspaces:
+ - description: Maven Cache
+ mountPath: /root/.m2
+ name: karavan-m2-cache
+ - description: JBang Cache
+ mountPath: /jbang/.jbang/cache
+ name: karavan-jbang-cache
diff --git a/karavan-app/src/main/resources/pipelines/karavan-task-dev-spring-boot.yaml b/karavan-app/src/main/resources/pipelines/karavan-task-dev-spring-boot.yaml
new file mode 100644
index 00000000..85e1996a
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-task-dev-spring-boot.yaml
@@ -0,0 +1,78 @@
+apiVersion: tekton.dev/v1beta1
+kind: Task
+metadata:
+ name: karavan-task-dev-spring-boot
+spec:
+ params:
+ - description: ProjectId
+ name: project
+ type: string
+ steps:
+ - env:
+ - name: GIT_REPOSITORY
+ valueFrom:
+ secretKeyRef:
+ key: git-repository
+ name: karavan
+ - name: GIT_USERNAME
+ valueFrom:
+ secretKeyRef:
+ key: git-username
+ name: karavan
+ - name: GIT_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ key: git-password
+ name: karavan
+ - name: GIT_BRANCH
+ valueFrom:
+ secretKeyRef:
+ key: git-branch
+ name: karavan
+ - name: IMAGE_REGISTRY
+ valueFrom:
+ secretKeyRef:
+ key: image-registry
+ name: karavan
+ optional: true
+ image: 'ghcr.io/apache/camel-karavan-builder:3.20.0'
+ name: karavan-build-deploy
+ script: >-
+ #!/usr/bin/env bash
+ CHECKOUT_DIR="/scripts"
+ KAMELETS_DIR="/scripts/kamelets"
+
+ if [[ $GIT_REPOSITORY == https* ]] ;
+ then
+ replacer=https://$GIT_PASSWORD@
+ prefix=https://
+ url="${GIT_REPOSITORY/$prefix/$replacer}"
+ git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+ else
+ git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} ${CHECKOUT_DIR}
+ fi
+
+ cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+ entrypoint -Dcamel.jbang.version=3.20.1 camel@apache/camel export
+ --local-kamelet-dir=${KAMELETS_DIR}
+
+ export LAST_COMMIT=$(git rev-parse --short HEAD)
+ export DATE=$(date '+%Y%m%d%H%M%S')
+ export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+
+ export NAMESPACE=$(cat
+ /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+ /opt/mvnd/bin/mvnd package oc:build oc:push oc:resource oc:apply \
+ -Popenshift \
+ -Djkube.namespace=${NAMESPACE} \
+ -Djkube.docker.push.registry=${IMAGE_REGISTRY} \
+ -Djkube.generator.name=${IMAGE_REGISTRY}/${NAMESPACE}/$(inputs.params.project):${DATE}
+ workspaces:
+ - description: Maven Cache
+ mountPath: /root/.m2
+ name: karavan-m2-cache
+ - description: JBang Cache
+ mountPath: /jbang/.jbang/cache
+ name: karavan-jbang-cache