update to go 1.22 and operator-sdk 1.35 (#1094)

Co-authored-by: brokenpip3 <brokenpip3@gmail.com>
Co-authored-by: Ansh Garhewal <me@anshdevs.in>
Co-authored-by: xmbhasin <xmbhasin@users.noreply.github.com>
This commit is contained in:
Manish Bhasin
2025-03-30 16:37:15 +02:00
committed by GitHub
co-authored by brokenpip3 Ansh Garhewal xmbhasin
parent 1ec83b9de9
commit 9c09db8031
83 changed files with 3759 additions and 3879 deletions
+2 -2
View File
@@ -33,7 +33,7 @@ diag() {
--set namespace=${DETIK_CLIENT_NAMESPACE} \
--set operator.image=${OPERATOR_IMAGE} \
--set jenkins.latestPlugins=true \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.image="jenkins/jenkins:2.479.2-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.backup.makeBackupBeforePodDeletion=false \
--set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \
@@ -154,7 +154,7 @@ diag() {
--set namespace=${DETIK_CLIENT_NAMESPACE} \
--set operator.image=${OPERATOR_IMAGE} \
--set jenkins.latestPlugins=true \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.image="jenkins/jenkins:2.479.2-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.backup.makeBackupBeforePodDeletion=false \
--set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \
+7 -3
View File
@@ -29,7 +29,7 @@ setup() {
--set operator.image=${OPERATOR_IMAGE} \
--set jenkins.latestPlugins=true \
--set jenkins.nodeSelector.batstest=yep \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.image="jenkins/jenkins:2.479.2-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.backup.makeBackupBeforePodDeletion=false \
--set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \
@@ -89,7 +89,11 @@ setup() {
@test "2.8 Helm: check backup" {
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
sleep 120
run ${KUBECTL} logs -l app.kubernetes.io/name=jenkins-operator --tail 10000
# use --tail -1 to get all logs and reduce flakiness
# using -l to select a label usually sets --tail 10
run ${KUBECTL} logs -l app.kubernetes.io/name=jenkins-operator --tail -1
assert_success
assert_output --partial "Performing backup '1'"
assert_output --partial "Backup completed '1', updating status"
@@ -103,7 +107,7 @@ setup() {
--set operator.image=${OPERATOR_IMAGE} \
--set jenkins.latestPlugins=true \
--set jenkins.nodeSelector.batstest=yep \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.image="jenkins/jenkins:2.479.2-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.lifecycle.preStop.exec.command="{echo bats-test}" \
--set jenkins.backup.makeBackupBeforePodDeletion=false \
+2 -2
View File
@@ -29,7 +29,7 @@ setup() {
--set namespace=${DETIK_CLIENT_NAMESPACE} \
--set operator.image=${OPERATOR_IMAGE} \
--set jenkins.latestPlugins=true \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.image="jenkins/jenkins:2.479.2-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.backup.makeBackupBeforePodDeletion=true \
--set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \
@@ -90,7 +90,7 @@ setup() {
--set namespace=${DETIK_CLIENT_NAMESPACE} \
--set operator.image=${OPERATOR_IMAGE} \
--set jenkins.latestPlugins=true \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.image="jenkins/jenkins:2.479.2-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.backup.makeBackupBeforePodDeletion=true \
--set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \
+19 -7
View File
@@ -23,14 +23,26 @@ import (
const e2e = "e2e"
// Plugin versions should be the same as in
// github.com/jenkinsci/kubernetes-operator/pkg/plugins/base_plugins.go
const (
configurationAsCodePlugin = "configuration-as-code:1932.v75cb_b_f1b_698d"
gitPlugin = "git:5.7.0"
jobDslPlugin = "job-dsl:1.89"
kubernetesPlugin = "kubernetes:4295.v7fa_01b_309c95"
kubernetesCredentialsProviderPlugin = "kubernetes-credentials-provider:1.262.v2670ef7ea_0c5"
// Depends on workflow-job which should be automatically downloaded
// Hardcoding the workflow-job version leads to frequent breakage
workflowAggregatorPlugin = "workflow-aggregator:600.vb_57cdd26fdd7"
)
var expectedBasePluginsList = []plugins.Plugin{
plugins.Must(plugins.New("configuration-as-code:1850.va_a_8c31d3158b_")),
plugins.Must(plugins.New("git:5.5.2")),
plugins.Must(plugins.New("kubernetes:4295.v7fa_01b_309c95")),
plugins.Must(plugins.New("kubernetes-credentials-provider:1.262.v2670ef7ea_0c5")),
plugins.Must(plugins.New("job-dsl:1.89")),
plugins.Must(plugins.New("workflow-aggregator:600.vb_57cdd26fdd7")),
plugins.Must(plugins.New("workflow-job:1436.vfa_244484591f")),
plugins.Must(plugins.New(configurationAsCodePlugin)),
plugins.Must(plugins.New(gitPlugin)),
plugins.Must(plugins.New(jobDslPlugin)),
plugins.Must(plugins.New(kubernetesPlugin)),
plugins.Must(plugins.New(kubernetesCredentialsProviderPlugin)),
plugins.Must(plugins.New(workflowAggregatorPlugin)),
}
func createUserConfigurationSecret(namespace string, stringData map[string]string) {
+1 -1
View File
@@ -103,7 +103,7 @@ var _ = Describe("Jenkins controller", func() {
jenkinsClient, cleanUpFunc := verifyJenkinsAPIConnection(jenkins, namespace.Name)
defer cleanUpFunc()
checkIfAuthorizationStrategyUnsecuredIsSet(jenkinsClient)
err := jenkinsClient.SafeRestart()
err := jenkinsClient.SafeRestart(context.TODO())
Expect(err).NotTo(HaveOccurred())
waitForJenkinsSafeRestart(jenkinsClient)
checkIfAuthorizationStrategyUnsecuredIsSet(jenkinsClient)
+2 -2
View File
@@ -75,7 +75,7 @@ func createJenkinsCRSafeRestart(name, namespace string, seedJob *[]v1alpha2.Seed
},
},
ReadinessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
Port: intstr.FromString("http"),
@@ -89,7 +89,7 @@ func createJenkinsCRSafeRestart(name, namespace string, seedJob *[]v1alpha2.Seed
PeriodSeconds: int32(10),
},
LivenessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
Port: intstr.FromString("http"),
+3 -3
View File
@@ -9,7 +9,7 @@ import (
"github.com/onsi/ginkgo"
corev1 "k8s.io/api/core/v1"
"k8s.io/api/events/v1beta1"
eventsv1 "k8s.io/api/events/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/kubernetes"
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -81,13 +81,13 @@ func printOperatorLogs(namespace string) {
}
}
func getKubernetesEvents(namespace string) ([]v1beta1.Event, error) {
func getKubernetesEvents(namespace string) ([]eventsv1.Event, error) {
listOptions := &client.ListOptions{
Limit: kubernetesEventsLimit,
Namespace: namespace,
}
events := &v1beta1.EventList{}
events := &eventsv1.EventList{}
err := K8sClient.List(context.TODO(), events, listOptions)
if err != nil {
return nil, err
+1 -1
View File
@@ -98,7 +98,7 @@ func setupPortForwardToPod(namespace, podName string, podPort int) (port int, cl
close(stopCh)
}
return
return port, cleanUpFunc, waitFunc, portForwardFunc, err
}
func portForwardToPod(req portForwardToPodRequest) error {
+7 -7
View File
@@ -25,12 +25,12 @@ func waitForJobCreation(jenkinsClient client.Jenkins, jobID string) {
var err error
Eventually(func() (bool, error) {
_, err = jenkinsClient.GetJob(jobID)
_, err = jenkinsClient.GetJob(context.TODO(), jobID)
if err != nil {
return false, err
}
return err == nil, err
}, time.Minute*3, time.Second*2).Should(BeTrue())
}, time.Duration(110)*retryInterval, retryInterval).Should(BeTrue())
Expect(err).NotTo(HaveOccurred())
}
@@ -38,9 +38,9 @@ func waitForJobCreation(jenkinsClient client.Jenkins, jobID string) {
func verifyJobBuildsAfterRestoreBackup(jenkinsClient client.Jenkins, jobID string) {
By("checking if job builds after restoring backup")
job, err := jenkinsClient.GetJob(jobID)
job, err := jenkinsClient.GetJob(context.TODO(), jobID)
Expect(err).NotTo(HaveOccurred())
build, err := job.GetLastBuild()
build, err := job.GetLastBuild(context.TODO())
Expect(err).NotTo(HaveOccurred())
Expect(build.GetBuildNumber()).To(Equal(int64(1)))
@@ -54,7 +54,7 @@ func createPVC(namespace string) {
},
Spec: corev1.PersistentVolumeClaimSpec{
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
Resources: corev1.ResourceRequirements{
Resources: corev1.VolumeResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("1Gi"),
},
@@ -117,7 +117,7 @@ func createJenkinsWithBackupAndRestoreConfigured(name, namespace string) *v1alph
},
},
ReadinessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
Port: intstr.FromString("http"),
@@ -131,7 +131,7 @@ func createJenkinsWithBackupAndRestoreConfigured(name, namespace string) *v1alph
PeriodSeconds: int32(5),
},
LivenessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
Port: intstr.FromString("http"),
+16 -11
View File
@@ -68,7 +68,7 @@ func verifyJenkinsSeedJobs(jenkinsClient jenkinsclient.Jenkins, seedJobs []seedJ
for _, requireJobName := range seedJob.JobNames {
err = try.Until(func() (end bool, err error) {
_, err = jenkinsClient.GetJob(requireJobName)
_, err = jenkinsClient.GetJob(context.TODO(), requireJobName)
return err == nil, err
}, time.Second*2, time.Minute*2)
Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Jenkins job '%s' not created by seed job ID '%s'\n", requireJobName, seedJob.ID))
@@ -186,7 +186,7 @@ if (jobRef == null) {
}
if (!jobRef.getDisplayName().equals("Seed Job from {{ .ID }}")) {
throw new Exception("Display name is not equal")
throw new Exception("Display name is not equal")
}
if (jobRef.getScm() == null) {
@@ -194,7 +194,7 @@ if (jobRef.getScm() == null) {
}
if (jobRef.getScm().getBranches().find { val -> val.getName() == "{{ .RepositoryBranch }}" } == null) {
throw new Exception("Specified SCM branch not found")
throw new Exception("Specified SCM branch not found")
}
if(jobRef.getScm().getRepositories().find { it.getURIs().find { uri -> uri.toString().equals("https://github.com/jenkinsci/kubernetes-operator.git") } } == null) {
@@ -221,7 +221,7 @@ if (jobRef.getTriggers().find { key, val -> val.getClass().getSimpleName() == "T
for (BuildStep step : jobRef.getBuildersList()) {
if (!step.getTargets().equals("{{ .Targets }}")) {
throw new Exception("Targets are not equals'")
throw new Exception("Targets are not equals'")
}
if (!step.getAdditionalClasspath().equals(null)) {
@@ -244,11 +244,11 @@ for (BuildStep step : jobRef.getBuildersList()) {
func verifyJobCanBeRun(jenkinsClient jenkinsclient.Jenkins, jobID string) {
By("retrieving created Jenkins job")
job, err := jenkinsClient.GetJob(jobID)
job, err := jenkinsClient.GetJob(context.TODO(), jobID)
Expect(err).To(BeNil())
By("running Jenkins job")
_, err = job.InvokeSimple(map[string]string{})
_, err = job.InvokeSimple(context.TODO(), map[string]string{})
Expect(err).To(BeNil())
// FIXME: waitForJobToFinish use
@@ -265,12 +265,17 @@ func verifyJobHasBeenRunCorrectly(jenkinsClient jenkinsclient.Jenkins, jobID str
)
Eventually(func() (bool, error) {
job, err = jenkinsClient.GetJob(jobID)
Expect(err).To(BeNil())
build, err = job.GetLastBuild()
Expect(err).To(BeNil())
job, err = jenkinsClient.GetJob(context.TODO(), jobID)
if err != nil {
return false, err
}
build, err = job.GetLastBuild(context.TODO())
if err != nil {
return false, err
}
By("evaluating correctness of the outcome")
return build.IsGood(), err
return build.IsGood(context.TODO()), err
}, time.Duration(110)*retryInterval, retryInterval).Should(BeTrue())
}
+2 -5
View File
@@ -6,7 +6,7 @@ import (
"testing"
"github.com/jenkinsci/kubernetes-operator/api/v1alpha2"
"github.com/jenkinsci/kubernetes-operator/controllers"
controllers "github.com/jenkinsci/kubernetes-operator/internal/controller"
jenkinsClient "github.com/jenkinsci/kubernetes-operator/pkg/client"
"github.com/jenkinsci/kubernetes-operator/pkg/constants"
"github.com/jenkinsci/kubernetes-operator/pkg/event"
@@ -19,7 +19,6 @@ import (
"k8s.io/client-go/kubernetes/scheme"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/envtest"
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
// +kubebuilder:scaffold:imports
@@ -34,9 +33,7 @@ func init() {
func TestAPIs(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecsWithDefaultAndCustomReporters(t,
"Controller Suite",
[]Reporter{printer.NewlineReporter{}})
RunSpecs(t, "Controller Suite")
}
var _ = BeforeSuite(func(done Done) {
+4 -3
View File
@@ -21,7 +21,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/envtest"
)
const JenkinsTestImage = "jenkins/jenkins:2.462.3-lts"
const JenkinsTestImage = "jenkins/jenkins:2.479.2-lts"
var (
Cfg *rest.Config
@@ -41,6 +41,7 @@ func CreateNamespace() *corev1.Namespace {
Name: fmt.Sprintf("ns%d", time.Now().Unix()),
},
}
gomega.Expect(K8sClient.Create(context.TODO(), namespace)).Should(gomega.Succeed())
return namespace
}
@@ -97,7 +98,7 @@ func RenderJenkinsCR(name, namespace string, seedJob *[]v1alpha2.SeedJob, groovy
},
},
ReadinessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
Port: intstr.FromString("http"),
@@ -111,7 +112,7 @@ func RenderJenkinsCR(name, namespace string, seedJob *[]v1alpha2.SeedJob, groovy
PeriodSeconds: int32(1),
},
LivenessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
Port: intstr.FromString("http"),
+5 -5
View File
@@ -34,7 +34,7 @@ func WaitForJenkinsBaseConfigurationToComplete(jenkins *v1alpha2.Jenkins) {
}
return actualJenkins.Status.BaseConfigurationCompletedTime, nil
}, time.Duration(170)*retryInterval, retryInterval).Should(gomega.Not(gomega.BeNil()))
}, time.Duration(250)*retryInterval, retryInterval).Should(gomega.Not(gomega.BeNil()))
_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Jenkins pod is running\n")
@@ -63,7 +63,7 @@ func waitForRecreateJenkinsMasterPod(jenkins *v1alpha2.Jenkins) {
}
return pods.Items[0].DeletionTimestamp == nil, nil
}, 30*retryInterval, retryInterval).Should(gomega.BeTrue())
}, 50*retryInterval, retryInterval).Should(gomega.BeTrue())
_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Jenkins pod has been recreated\n")
}
@@ -78,7 +78,7 @@ func WaitForJenkinsUserConfigurationToComplete(jenkins *v1alpha2.Jenkins) {
return nil, err
}
return actualJenkins.Status.UserConfigurationCompletedTime, nil
}, time.Duration(110)*retryInterval, retryInterval).Should(gomega.Not(gomega.BeNil()))
}, time.Duration(200)*retryInterval, retryInterval).Should(gomega.Not(gomega.BeNil()))
_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Jenkins instance is up and ready\n")
}
@@ -87,7 +87,7 @@ func waitForJenkinsSafeRestart(jenkinsClient jenkinsclient.Jenkins) {
ginkgo.By("waiting for Jenkins safe restart")
gomega.Eventually(func() (bool, error) {
status, err := jenkinsClient.Poll()
status, err := jenkinsClient.Poll(context.TODO())
_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Safe restart status: %+v, err: %s\n", status, err)
if err != nil {
return false, err
@@ -96,5 +96,5 @@ func waitForJenkinsSafeRestart(jenkinsClient jenkinsclient.Jenkins) {
return false, err
}
return true, nil
}, time.Duration(170)*retryInterval, retryInterval).Should(gomega.BeTrue())
}, time.Duration(250)*retryInterval, retryInterval).Should(gomega.BeTrue())
}
+1 -1
View File
@@ -47,7 +47,7 @@ var _ = Describe("Jenkins Controller", func() {
cmd := exec.Command("../../bin/helm", "upgrade", "jenkins", "../../chart/jenkins-operator", "--namespace", namespace.Name, "--debug",
"--set-string", fmt.Sprintf("jenkins.namespace=%s", namespace.Name),
"--set-string", fmt.Sprintf("jenkins.image=%s", "jenkins/jenkins:2.462.3-lts"),
"--set-string", fmt.Sprintf("jenkins.image=%s", "jenkins/jenkins:2.479.2-lts"),
"--set-string", fmt.Sprintf("operator.image=%s", *imageName),
"--set-string", fmt.Sprintf("backup.image=%s", "quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test"),
"--set-string", fmt.Sprintf("jenkins.imagePullPolicy=%s", "IfNotPresent"), "--install")
+11 -12
View File
@@ -2,17 +2,16 @@ package helm
import (
"flag"
"testing"
"github.com/jenkinsci/kubernetes-operator/api/v1alpha2"
"github.com/jenkinsci/kubernetes-operator/test/e2e"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes/scheme"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"k8s.io/client-go/kubernetes/scheme"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/envtest"
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
// +kubebuilder:scaffold:imports
@@ -27,13 +26,11 @@ func init() {
imageName = flag.String("image-name", "", "Name of the locally built for testing Jenkins Operator Image.")
}
func TestHelm(t *testing.T) {
RegisterFailHandler(Fail)
// func TestHelm(t *testing.T) {
// RegisterFailHandler(Fail)
RunSpecsWithDefaultAndCustomReporters(t,
"Controller Suite",
[]Reporter{printer.NewlineReporter{}})
}
// RunSpecs(t, "Controller Suite")
// }
var _ = BeforeSuite(func(done Done) {
logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(false)))
@@ -43,12 +40,14 @@ var _ = BeforeSuite(func(done Done) {
testEnv = &envtest.Environment{
UseExistingCluster: &useExistingCluster,
}
var err error
// cfg is defined in this file globally.
cfg, err := testEnv.Start()
Expect(err).NotTo(HaveOccurred())
Expect(cfg).NotTo(BeNil())
err = v1alpha2.AddToScheme(scheme.Scheme)
//TODO @ansh-devs
some := runtime.NewScheme()
err = v1alpha2.AddToScheme(some)
Expect(err).NotTo(HaveOccurred())
// +kubebuilder:scaffold:scheme