From 9698079a02f3b1edefa20f9d0b0b774e7563f5cd Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Thu, 12 Sep 2019 09:40:09 +0200 Subject: [PATCH 1/4] #90 Fix kubernetes server url --- .../base/resources/base_configuration_configmap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go b/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go index 73a8060d..aca8b03b 100644 --- a/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go +++ b/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go @@ -114,7 +114,7 @@ if (kubernetes == null) { add = true kubernetes = new KubernetesCloud("kubernetes") } -kubernetes.setServerUrl("https://kubernetes.default") +kubernetes.setServerUrl("https://kubernetes.default.svc.cluster.local:443") kubernetes.setNamespace("%s") kubernetes.setJenkinsUrl("%s") kubernetes.setJenkinsTunnel("%s") From 56d305eeabdce0b60163d5e5b49ca1d6f386d552 Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Thu, 12 Sep 2019 14:47:58 +0200 Subject: [PATCH 2/4] #90 Add kubernetes plugin e2e tests --- cicd/jobs/k8s.jenkins | 31 ++++++++++++++++++++++++++++++ cicd/pipelines/k8s.jenkins | 17 +++++++++++++++++ test/e2e/configuration_test.go | 35 +++++++++++++++++++++++++++++++++- 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 cicd/jobs/k8s.jenkins create mode 100644 cicd/pipelines/k8s.jenkins diff --git a/cicd/jobs/k8s.jenkins b/cicd/jobs/k8s.jenkins new file mode 100644 index 00000000..4fc10fd8 --- /dev/null +++ b/cicd/jobs/k8s.jenkins @@ -0,0 +1,31 @@ +#!/usr/bin/env groovy + +pipelineJob('k8s-e2e') { + displayName('Kubernetes Plugin E2E Test') + + logRotator { + numToKeep(10) + daysToKeep(30) + } + + configure { project -> + project / 'properties' / 'org.jenkinsci.plugins.workflow.job.properties.DurabilityHintJobProperty' { + hint('PERFORMANCE_OPTIMIZED') + } + } + + definition { + cpsScm { + scm { + git { + remote { + url('https://github.com/jenkinsci/kubernetes-operator.git') + credentials('jenkins-operator') + } + branches('*/master') + } + } + scriptPath('cicd/pipelines/k8s.jenkins') + } + } +} \ No newline at end of file diff --git a/cicd/pipelines/k8s.jenkins b/cicd/pipelines/k8s.jenkins new file mode 100644 index 00000000..e671091e --- /dev/null +++ b/cicd/pipelines/k8s.jenkins @@ -0,0 +1,17 @@ +#!/usr/bin/env groovy + +def label = "k8s-e2e" +def home = "/home/jenkins" +def workspace = "${home}/workspace/build-jenkins-operator" + +podTemplate(label: label, + containers: [ + containerTemplate(name: 'alpine', image: 'alpine:3.10.2'), + ], + ) { + node(label) { + container('alpine') { + echo "its working" + } + } +} diff --git a/test/e2e/configuration_test.go b/test/e2e/configuration_test.go index 557fc1cf..09fdea35 100644 --- a/test/e2e/configuration_test.go +++ b/test/e2e/configuration_test.go @@ -5,16 +5,17 @@ import ( "fmt" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/groovy" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/bndr/gojenkins" framework "github.com/operator-framework/operator-sdk/pkg/test" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -96,6 +97,38 @@ func TestConfiguration(t *testing.T) { verifyJenkinsSeedJobs(t, client, []seedJobConfig{mySeedJob}) } +func TestPlugin(t *testing.T) { + t.Parallel() + namespace, ctx := setupTest(t) + // Deletes test namespace + defer ctx.Cleanup() + + jobID := "k8s-e2e" + + seedJobs := &[]v1alpha2.SeedJob{ + { + ID: "jenkins-operator", + CredentialID: "jenkins-operator", + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, + Targets: "cicd/jobs/k8s.jenkins", + Description: "Jenkins Operator repository", + RepositoryBranch: "master", + RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", + }, + } + + jenkins := createJenkinsCR(t, "k8s-e2e", namespace, seedJobs, v1alpha2.GroovyScripts{}, v1alpha2.ConfigurationAsCode{}) + waitForJenkinsUserConfigurationToComplete(t, jenkins) + + jenkinsClient := verifyJenkinsAPIConnection(t, jenkins) + waitForJob(t, jenkinsClient, jobID) + job, err := jenkinsClient.GetJob(jobID) + + require.NoError(t, err, job) + i, err := job.InvokeSimple(map[string]string{}) + require.NoError(t, err, i) +} + func createUserConfigurationSecret(t *testing.T, namespace string, stringData map[string]string) { userConfiguration := &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ From 4ce082cfc409728688a264eddb2d684ca42f20c4 Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Thu, 12 Sep 2019 15:56:14 +0200 Subject: [PATCH 3/4] #90 Small fixes in tests --- cicd/pipelines/k8s.jenkins | 2 +- test/e2e/configuration_test.go | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/cicd/pipelines/k8s.jenkins b/cicd/pipelines/k8s.jenkins index e671091e..8914d34c 100644 --- a/cicd/pipelines/k8s.jenkins +++ b/cicd/pipelines/k8s.jenkins @@ -11,7 +11,7 @@ podTemplate(label: label, ) { node(label) { container('alpine') { - echo "its working" + sh 'echo "Its working"' } } } diff --git a/test/e2e/configuration_test.go b/test/e2e/configuration_test.go index 09fdea35..5e1c3c5e 100644 --- a/test/e2e/configuration_test.go +++ b/test/e2e/configuration_test.go @@ -97,7 +97,7 @@ func TestConfiguration(t *testing.T) { verifyJenkinsSeedJobs(t, client, []seedJobConfig{mySeedJob}) } -func TestPlugin(t *testing.T) { +func TestPlugins(t *testing.T) { t.Parallel() namespace, ctx := setupTest(t) // Deletes test namespace @@ -127,6 +127,11 @@ func TestPlugin(t *testing.T) { require.NoError(t, err, job) i, err := job.InvokeSimple(map[string]string{}) require.NoError(t, err, i) + + build, err := job.GetLastBuild() + require.NoError(t, err) + assert.Equal(t, int64(1), build.GetBuildNumber()) + assert.True(t, build.IsGood()) } func createUserConfigurationSecret(t *testing.T, namespace string, stringData map[string]string) { From 125b4c989806b474ff372d7ef4dd493e1b84705a Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Fri, 13 Sep 2019 16:20:14 +0200 Subject: [PATCH 4/4] #90 Fix pipeline groovy script --- cicd/pipelines/k8s.jenkins | 11 +++++++---- test/e2e/configuration_test.go | 6 +++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cicd/pipelines/k8s.jenkins b/cicd/pipelines/k8s.jenkins index 8914d34c..5df55672 100644 --- a/cicd/pipelines/k8s.jenkins +++ b/cicd/pipelines/k8s.jenkins @@ -1,17 +1,20 @@ #!/usr/bin/env groovy -def label = "k8s-e2e" +def label = "k8sagent-e2e" def home = "/home/jenkins" def workspace = "${home}/workspace/build-jenkins-operator" +def workdir = "${workspace}/src/github.com/jenkinsci/kubernetes-operator/" podTemplate(label: label, containers: [ - containerTemplate(name: 'alpine', image: 'alpine:3.10.2'), + containerTemplate(name: 'alpine', image: 'alpine:3.10.2', ttyEnabled: true, command: 'cat'), ], ) { node(label) { - container('alpine') { - sh 'echo "Its working"' + stage('Run shell') { + container('alpine') { + sh 'echo "hello world"' + } } } } diff --git a/test/e2e/configuration_test.go b/test/e2e/configuration_test.go index 5e1c3c5e..7802500f 100644 --- a/test/e2e/configuration_test.go +++ b/test/e2e/configuration_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "testing" + "time" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base" @@ -128,9 +129,12 @@ func TestPlugins(t *testing.T) { i, err := job.InvokeSimple(map[string]string{}) require.NoError(t, err, i) + time.Sleep(time.Minute * 2) + + job, err = jenkinsClient.GetJob(jobID) + require.NoError(t, err, job) build, err := job.GetLastBuild() require.NoError(t, err) - assert.Equal(t, int64(1), build.GetBuildNumber()) assert.True(t, build.IsGood()) }