kubernetes-operator/website/content/en/docs/Getting Started/latest/developer-guide.md

4.3 KiB

title linkTitle weight date description
Developer Guide Developer Guide 60 2019-08-05 Jenkins Operator for developers

{{% pageinfo %}} This document explains how to setup your development environment. {{% /pageinfo %}}

Prerequisites

Clone repository and download dependencies

mkdir -p $GOPATH/src/github.com/jenkinsci
cd $GOPATH/src/github.com/jenkinsci/
git clone git@github.com:jenkinsci/kubernetes-operator.git
cd kubernetes-operator
make go-dependencies

Build and run with a minikube

Build and run Jenkins Operator locally:

make build minikube-run EXTRA_ARGS='--minikube --local'

Once minikube and Jenkins Operator are up and running, apply Jenkins custom resource:

kubectl apply -f deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml
kubectl get jenkins -o yaml
kubectl get po

Build and run with a remote Kubernetes cluster

You can also run the controller locally and make it listen to a remote Kubernetes server.

make run NAMESPACE=default KUBECTL_CONTEXT=remote-k8s EXTRA_ARGS='--kubeconfig ~/.kube/config'

Once minikube and Jenkins Operator are up and running, apply Jenkins custom resource:

kubectl --context remote-k8s --namespace default apply -f deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml
kubectl --context remote-k8s --namespace default get jenkins -o yaml
kubectl --context remote-k8s --namespace default get po

Testing

Run unit tests:

make test

Running E2E tests on Linux

Run e2e tests with minikube:

make minikube-start
eval $(minikube docker-env)
make build e2e

Run the specific e2e test:

make build e2e E2E_TEST_SELECTOR='^TestConfiguration$'

Running E2E tests on macOS

At first, you need to start minikube:

$ make minikube-start
$ eval $(minikube docker-env) 

Build a Docker image inside the provided Linux container by:

$ make indocker

Build Jenkins Operator inside a container using:

$ make build

Then exit the container and run:

make e2e

Tips & Tricks

Building docker image on minikube (for e2e tests)

To be able to work with the docker daemon on minikube machine run the following command before building an image:

eval $(minikube docker-env)

When pkg/apis/jenkinsio/*/jenkins_types.go has changed

Run:

make deepcopy-gen

Getting the Jenkins URL and basic credentials

minikube service jenkins-operator-http-<cr_name> --url
kubectl get secret jenkins-operator-credentials-<cr_name> -o 'jsonpath={.data.user}' | base64 -d
kubectl get secret jenkins-operator-credentials-<cr_name> -o 'jsonpath={.data.password}' | base64 -d

Tools

Configure environment variables

export GOPATH=/home/go # example value
export GOROOT=/usr/lib/go-1.12 # example value
export PATH=$GOPATH/bin:$PATH

goimports

go get golang.org/x/tools/cmd/goimports
cd $GOPATH/src/golang.org/x/tools/cmd/goimports
go build
go install

golint

go get -u golang.org/x/lint/golint
cd  $GOPATH/src/golang.org/x/lint/golint
go build
go install

checkmake

go get github.com/mrtazz/checkmake
cd $GOPATH/src/github.com/mrtazz/checkmake
go build
go install

staticcheck

mkdir -p $GOPATH/src/github.com/dominikh/
cd $GOPATH/src/github.com/dominikh/
git clone https://github.com/dominikh/go-tools.git
cd  $GOPATH/src/github.com/dominikh/go-tools/staticcheck
go build
go install