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

5.4 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='--jenkins-api-hostname=$(eval minikube ip) --jenkins-api-use-nodeport=true'

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 config=config.minikube.env CONTAINER_RUNTIME=podman

config.minikube.env is the E2E test profile which provides all connection info to operator to run on minikube.

Run the specific e2e test:

make build e2e E2E_TEST_SELECTOR='^TestConfiguration$' config=config.minikube.env CONTAINER_RUNTIME=podman

If you want to run E2E tests on CRC (Code Ready Containers by OpenShift), you should use config.crc.env profile instead of config.minikube.env.

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 CONFIG=config.minikube.env

or with CRC:

make e2e CONFIG=config.crc.env

Use Docker image instead of podman (Code Ready Containers)

If you have trouble to build image with podman, you can set additional flag IMAGE_PULL_MODE to pull image from organization.

At first, edit you config.base.env and change DOCKER_ORGANIZATION to your account/organization name from hub. Next, you need to pull image to your repository:

$ make cr-build cr-snapshot-push

When image will be uploaded to repository, you can now write this command to run E2E tests:

$ make e2e E2E_TEST_SELECTOR='^TestConfiguration$' config=config.crc.env  IMAGE_PULL_MODE=remote

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