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
@@ -149,7 +149,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error
backupNumberString := strings.TrimSuffix(backupNumberRaw.String(), "\n")
if backupNumberString == noBackup {
bar.logger.V(log.VDebug).Info("Skipping restore backup, get latest action returned -1")
bar.logger.V(log.VDebug).Info("Skipping restore backup, get latest action returned -1 (no backups found)")
jenkins.Status.LastBackup = 0
jenkins.Status.PendingBackup = 1
return bar.Client.Status().Update(context.TODO(), jenkins)
@@ -209,7 +209,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error
func (bar *BackupAndRestore) Backup(setBackupDoneBeforePodDeletion bool) error {
jenkins := bar.Configuration.Jenkins
if len(jenkins.Spec.Backup.ContainerName) == 0 || jenkins.Spec.Backup.Action.Exec == nil {
bar.logger.V(log.VDebug).Info("Skipping restore backup, backup restore not configured")
bar.logger.V(log.VDebug).Info("Skipping backup, backup creation not configured")
return nil
}
if jenkins.Status.PendingBackup == jenkins.Status.LastBackup {
-1
View File
@@ -445,7 +445,6 @@ func Test_compareEnv(t *testing.T) {
var actual []corev1.EnvVar
got := compareEnv(expected, actual)
assert.True(t, got)
})
t.Run("same", func(t *testing.T) {
+3
View File
@@ -121,6 +121,9 @@ func (r *JenkinsBaseConfigurationReconciler) Reconcile() (reconcile.Result, jenk
}
result, err = r.ensureBaseConfiguration(jenkinsClient)
if err != nil {
return reconcile.Result{}, nil, err
}
return result, jenkinsClient, err
}
@@ -8,7 +8,7 @@ import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
)
// NewJenkinsMasterPod builds Jenkins Master Kubernetes Pod resource.
@@ -24,7 +24,7 @@ func NewJenkinsDeployment(objectMeta metav1.ObjectMeta, jenkins *v1alpha2.Jenkin
Labels: objectMeta.Labels,
},
Spec: appsv1.DeploymentSpec{
Replicas: pointer.Int32Ptr(1),
Replicas: ptr.To(int32(1)),
Strategy: appsv1.DeploymentStrategy{Type: appsv1.RollingUpdateDeploymentStrategyType},
Template: corev1.PodTemplateSpec{
ObjectMeta: objectMeta,
+1 -1
View File
@@ -7,7 +7,7 @@ import (
func NewProbe(uri string, port string, scheme corev1.URIScheme, initialDelaySeconds, timeoutSeconds, failureThreshold int32) *corev1.Probe {
return &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: uri,
Port: intstr.FromString(port),
+1 -1
View File
@@ -16,5 +16,5 @@ func randomString(n int) string {
}
func init() {
rand.Seed(time.Now().UnixNano())
rand.New(rand.NewSource(time.Now().UnixNano()))
}
@@ -16,12 +16,12 @@ var jenkins = v1alpha2.Jenkins{
{
Env: []corev1.EnvVar{},
ReadinessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{},
},
},
LivenessProbe: &corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{},
},
},
@@ -118,7 +118,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].ReadinessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
},
@@ -127,7 +127,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].LivenessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
},
@@ -148,7 +148,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].ReadinessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
},
@@ -157,7 +157,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].LivenessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/login",
},
@@ -178,7 +178,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].ReadinessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/jenkins/login",
},
@@ -187,7 +187,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].LivenessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/jenkins/login",
},
@@ -205,7 +205,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].ReadinessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/jenkins/login",
},
@@ -214,7 +214,7 @@ func TestSetLivenessAndReadinessPath(t *testing.T) {
jenkins.Spec.Master.Containers[0].LivenessProbe =
&corev1.Probe{
Handler: corev1.Handler{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/jenkins/login",
},
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"github.com/jenkinsci/kubernetes-operator/pkg/constants"
"github.com/jenkinsci/kubernetes-operator/pkg/plugins"
docker "github.com/docker/distribution/reference"
docker "github.com/distribution/reference"
stackerr "github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
+2 -2
View File
@@ -155,7 +155,7 @@ func (c *Configuration) Exec(podName, containerName string, command []string) (s
return stdout, stderr, stackerr.Wrap(err, "pod exec error while creating Executor")
}
err = exec.Stream(remotecommand.StreamOptions{
err = exec.StreamWithContext(context.TODO(), remotecommand.StreamOptions{
Stdin: nil,
Stdout: &stdout,
Stderr: &stderr,
@@ -165,7 +165,7 @@ func (c *Configuration) Exec(podName, containerName string, command []string) (s
return stdout, stderr, stackerr.Wrapf(err, "pod exec error operation on stream: stdout '%s' stderr '%s'", stdout.String(), stderr.String())
}
return
return stdout, stderr, nil
}
// GetJenkinsMasterContainer returns the Jenkins master container from the CR.
+8 -7
View File
@@ -60,6 +60,14 @@ func (r *reconcileUserConfiguration) ReconcileOthers() (reconcile.Result, error)
return reconcile.Result{}, err
}
if err := backupAndRestore.Backup(false); err != nil {
return reconcile.Result{}, err
}
if err := backupAndRestore.EnsureBackupTrigger(); err != nil {
return reconcile.Result{}, err
}
result, err := r.ensureSeedJobs()
if err != nil {
return reconcile.Result{}, err
@@ -68,13 +76,6 @@ func (r *reconcileUserConfiguration) ReconcileOthers() (reconcile.Result, error)
return result, nil
}
if err := backupAndRestore.Backup(false); err != nil {
return reconcile.Result{}, err
}
if err := backupAndRestore.EnsureBackupTrigger(); err != nil {
return reconcile.Result{}, err
}
return reconcile.Result{}, nil
}
+6 -3
View File
@@ -218,6 +218,7 @@ func (s *seedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err
})
if err != nil && !apierrors.IsNotFound(err) {
return false, stackerr.WithStack(err)
}
}
@@ -236,6 +237,7 @@ func (s *seedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err err
seedJobIDs := s.getAllSeedJobIDs(*jenkins)
if !reflect.DeepEqual(seedJobIDs, jenkins.Status.CreatedSeedJobs) {
// @ansh-devs fixed : calls to Update and Patch will not alter its status.
jenkins.Status.CreatedSeedJobs = seedJobIDs
return false, stackerr.WithStack(s.Client.Status().Update(context.TODO(), jenkins))
}
@@ -303,6 +305,7 @@ func (s *seedJobs) createJobs(jenkins *v1alpha2.Jenkins) (requeue bool, err erro
// Operator will able to watch any changes made to them
func (s *seedJobs) ensureLabelsForSecrets(jenkins v1alpha2.Jenkins) error {
for _, seedJob := range jenkins.Spec.SeedJobs {
if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType {
requiredLabels := resources.BuildLabelsForWatchedResources(jenkins)
requiredLabels[JenkinsCredentialTypeLabelName] = string(seedJob.JenkinsCredentialType)
@@ -344,7 +347,7 @@ func (s *seedJobs) credentialValue(namespace string, seedJob v1alpha2.SeedJob) (
}
func (s *seedJobs) getAllSeedJobIDs(jenkins v1alpha2.Jenkins) []string {
var ids []string
ids := make([]string, 0, len(jenkins.Spec.SeedJobs))
for _, seedJob := range jenkins.Spec.SeedJobs {
ids = append(ids, seedJob.ID)
}
@@ -369,11 +372,11 @@ func (s *seedJobs) isRecreatePodNeeded(jenkins v1alpha2.Jenkins) bool {
// createAgent deploys Jenkins agent to Kubernetes cluster
func (s *seedJobs) createAgent(jenkinsClient jenkinsclient.Jenkins, k8sClient client.Client, jenkinsManifest *v1alpha2.Jenkins, namespace string, agentName string) error {
_, err := jenkinsClient.GetNode(agentName)
_, err := jenkinsClient.GetNode(context.TODO(), agentName)
// Create node if not exists
if err != nil && err.Error() == "No node found" {
_, err = jenkinsClient.CreateNode(agentName, 5, "The jenkins-operator generated agent", "/home/jenkins", agentName)
_, err = jenkinsClient.CreateNode(context.TODO(), agentName, 5, "The jenkins-operator generated agent", "/home/jenkins", agentName)
if err != nil {
return stackerr.WithStack(err)
}
@@ -97,8 +97,8 @@ func TestEnsureSeedJobs(t *testing.T) {
seedJobCreatingScript, err := seedJobCreatingGroovyScript(jenkins.Spec.SeedJobs[0])
assert.NoError(t, err)
jenkinsClient.EXPECT().GetNode(AgentName).Return(nil, nil).AnyTimes()
jenkinsClient.EXPECT().CreateNode(AgentName, 1, "The jenkins-operator generated agent", "/home/jenkins", AgentName).Return(testNode, nil).AnyTimes()
jenkinsClient.EXPECT().GetNode(context.TODO(), AgentName).Return(nil, nil).AnyTimes()
jenkinsClient.EXPECT().CreateNode(context.TODO(), AgentName, 1, "The jenkins-operator generated agent", "/home/jenkins", AgentName).Return(testNode, nil).AnyTimes()
jenkinsClient.EXPECT().GetNodeSecret(AgentName).Return(agentSecret, nil).AnyTimes()
jenkinsClient.EXPECT().ExecuteScript(seedJobCreatingScript).AnyTimes()
@@ -128,7 +128,10 @@ func TestEnsureSeedJobs(t *testing.T) {
jenkins.Spec.SeedJobs = []v1alpha2.SeedJob{}
jenkinsClient := jenkinsclient.NewMockJenkins(ctrl)
fakeClient := fake.NewClientBuilder().Build()
fakeClient := fake.NewClientBuilder().
WithRuntimeObjects(jenkins).
WithStatusSubresource(jenkins).
Build()
err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme)
assert.NoError(t, err)
@@ -139,8 +142,8 @@ func TestEnsureSeedJobs(t *testing.T) {
Jenkins: jenkins,
}
jenkinsClient.EXPECT().GetNode(AgentName).AnyTimes()
jenkinsClient.EXPECT().CreateNode(AgentName, 1, "The jenkins-operator generated agent", "/home/jenkins", AgentName).AnyTimes()
jenkinsClient.EXPECT().GetNode(ctx, AgentName).AnyTimes()
jenkinsClient.EXPECT().CreateNode(ctx, AgentName, 1, "The jenkins-operator generated agent", "/home/jenkins", AgentName).AnyTimes()
jenkinsClient.EXPECT().GetNodeSecret(AgentName).Return(agentSecret, nil).AnyTimes()
seedJobsClient := New(jenkinsClient, config)
@@ -155,13 +158,14 @@ func TestEnsureSeedJobs(t *testing.T) {
// when
_, err = seedJobsClient.EnsureSeedJobs(jenkins)
// then
assert.NoError(t, err)
var deployment appsv1.Deployment
err = fakeClient.Get(ctx, types.NamespacedName{Namespace: jenkins.Namespace, Name: agentDeploymentName(*jenkins, AgentName)}, &deployment)
err = fakeClient.Get(ctx, types.NamespacedName{
Namespace: jenkins.Namespace,
Name: agentDeploymentName(*jenkins, AgentName),
}, &deployment)
assert.True(t, errors.IsNotFound(err), "Agent deployment hasn't been deleted")
})
}
@@ -180,8 +184,8 @@ func TestCreateAgent(t *testing.T) {
err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme)
assert.NoError(t, err)
jenkinsClient.EXPECT().GetNode(AgentName).AnyTimes()
jenkinsClient.EXPECT().CreateNode(AgentName, 1, "The jenkins-operator generated agent", "/home/jenkins", AgentName).AnyTimes()
jenkinsClient.EXPECT().GetNode(context.TODO(), AgentName).AnyTimes()
jenkinsClient.EXPECT().CreateNode(context.TODO(), AgentName, 1, "The jenkins-operator generated agent", "/home/jenkins", AgentName).AnyTimes()
jenkinsClient.EXPECT().GetNodeSecret(AgentName).Return(agentSecret, nil).AnyTimes()
config := configuration.Configuration{
+19 -14
View File
@@ -16,7 +16,7 @@ import (
// ValidateSeedJobs verify seed jobs configuration
func (s *seedJobs) ValidateSeedJobs(jenkins v1alpha2.Jenkins) ([]string, error) {
var messages []string
messages := []string{}
if msg := s.validateIfIDIsUnique(jenkins.Spec.SeedJobs); len(msg) > 0 {
messages = append(messages, msg...)
@@ -88,24 +88,28 @@ func (s *seedJobs) ValidateSeedJobs(jenkins v1alpha2.Jenkins) ([]string, error)
}
}
if seedJob.GitHubPushTrigger {
if msg := s.validateGitHubPushTrigger(jenkins); len(msg) > 0 {
for _, m := range msg {
messages = append(messages, fmt.Sprintf("seedJob `%s` %s", seedJob.ID, m))
}
}
}
s.setSeedJobPushTriggers(seedJob, &messages, jenkins)
}
return messages, nil
}
if seedJob.BitbucketPushTrigger {
if msg := s.validateBitbucketPushTrigger(jenkins); len(msg) > 0 {
for _, m := range msg {
messages = append(messages, fmt.Sprintf("seedJob `%s` %s", seedJob.ID, m))
}
func (s *seedJobs) setSeedJobPushTriggers(seedJob v1alpha2.SeedJob, messages *[]string, jenkins v1alpha2.Jenkins) {
if seedJob.GitHubPushTrigger {
if msg := s.validateGitHubPushTrigger(jenkins); len(msg) > 0 {
for _, m := range msg {
*messages = append(*messages, fmt.Sprintf("seedJob `%s` %s", seedJob.ID, m))
}
}
}
if seedJob.BitbucketPushTrigger {
if msg := s.validateBitbucketPushTrigger(jenkins); len(msg) > 0 {
for _, m := range msg {
*messages = append(*messages, fmt.Sprintf("seedJob `%s` %s", seedJob.ID, m))
}
}
}
return messages, nil
}
func (s *seedJobs) validateGitHubPushTrigger(jenkins v1alpha2.Jenkins) []string {
@@ -125,6 +129,7 @@ func (s *seedJobs) validateBitbucketPushTrigger(jenkins v1alpha2.Jenkins) []stri
}
func checkPluginExists(jenkins v1alpha2.Jenkins, name string) error {
exists := false
for _, plugin := range jenkins.Spec.Master.BasePlugins {
if plugin.Name == name {
@@ -107,7 +107,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid without id", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -178,7 +178,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid ed25519 private key in secret", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -261,7 +261,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid RSA private key in secret", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -508,7 +508,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid with empty username", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -715,7 +715,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid with empty app id", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -914,7 +914,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid with set githubPushTrigger and not installed github plugin", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -984,7 +984,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
t.Run("Invalid with set bitbucketPushTrigger and not installed bitbucket plugin", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
@@ -1054,7 +1054,7 @@ func TestValidateSeedJobs(t *testing.T) {
result, err := seedJobs.ValidateSeedJobs(jenkins)
assert.NoError(t, err)
assert.Nil(t, result)
assert.Empty(t, result)
})
}