diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..8b4e5fe Binary files /dev/null and b/.DS_Store differ diff --git a/Tekton/.DS_Store b/Tekton/.DS_Store new file mode 100644 index 0000000..7ca20d2 Binary files /dev/null and b/Tekton/.DS_Store differ diff --git a/Tekton/pipeline/.DS_Store b/Tekton/pipeline/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/Tekton/pipeline/.DS_Store differ diff --git a/Tekton/pipeline/pipeline.yaml b/Tekton/pipeline/pipeline.yaml new file mode 100644 index 0000000..9190078 --- /dev/null +++ b/Tekton/pipeline/pipeline.yaml @@ -0,0 +1,120 @@ +--- +apiVersion: tekton.dev/v1beta1 +kind: Pipeline +metadata: + name: application-pipeline + #namespace: stage-tekton-pipeline +spec: + params: + - name: git-url + description: url of the github repository to clone + - name: branch + description: name of the master branch of the repository + workspaces: + - name: workspace-master + - name: workspace-experimental + tasks: + - name: clone-master + taskRef: + name: git-clone + workspaces: + - name: output + workspace: workspace-master + params: + - name: url + value: $(inputs.params.git-url) + - name: revision + value: $(inputs.params.master-branch) + - name: build-and-push-a + taskRef: + name: build-and-push + runAfter: + - clone-master + workspaces: + - name: source + workspace: workspace-master + params: + - name: context + value: "server-a" + - name: image-name + value: "server-a" + - name: version + value: "$(inputs.params.master-branch)" + - name: build-and-push-b-stable + taskRef: + name: build-and-push + runAfter: + - clone-master + workspaces: + - name: source + workspace: workspace-master + params: + - name: context + value: "server-b" + - name: image-name + value: "server-b" + - name: version + value: "$(inputs.params.master-branch)" + - name: build-and-push-d + taskRef: + name: build-and-push + runAfter: + - clone-master + workspaces: + - name: source + workspace: workspace-master + params: + - name: context + value: "server-d" + - name: image-name + value: "server-d" + - name: version + value: "$(inputs.params.master-branch)" + - name: clone-experimental + taskRef: + name: git-clone + workspaces: + - name: output + workspace: workspace-experimental + params: + - name: url + value: $(inputs.params.git-url) + - name: revision + value: $(inputs.params.experimental-branch) + - name: build-and-push-b-experimental + taskRef: + name: build-and-push + workspaces: + - name: source + workspace: workspace-experimental + runAfter: + - clone-experimental + params: + - name: context + value: "server-b" + - name: image-name + value: "server-b" + - name: version + value: "$(inputs.params.experimental-branch)" + - name: deploy-infra + taskRef: + name: execute-yaml + workspaces: + - name: source + workspace: workspace-master + runAfter: + - build-and-push-b-experimental + - build-and-push-d + - build-and-push-a + - build-and-push-b-stable + params: + - name: yaml-location + value: "infra.yaml" + - name: execute-yaml #@TODO make it so that the delete can be skipped if error + taskRef: + name: execute-yaml + workspaces: + - name: source + workspace: workspace-master + runAfter: + - deploy-infra \ No newline at end of file diff --git a/Tekton/resources/.DS_Store b/Tekton/resources/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/Tekton/resources/.DS_Store differ diff --git a/Tekton/resources/create-repo-webhook.yaml b/Tekton/resources/create-repo-webhook.yaml new file mode 100644 index 0000000..7a059a4 --- /dev/null +++ b/Tekton/resources/create-repo-webhook.yaml @@ -0,0 +1,28 @@ +--- +# https://medium.com/@nikhilthomas1/cloud-native-cicd-on-openshift-with-openshift-pipelines-tektoncd-pipelines-part-3-github-1db6dd8e8ca7 +apiVersion: tekton.dev/v1alpha1 +kind: TaskRun +metadata: + name: create-repo-webhook + namespace: tekton-pipeline-istio-project-1 +spec: + taskRef: + name: create-webhook + inputs: + params: + - name: GitHubOrg + value: "beppevanrolleghem" + - name: GitHubUser + value: "beppevanrolleghem" + - name: GitHubRepo + value: "cicdTest" + - name: GitHubSecretName + value: webhook-secret + - name: GitHubAccessTokenKey + value: token + - name: GitHubSecretStringKey + value: secret + - name: ExternalDomain + value: 35.233.93.220 + timeout: 1000s + serviceAccount: tekton-triggers-createwebhook \ No newline at end of file diff --git a/Tekton/resources/create-webhook.yaml b/Tekton/resources/create-webhook.yaml new file mode 100644 index 0000000..157f2d0 --- /dev/null +++ b/Tekton/resources/create-webhook.yaml @@ -0,0 +1,51 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: Task +metadata: + name: create-webhook + namespace: tekton-pipeline-istio-project-1 +spec: + volumes: + - name: github-secret + secret: + secretName: $(inputs.params.GitHubSecretName) + inputs: + params: + - name: ExternalDomain + description: "The external domain for the EventListener e.g. `$(inputs.params.EventListenerName)..nip.io`" + - name: GitHubUser + description: "The GitHub user" + - name: GitHubRepo + description: "The GitHub repo where the webhook will be created" + - name: GitHubOrg + description: "The GitHub organization where the webhook will be created" + - name: GitHubSecretName + description: "The Secret name for GitHub access token. This is always mounted and must exist" + - name: GitHubAccessTokenKey + description: "The GitHub access token key name" + - name: GitHubSecretStringKey + description: "The GitHub secret string key name" + - name: GitHubDomain + description: "The GitHub domain. Override for GitHub Enterprise" + default: "github.com" + - name: WebhookEvents + description: "List of events the webhook will send notifications for" + default: '[\"push\",\"pull_request\"]' + steps: + - name: create-webhook + image: pstauffer/curl:latest + volumeMounts: + - name: github-secret + mountPath: /var/secret + command: + - sh + args: + - -ce + - | + set -e + echo "Create Webhook" + if [ $(inputs.params.GitHubDomain) = "github.com" ];then + curl -v -d "{\"name\": \"web\",\"active\": true,\"events\": $(inputs.params.WebhookEvents),\"config\": {\"url\": \"$(inputs.params.ExternalDomain)\",\"content_type\": \"json\",\"insecure_ssl\": \"1\" ,\"secret\": \"$(cat /var/secret/$(inputs.params.GitHubSecretStringKey))\"}}" -X POST -u $(inputs.params.GitHubUser):$(cat /var/secret/$(inputs.params.GitHubAccessTokenKey)) -L https://api.github.com/repos/$(inputs.params.GitHubOrg)/$(inputs.params.GitHubRepo)/hooks + else + curl -d "{\"name\": \"web\",\"active\": true,\"events\": $(inputs.params.WebhookEvents),\"config\": {\"url\": \"$(inputs.params.ExternalDomain)/\",\"content_type\": \"json\",\"insecure_ssl\": \"1\" ,\"secret\": \"$(cat /var/secret/$(inputs.params.GitHubSecretStringKey))\"}}" -X POST -u $(inputs.params.GitHubUser):$(cat /var/secret/$(inputs.params.GitHubAccessTokenKey)) -L https://$(inputs.params.GitHubDomain)/api/v3/repos/$(inputs.params.GitHubOrg)/$(inputs.params.GitHubRepo)/hooks + fi \ No newline at end of file diff --git a/Tekton/resources/experimental-pvc.yaml b/Tekton/resources/experimental-pvc.yaml new file mode 100644 index 0000000..172588b --- /dev/null +++ b/Tekton/resources/experimental-pvc.yaml @@ -0,0 +1,12 @@ + +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: workspace-pvc-experimental +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi \ No newline at end of file diff --git a/Tekton/resources/master-pvc.yaml b/Tekton/resources/master-pvc.yaml new file mode 100644 index 0000000..16c33f5 --- /dev/null +++ b/Tekton/resources/master-pvc.yaml @@ -0,0 +1,12 @@ + +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: master-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi \ No newline at end of file diff --git a/Tekton/resources/namespace.yaml b/Tekton/resources/namespace.yaml new file mode 100644 index 0000000..c61132f --- /dev/null +++ b/Tekton/resources/namespace.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: tekton-pipeline-istio-project-1 + labels: + istio-injection: enabled #zorgt voor auto sidecar injection \ No newline at end of file diff --git a/Tekton/resources/secrets.yaml b/Tekton/resources/secrets.yaml new file mode 100644 index 0000000..01e7b6b --- /dev/null +++ b/Tekton/resources/secrets.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: github-secret + namespace: tekton-pipeline-istio-project-1 +stringData: + token: GITHUBSECRETTOKEN + secret: random-string-data \ No newline at end of file diff --git a/Tekton/runs/.DS_Store b/Tekton/runs/.DS_Store new file mode 100644 index 0000000..eea73ac Binary files /dev/null and b/Tekton/runs/.DS_Store differ diff --git a/Tekton/runs/pipeline/.DS_Store b/Tekton/runs/pipeline/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/Tekton/runs/pipeline/.DS_Store differ diff --git a/Tekton/runs/pipeline/pipelineRun.yaml b/Tekton/runs/pipeline/pipelineRun.yaml new file mode 100644 index 0000000..1794ace --- /dev/null +++ b/Tekton/runs/pipeline/pipelineRun.yaml @@ -0,0 +1,16 @@ +apiVersion: tekton.dev/v1alpha1 +kind: PipelineRun +metadata: + name: application-pipeline-run + namespace: tekton-pipeline-istio-project-1 +spec: + serviceAccountName: service-acc + pipelineRef: + name: application-pipeline + resources: + - name: git-master + resourceRef: + name: git-master + - name: git-experimental + resourceRef: + name: git-experimental diff --git a/Tekton/runs/task/create-repo-webhook.yaml b/Tekton/runs/task/create-repo-webhook.yaml new file mode 100644 index 0000000..9e4a10a --- /dev/null +++ b/Tekton/runs/task/create-repo-webhook.yaml @@ -0,0 +1,28 @@ +--- +# https://medium.com/@nikhilthomas1/cloud-native-cicd-on-openshift-with-openshift-pipelines-tektoncd-pipelines-part-3-github-1db6dd8e8ca7 +apiVersion: tekton.dev/v1alpha1 +kind: TaskRun +metadata: + name: create-repo-webhook + #namespace: stage-tekton-pipeline +spec: + taskRef: + name: create-webhook + inputs: + params: + - name: GitHubOrg + value: "beppevanrolleghem" + - name: GitHubUser + value: "beppevanrolleghem" + - name: GitHubRepo + value: "cicdTest" + - name: GitHubSecretName + value: webhook-secret + - name: GitHubAccessTokenKey + value: token + - name: GitHubSecretStringKey + value: secret + - name: ExternalDomain + value: "ingress.llocal.host" + timeout: 1000s + serviceAccountName: service-acc \ No newline at end of file diff --git a/Tekton/service-accounts/.DS_Store b/Tekton/service-accounts/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/Tekton/service-accounts/.DS_Store differ diff --git a/Tekton/service-accounts/cluster-role-binding.yaml b/Tekton/service-accounts/cluster-role-binding.yaml new file mode 100644 index 0000000..392c0b7 --- /dev/null +++ b/Tekton/service-accounts/cluster-role-binding.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: allow-creation-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: allow-creation +subjects: + - kind: ServiceAccount + name: service-acc + namespace: default \ No newline at end of file diff --git a/Tekton/service-accounts/cluster-role.yaml b/Tekton/service-accounts/cluster-role.yaml new file mode 100644 index 0000000..6a6e1fa --- /dev/null +++ b/Tekton/service-accounts/cluster-role.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: allow-creation +rules: + - apiGroups: + - "" + - "apps" + - "deploy" + - "rbac.authorization.k8s.io" + - "networking.k8s.io" + - "extensions" + - "tekton.dev" +# deze zullen we ook moeten aanpassen elke pipeline die we maken, maar, deze pipelines zijn nu specifiek per branch, dus dit zou geen probleem leveren. + resources: + - pods + - serviceaccounts + - namespaces + - services + - deployments + - deployments.apps + - clusterroles + - roles + - clusterrolebindings + - rolebindings + - ingresses + - eventlisteners + - triggerbindings + - triggertemplates + - configmaps + - secrets + - pipelineruns + - pipelineresources + - taskruns + verbs: + - list + - watch + - get + - create + - update + - patch + - delete \ No newline at end of file diff --git a/Tekton/service-accounts/service-account.yaml b/Tekton/service-accounts/service-account.yaml new file mode 100644 index 0000000..e2396f8 --- /dev/null +++ b/Tekton/service-accounts/service-account.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: service-acc +secrets: + - name: regcred #docker registry credentials \ No newline at end of file diff --git a/Tekton/tasks/build-and-push.yaml b/Tekton/tasks/build-and-push.yaml new file mode 100644 index 0000000..3e9ac51 --- /dev/null +++ b/Tekton/tasks/build-and-push.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: Task +metadata: + name: build-and-push +spec: + params: + - name: context + description: The path to the build context, used by Kaniko - within the workspace + default: . + type: string + - name: image-name + description: dockerhub url + type: string + - name: version + description: image-version (for instance latest or beta) + type: string + workspaces: + - name: source + mountpath: /source + steps: + - name: build-and-push + image: gcr.io/kaniko-project/executor + env: + - name: "DOCKER_CONFIG" + value: "/tekton/home/.docker/" + command: + - /kaniko/executor + args: + - "--dockerfile=/source/$(params.context)/dockerfile" + - "--destination=beppev/$(params.image-name):$(params.version)" + - "--context=/source/$(params.context)/" \ No newline at end of file diff --git a/Tekton/tasks/create-webhook.yaml b/Tekton/tasks/create-webhook.yaml new file mode 100644 index 0000000..0a92f18 --- /dev/null +++ b/Tekton/tasks/create-webhook.yaml @@ -0,0 +1,51 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: Task +metadata: + name: create-webhook + #namespace: stage-tekton-pipeline +spec: + volumes: + - name: github-secret + secret: + secretName: $(inputs.params.GitHubSecretName) + inputs: + params: + - name: ExternalDomain + description: "The external domain for the EventListener e.g. `$(inputs.params.EventListenerName)..nip.io`" + - name: GitHubUser + description: "The GitHub user" + - name: GitHubRepo + description: "The GitHub repo where the webhook will be created" + - name: GitHubOrg + description: "The GitHub organization where the webhook will be created" + - name: GitHubSecretName + description: "The Secret name for GitHub access token. This is always mounted and must exist" + - name: GitHubAccessTokenKey + description: "The GitHub access token key name" + - name: GitHubSecretStringKey + description: "The GitHub secret string key name" + - name: GitHubDomain + description: "The GitHub domain. Override for GitHub Enterprise" + default: "github.com" + - name: WebhookEvents + description: "List of events the webhook will send notifications for" + default: '[\"push\",\"pull_request\"]' + steps: + - name: create-webhook + image: pstauffer/curl:latest + volumeMounts: + - name: github-secret + mountPath: /var/secret + command: + - sh + args: + - -ce + - | + set -e + echo "Create Webhook" + if [ $(inputs.params.GitHubDomain) = "github.com" ];then + curl -v -d "{\"name\": \"web\",\"active\": true,\"events\": $(inputs.params.WebhookEvents),\"config\": {\"url\": \"https://$(inputs.params.ExternalDomain)\",\"content_type\": \"json\",\"insecure_ssl\": \"1\" ,\"secret\": \"$(cat /var/secret/$(inputs.params.GitHubSecretStringKey))\"}}" -X POST -u $(inputs.params.GitHubUser):$(cat /var/secret/$(inputs.params.GitHubAccessTokenKey)) -L https://api.github.com/repos/$(inputs.params.GitHubOrg)/$(inputs.params.GitHubRepo)/hooks + else + curl -d "{\"name\": \"web\",\"active\": true,\"events\": $(inputs.params.WebhookEvents),\"config\": {\"url\": \"https://$(inputs.params.ExternalDomain)/\",\"content_type\": \"json\",\"insecure_ssl\": \"1\" ,\"secret\": \"$(cat /var/secret/$(inputs.params.GitHubSecretStringKey))\"}}" -X POST -u $(inputs.params.GitHubUser):$(cat /var/secret/$(inputs.params.GitHubAccessTokenKey)) -L https://$(inputs.params.GitHubDomain)/api/v3/repos/$(inputs.params.GitHubOrg)/$(inputs.params.GitHubRepo)/hooks + fi \ No newline at end of file diff --git a/Tekton/tasks/execute-yaml.yaml b/Tekton/tasks/execute-yaml.yaml new file mode 100644 index 0000000..2fd6950 --- /dev/null +++ b/Tekton/tasks/execute-yaml.yaml @@ -0,0 +1,24 @@ + +--- +apiVersion: tekton.dev/v1alpha1 +kind: Task +metadata: + name: execute-yaml + #namespace: stage-tekton-pipeline +spec: + params: + - name: yaml-location + default: deploy.yaml + - name: command + default: apply + workspaces: + - name: source + mountpath: /source + steps: + - name: deploy-new-app + image: lachlanevenson/k8s-kubectl + command: ["kubectl"] + args: + - "$(params.command)" + - "-f" + - "/source/$(params.yaml-location)" \ No newline at end of file diff --git a/Tekton/tasks/git-clone.yaml b/Tekton/tasks/git-clone.yaml new file mode 100644 index 0000000..b38e1dd --- /dev/null +++ b/Tekton/tasks/git-clone.yaml @@ -0,0 +1,72 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: Task +metadata: + name: git-clone +spec: + workspaces: + - name: output + description: workspace the repo will be cloned into + params: + - name: url + description: git url to clone + type: string + - name: revision + description: git revision to checkout (branch, tag, sha, ref…) + type: string + default: master + - name: submodules + description: defines if the resource should initialize and fetch the submodules + type: string + default: "true" + - name: depth + description: performs a shallow clone where only the most recent commit(s) will be fetched + type: string + default: "1" + - name: sslVerify + description: defines if http.sslVerify should be set to true or false in the global git config + type: string + default: "true" + - name: subdirectory + description: subdirectory inside the "output" workspace to clone the git repo into + type: string + default: "src" + - name: deleteExisting + description: clean out the contents of the repo's destination directory (if it already exists) before trying to clone the repo there + type: string + default: "true" + results: + - name: commit + description: The precise commit SHA that was fetched by this Task + steps: + - name: clone + image: gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:latest + script: | + CHECKOUT_DIR="$(workspaces.output.path)" + cleandir() { + if [[ -d "$CHECKOUT_DIR" ]] ; then + rm -rf "$CHECKOUT_DIR"/* + rm -rf "$CHECKOUT_DIR"/.[!.]* + rm -rf "$CHECKOUT_DIR"/..?* + fi + } + if [[ "$(inputs.params.deleteExisting)" == "true" ]] ; then + cleandir + ls -lah "$CHECKOUT_DIR" + fi + /ko-app/git-init \ + -url "$(inputs.params.url)" \ + -revision "$(inputs.params.revision)" \ + -path "$CHECKOUT_DIR" \ + -sslVerify "$(inputs.params.sslVerify)" \ + -submodules "$(inputs.params.submodules)" \ + -depth "$(inputs.params.depth)" + cd "$CHECKOUT_DIR" + RESULT_SHA="$(git rev-parse HEAD | tr -d '\n')" + EXIT_CODE="$?" + if [ "$EXIT_CODE" != 0 ] + then + exit $EXIT_CODE + fi + # Make sure we don't add a trailing newline to the result! + echo -n "$RESULT_SHA" > $(results.commit.path) \ No newline at end of file diff --git a/Tekton/triggers/event-listener.yaml b/Tekton/triggers/event-listener.yaml new file mode 100644 index 0000000..14a2e16 --- /dev/null +++ b/Tekton/triggers/event-listener.yaml @@ -0,0 +1,36 @@ + +--- +apiVersion: tekton.dev/v1alpha1 +kind: EventListener +metadata: + name: github-event-listener +spec: + serviceAccountName: service-acc + triggers: + - name: github + # interceptors: + # - github: + # eventTypes: + # - pull_request + # - push + bindings: + - name: github-trigger-binding + template: + name: github-trigger-template + +--- +apiVersion: v1 +kind: Service +metadata: + name: manual-service +spec: + ports: + - name: http-listener + port: 8080 + protocol: TCP + targetPort: 8080 + selector: + app.kubernetes.io/managed-by: EventListener + app.kubernetes.io/part-of: Triggers + eventlistener: github-event-listener + type: LoadBalancer \ No newline at end of file diff --git a/Tekton/triggers/trigger-binding.yaml b/Tekton/triggers/trigger-binding.yaml new file mode 100644 index 0000000..c1d7952 --- /dev/null +++ b/Tekton/triggers/trigger-binding.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: TriggerBinding +metadata: + name: github-trigger-binding + #namespace: stage-tekton-pipeline +spec: + params: + - name: gitrevision + value: $(body.repository.default_branch) + - name: gitrepositoryurl + value: $(body.repository.clone_url) + # - name: prurl + # value: $(body.pull_request.html_url) + # - name: repo + # value: $(body.pull_request.base.repo.full_name) + # - name: source + # value: github \ No newline at end of file diff --git a/Tekton/triggers/trigger-template.yaml b/Tekton/triggers/trigger-template.yaml new file mode 100644 index 0000000..b3f9a58 --- /dev/null +++ b/Tekton/triggers/trigger-template.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: TriggerTemplate +metadata: + name: github-trigger-template + #namespace: stage-tekton-pipeline +spec: + params: + - name: gitrevision + description: The git revision + default: master + - name: gitrepositoryurl + description: The git repository url + resourcetemplates: + - apiVersion: tekton.dev/v1alpha1 + kind: PipelineRun + metadata: + name: application-pipeline-run + #namespace: stage-tekton-pipeline + spec: + serviceAccountName: service-acc + pipelineRef: + name: application-pipeline #gebruik dit om de pipeline aan te passen naar andere versies, zolang ze zich in dezelfde #namespace bevinden kunnen we deze pipeline hergebruiken om deployments op de cluster uit te voeren. service-mesh agnostisch. + workspaces: + - name: workspace-master + persistentVolumeClaim: + claimName: workspace-pvc-master + - name: workspace-experimental + persistentVolumeClaim: + claimName: workspace-pvc-experimental + params: + - name: git-url + value: $(inputs.params.gitrepositoryurl) + - name: branch + value: $(inputs.params.gitrevision) \ No newline at end of file diff --git a/Utilities/event-listener-debug.yaml b/Utilities/event-listener-debug.yaml new file mode 100644 index 0000000..3b5ed7c --- /dev/null +++ b/Utilities/event-listener-debug.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shell-demo +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/managed-by: EventListener + app.kubernetes.io/part-of: Triggers + eventlistener: github-event-listener + template: + metadata: + labels: + app.kubernetes.io/managed-by: EventListener + app.kubernetes.io/part-of: Triggers + eventlistener: github-event-listener + spec: + containers: + - name: network-multitool + image: praqma/network-multitool + imagePullPolicy: "Always" + ports: + - containerPort: 8080 \ No newline at end of file