diff --git a/.travis.yml b/.travis.yml index cc424a90..fbd486e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,6 +51,13 @@ jobs: - sudo apt-get install socat - travis_wait 10 make travis-prepare - travis_wait 45 make build e2e + - stage: e2e + name: "Jenkins Operator Helm Chart - e2e" + script: + - sudo apt-get update + - sudo apt-get install socat + - travis_wait 10 make travis-prepare + - travis_wait 45 make e2e BUILDTAGS=Helm E2E_TEST_SELECTOR='^.*Helm.*$' cache: directories: diff --git a/Makefile b/Makefile index 22846c43..fc920f1c 100644 --- a/Makefile +++ b/Makefile @@ -487,6 +487,7 @@ else curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(MINIKUBE_KUBERNETES_VERSION)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v$(MINIKUBE_VERSION)/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ curl -Lo operator-sdk https://github.com/operator-framework/operator-sdk/releases/download/v$(OPERATOR_SDK_VERSION)/operator-sdk-v$(OPERATOR_SDK_VERSION)-x86_64-linux-gnu && chmod +x operator-sdk && sudo mv operator-sdk /usr/local/bin/ + curl -Lo helm.tar.gz https://get.helm.sh/helm-v$(HELM_VERSION)-linux-amd64.tar.gz && tar xzfv helm.tar.gz && sudo mv linux-amd64/helm /usr/local/bin/ mkdir -p $(HOME)/.kube $(HOME)/.minikube touch $(KUBECONFIG) sudo minikube start --vm-driver=none --kubernetes-version=$(MINIKUBE_KUBERNETES_VERSION) diff --git a/config.base.env b/config.base.env index 75e3ee43..b117cb7c 100644 --- a/config.base.env +++ b/config.base.env @@ -9,4 +9,5 @@ NAMESPACE=default API_VERSION=v1alpha2 ALL_IN_ONE_DEPLOY_FILE_PREFIX=all-in-one GEN_CRD_API=gen-crd-api-reference-docs -IMAGE_PULL_MODE=local \ No newline at end of file +IMAGE_PULL_MODE=local +HELM_VERSION=3.1.2 \ No newline at end of file diff --git a/test/e2e/helm_test.go b/test/e2e/helm_test.go new file mode 100644 index 00000000..91967d6c --- /dev/null +++ b/test/e2e/helm_test.go @@ -0,0 +1,60 @@ +// +build Helm + +package e2e + +import ( + "fmt" + "os/exec" + "testing" + + "github.com/jenkinsci/kubernetes-operator/pkg/apis" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" + + framework "github.com/operator-framework/operator-sdk/pkg/test" + "github.com/stretchr/testify/require" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestLintHelmChart(t *testing.T) { + t.Parallel() + + cmd := exec.Command("helm", "lint", "./chart/jenkins-operator") + output, err := cmd.CombinedOutput() + require.NoError(t, err, string(output)) +} + +func TestDeployHelmChart(t *testing.T) { + // Given + t.Parallel() + ctx := framework.NewTestCtx(t) + defer ctx.Cleanup() + + namespace, err := ctx.GetNamespace() + require.NoError(t, err) + + jenkinsServiceList := &v1alpha2.JenkinsList{ + TypeMeta: metav1.TypeMeta{ + Kind: v1alpha2.Kind, + APIVersion: v1alpha2.SchemeGroupVersion.String(), + }, + } + err = framework.AddToFrameworkScheme(apis.AddToScheme, jenkinsServiceList) + require.NoError(t, err) + + jenkins := &v1alpha2.Jenkins{ + TypeMeta: v1alpha2.JenkinsTypeMeta(), + ObjectMeta: metav1.ObjectMeta{ + Name: "jenkins", + Namespace: namespace, + }, + } + + cmd := exec.Command("helm", "install", "helm", "./chart/jenkins-operator", "--namespace", namespace, "--debug", + "--set-string", fmt.Sprintf("jenkins.namespace=%s", namespace)) + output, err := cmd.CombinedOutput() + require.NoError(t, err, string(output)) + + // Then + waitForJenkinsBaseConfigurationToComplete(t, jenkins) + waitForJenkinsUserConfigurationToComplete(t, jenkins) +}