Merge pull request #2417 from Shopify/dev-up

Automate building developer environment
This commit is contained in:
k8s-ci-robot 2018-04-24 13:52:02 -07:00 committed by GitHub
commit 57c10f947c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 76 additions and 0 deletions

View file

@ -209,3 +209,7 @@ dep-ensure:
dep version || go get -u github.com/golang/dep/cmd/dep dep version || go get -u github.com/golang/dep/cmd/dep
dep ensure -v dep ensure -v
dep prune -v dep prune -v
.PHONY: dev-env
dev-env:
@./hack/build-dev-env.sh

View file

@ -3,6 +3,32 @@
This document explains how to get started with developing for NGINX Ingress controller. This document explains how to get started with developing for NGINX Ingress controller.
It includes how to build, test, and release ingress controllers. It includes how to build, test, and release ingress controllers.
## Quick Start
### Initial developer environment build
**Prequisites**: Minikube must be installed; See [releases](https://github.com/kubernetes/minikube/releases) for installation instructions.
If you are using **MacOS** and deploying to **minikube**, the following command will build the local nginx controller container image and deploy the ingress controller onto a minikube cluster with RBAC enabled in the namespace `ingress-nginx`:
```
$ make dev-env
```
### Updating the deployment
The nginx controller container image can be rebuilt using:
```
$ ARCH=amd64 TAG=dev REGISTRY=$USER/ingress-controller make build container
```
The image will only be used by pods created after the rebuild. To delete old pods which will cause new ones to spin up:
```
$ kubectl get pods -n ingress-nginx
$ kubectl delete pod -n ingress-nginx nginx-ingress-controller-<unique-pod-id>
```
## Dependencies ## Dependencies
The build uses dependencies in the `vendor` directory, which The build uses dependencies in the `vendor` directory, which

46
hack/build-dev-env.sh Executable file
View file

@ -0,0 +1,46 @@
#!/bin/bash
# Copyright 2018 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
NAMESPACE=ingress-nginx
minikube start
eval $(minikube docker-env)
echo "[dev-env] installing dependencies"
go get -u github.com/golang/dep
dep ensure
echo "[dev-env] building container"
ARCH=amd64 TAG=dev REGISTRY=$USER/ingress-controller make build container
echo "[dev-env] installing kubectl"
brew install kubectl
echo "[dev-env] deploying NGINX Ingress controller in namespace $NAMESPACE"
cat ./deploy/namespace.yaml | kubectl apply --namespace=$NAMESPACE -f -
cat ./deploy/default-backend.yaml | kubectl apply --namespace=$NAMESPACE -f -
cat ./deploy/configmap.yaml | kubectl apply --namespace=$NAMESPACE -f -
cat ./deploy/tcp-services-configmap.yaml | kubectl apply --namespace=$NAMESPACE -f -
cat ./deploy/udp-services-configmap.yaml | kubectl apply --namespace=$NAMESPACE -f -
cat ./deploy/rbac.yaml | kubectl apply --namespace=$NAMESPACE -f -
cat ./deploy/with-rbac.yaml | kubectl apply --namespace=$NAMESPACE -f -
echo "updating image..."
kubectl set image \
deployments \
--namespace ingress-nginx \
--selector app=ingress-nginx \
nginx-ingress-controller=index.docker.io/$USER/ingress-controller/nginx-ingress-controller:dev