This project exposes JKube's kubernetes-maven-plugin
as an addon for Tackle2, enabling Java applications with Maven integration to have container image and Kubernetes manifests built for them.
This addon focus on two tasks:
- Generates container images with flexible and powerful configuration.
- Generates vanilla Kubernetes descriptors (YAML files).
It leverages the Kubernetes Maven plugin to generate container image and Kubernetes manifests.
To browse code - Open in VSCode
We use tackle2-hub addon package to integrate addon with tackle2-hub. Here is a good starter template to build an addon - Test Addon. Tackle Hub handles all requests to an addon via Task APIs and forward these requests to desired addon.
A simple request for an addon would look like this:
host="${HOST:-localhost:8080/hub}"
# Make a request to hub
request_cmd="$(curl -i -o - -X POST ${host}/tasks -d \
'{
"name":"Jkube",
"state": "Ready",
"locator": "jkube",
"addon": "jkube",
"application": {"id": 2},
"data": {}
}')"
In above request we mention addon: jkube
as an addon identifier and application: {id: 2}
states the application against which this addon will be executed. The data
field here is empty because we are not accepting any data for this addon, but we can pass data during api request to addons which accepts data, and we use this struct to receive data for the addon.
Once a request is received - addon will fetch the application mentioned in the request and perform the operations defined in the addon. For this addon we perform following operations:
- Fetch the application (clone GitHub/subversion repository)
- Parse the maven config file and add kubernetes-maven-plugin to
pom.xml
- Build the application using maven build
- Use kubernetes-maven-plugin to generate container image and k8s manifests
- Commit the generated resources to repo
Steps to successfully execute Jkube addon:
-
Clone this repo
https://github.com/mundra-ankur/tackle2-addon-jkube.git
-
Start a minikube environment and install tackle
make start-minikube install-tackle
-
Add Jkube addon to tackle - jkube addon
kubectl apply -f hack/addon.yml
-
Create an application in Tackle using this command
host="${HOST:-localhost:8080/hub}" # Create an Application curl -X POST ${host}/applications -d \ '{ "createUser": "tackle", "name":"JkubeDemo", "description": "Spring Boot demo application.", "repository": { "name": "jkube_demo", "url": "https://github.com/mundra-ankur/jkube_demo.git", "branch": "main" }, "businessService": {"id":1} }' | jq -M .
-
Get an application id (required in step 7), list all applications using
kubectl port-forward service/tackle-ui 8080:8080 -n konveyor-tackle curl -X GET localhost:8080/hub/applications | jq .
-
Populate required data in tackle, including application against which addon will be executed - reference, jkube-data
bash hack/task.sh
-
Create task to run JKube addon against our application - task
bash hack/task_ready.sh
Follow the Jkube Addon Demonstration for end-to-end setup and execution.
For Windup addon, we have build an end-to-end pipeline to test the addon.
Here you will find everything you need to successfully execute an addon, we did it using GitHub actions. This pipeline is very loosely coupled, and you can utilize its pieces to create your own workflow, to test your addon quickly.
- Deployment artifacts
- Dockerfile
- Kubernetes Manifests