Pullup is a Kubernetes add-on that helps you deploy pull requests on a Kubernetes cluster based on existing resources and cleanup resources automatically when pull requests are closed or merged.
Pullup requires Kubernetes 1.7 and later which supports Custom Resource Definitions (CRD).
First, create a new namespace.
kubectl create namespace pullup
kubectl apply -f https://github.com/tommy351/pullup/blob/master/deployment/crds/webhook.yml kubectl apply -f https://github.com/tommy351/pullup/blob/master/deployment/crds/resource-set.yml
Create a new service account and RBAC if it is enabled on your Kubernetes cluster. This enables Pullup to access Pullup resources.
kubectl apply -f https://github.com/tommy351/pullup/blob/master/deployment/rbac.yml
Create deployments. This will create two deployments. One is the controller that monitoring resource changes and the other is a HTTP server receiving GitHub events.
kubectl apply -f https://github.com/tommy351/pullup/blob/master/deployment/deployment.yml
Create a new service exposing the webhook server. You may need to change the service type based on your need.
kubectl apply -f https://github.com/tommy351/pullup/blob/master/deployment/service.yml
Besides the RBAC settings you have installed in the previous section, you also have to grant access of the resources that you defined in webhooks. If your Kubernetes cluster is not RBAC enabled, you can skip this section.
You have to create
ClusterRoleBinding for all namespaces), set
["get", "create", "update"] for each kind of resources and bind the role to the pullup service account.
The following example includes
Service. See here for more details about RBAC.
--- apiVersion: rbac.authorization.k8s.io/v1 # Change this to ClusterRole to apply in all namespaces. kind: Role metadata: name: pullup-deployment rules: # Deployment - apiGroups: ["apps", "extensions"] resources: ["deployments"] verbs: ["get", "create", "update"] # Service - apiGroups: [""] resources: ["services"] verbs: ["get", "create", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 # Change this to ClusterRoleBinding to apply in all namespaces. kind: RoleBinding metadata: name: pullup-deployment # Bind to the pullup service account subjects: - kind: ServiceAccount name: pullup namespace: pullup # Refer to the role above roleRef: kind: Role name: pullup-deployment apiGroup: rbac.authorization.k8s.io
See CONTRIBUTING.md for information about setting environment.
- Merge resources using Structured Merge and Diff
- Test more kinds of resources
- End-to-end tests