Skip to content

Commit

Permalink
automate dev environment build
Browse files Browse the repository at this point in the history
  • Loading branch information
Zenara Daley committed Apr 24, 2018
1 parent 97d7119 commit 58f5eb4
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,7 @@ dep-ensure:
dep version || go get -u github.com/golang/dep/cmd/dep
dep ensure -v
dep prune -v

.PHONY: dev-env
dev-env:
@./hack/build-dev-env.sh
26 changes: 26 additions & 0 deletions docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,32 @@
This document explains how to get started with developing for NGINX Ingress controller.
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

The build uses dependencies in the `vendor` directory, which
Expand Down
46 changes: 46 additions & 0 deletions hack/build-dev-env.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 58f5eb4

Please sign in to comment.