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
- operator_sdk version v0.8.1
- git
- go version v1.12+
- goimports, golint, checkmake and staticcheck
- minikube version v1.1.0+ (preferred Hypervisor - virtualbox)
- docker version 17.03+
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 CR=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 CR=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 USE_ORGANIZATION 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 USE_ORGANIZATION=true
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