Jenkins X: Consolidate the use of Apps / Addons

Goal: Consolidate Apps and Addons inside Jenkins X

Status: Completed

Team

Details

The current CLI supports apps and addons. Addons were either generic helm charts or a combination of helm chart plus some custom go code to install and integrate them with the Jenkins X platform. Apps framework which provided a more generic way of adding charts chatting to Jenkins X such that anybody could create an app without having to modify the underlying jx code. But now left developers with confusion over what an APP is. Developers think the apps is they are developing.

Deliverables

The main aim of the project would be to consolidate Apps and Addons inside Jenkins X to avoid confusion. Everything as an App and deprecate the use of the word Addon.

App includes system charts like knative, gloo, nginx-controller, flagger, prometheus, external-dns, cert-manager.

Implement jx add app and jx delete app to update the App.

Phase 1

I’ll add new commands to jx by transfer the add addon command to the add app.

The following commands will be supported:

  • jx add app kubeless

  • jx add app anchore

  • jx add app owasp-zap

  • jx add app gitea

  • jx add app environment

  • jx add app flagger

  • jx add app gloo

  • jx add app ingress

  • jx add app istio

  • jx add app ambassador

  • jx add app pipeline-events

  • jx add app prometheus

  • jx add app prow

Phase 2

I’ll add new commands to jx by transfer the delete addon command to the delete app.

The following commands will be supported:

  • jx delete app environment

  • jx delete app flagger

  • jx delete app gitea

  • jx delete app ingress

  • jx delete app istio

Phase 3

  • Resolve the issues and bugs in development

  • Write users documentation

  • Write developer documentation

  • Submit my work to the mentor and ask for feedback then resolve the feedback

What work has been done

The following is migrated from Addons to Apps:

✅ - Can use the new command

❌ - Cannot use the new command

Addons Status New Command Repository Notes

Kubeless

jx add app jx-app-kubeless

https://github.com/jenkins-x-apps/jx-app-kubeless

N/A

Gloo

jx add app jx-app-gloo

https://github.com/jenkins-x-apps/jx-app-gloo

N/A

Flagger

jx add app jx-app-flagger

https://github.com/jenkins-x-apps/jx-app-flagger

N/A

Ingress

jx add app jx-app-ingress

https://github.com/jenkins-x-apps/jx-app-ingress

N/A

prometheus

jx add app jx-app-prometheus

https://github.com/jenkins-x-apps/jx-app-prometheus

N/

Anchore

jx add app jx-app-anchore

https://github.com/jenkins-x-apps/jx-app-anchore

Migrated by Jenkins X team before GSoC

Ambassador

jx add app jx-app-ambassador

https://github.com/jenkins-x-apps/jx-app-ambassador

Migrated by Jenkins X team before GSoC

Gitea

jx add app jx-app-gitea

https://github.com/jenkins-x-apps/jx-app-gitea

Migrated by Jenkins X team before GSoC

Istio

jx add app jx-app-istio

https://github.com/jenkins-x-apps/-jx-app-istio

Not pushed to chartmuseum.jenkins-x.io

OWASP-ZAP

jx add app jx-app-owasp-zap

https://github.com/jenkins-x-apps/jx-app-owasp-zap

Not pushed to chartmuseum.jenkins-x.io

environment

N/A

N/A

Deprecated

pipeline-events

N/A

N/A

Deprecated

Prow

N/A

N/A

Deprecated

The jx delete app command is implemented by other contributors during GSoC, so I cannot impletement it.

The following is my PR to improve Jenkins X:

Name URL

Support add an Apps from git repository

https://github.com/jenkins-x/jx/pull/7436

Deprecate Addons

https://github.com/jenkins-x/jx/pull/7440 https://github.com/jenkins-x/jx/pull/7514

Fix install Apps

https://github.com/jenkins-x/jx/pull/7509 https://github.com/jenkins-x/jx/pull/7530 https://github.com/jenkins-x/jx/pull/7472 https://github.com/jenkins-x/jx/pull/7441

Improve compatibility with Windows

https://github.com/jenkins-x/jx/pull/7158 https://github.com/jenkins-x/jx/pull/7096

Improve get OS name

https://github.com/jenkins-x/jx/pull/6974

Fix ignore load jx-requirements.yml validation errors

https://github.com/jenkins-x/jx/pull/6943

Challenges

This is my first time to participate in GSoC. I have never been involved in the research and development of cloud native project, but I am full of interest in it. Jenkins X integrates Tekton, Knave, Lighthouse, Skaffold and Helm, it’s very challenging for me to learn Jenkins X. my focus is on Apps and Addons framework. Jenkins X uses Helm2 to manage all Apps. The interesting feature is that they don’t rely on tiller, which causes some obstacles. Through in-depth study and research, the existing problems are found and solutions are proposed.

Final Demo

In this presentation, I introduce the background of the project, as well as the solutions, and demonstrate the Apps I made.

Acknowledgements

Google Summer of Code is great opportunity for me, Jenkins X has a great team of mentors, I learned a lot about Kubernetes, Helm and how jx works, big application like jx are a big challenge for me, I am very grateful to Kara de la Marck, James Strachan and James Rawlings of mentors, Jenkins community, Jenkins X community and GSoC contributor guide me, I am looking forward to jx getting better and better, I also expect more and more people to contribute jx.

Office Hours

Office hours are scheduled every Monday at 14:00 UTC on the CDF #jenkins-x-gsoc channel. Meeting notes are available here to read.

Links