diff --git a/api/v1alpha2/jenkins_types.go b/api/v1alpha2/jenkins_types.go index 7de4f09b..e6550698 100644 --- a/api/v1alpha2/jenkins_types.go +++ b/api/v1alpha2/jenkins_types.go @@ -18,6 +18,10 @@ type JenkinsSpec struct { // +optional SeedJobs []SeedJob `json:"seedJobs,omitempty"` + // SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:4.9-1 will be used. + // +optional + SeedJobAgentImage string `json:"seedJobAgentImage,omitempty"` + // ValidateSecurityWarnings enables or disables validating potential security warnings in Jenkins plugins via admission webhooks. //+optional ValidateSecurityWarnings bool `json:"validateSecurityWarnings,omitempty"` diff --git a/chart/jenkins-operator/crds/jenkins-crd.yaml b/chart/jenkins-operator/crds/jenkins-crd.yaml index 33b373fc..3b27078d 100644 --- a/chart/jenkins-operator/crds/jenkins-crd.yaml +++ b/chart/jenkins-operator/crds/jenkins-crd.yaml @@ -3118,6 +3118,9 @@ spec: - name type: object type: array + seedJobAgentImage: + type: string + description: 'SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:4.9-1 will be used.' seedJobs: description: 'SeedJobs defines list of Jenkins Seed Job configurations More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration#configure-seed-jobs-and-pipelines' diff --git a/chart/jenkins-operator/values.yaml b/chart/jenkins-operator/values.yaml index cf95f245..0d962b88 100644 --- a/chart/jenkins-operator/values.yaml +++ b/chart/jenkins-operator/values.yaml @@ -111,6 +111,9 @@ jenkins: # repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git seedJobs: [] + # SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:4.9-1 will be used. + seedJobAgentImage: "" + # Resource limit/request for Jenkins # See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ for details resources: diff --git a/pkg/configuration/user/seedjobs/seedjobs.go b/pkg/configuration/user/seedjobs/seedjobs.go index 2b19d736..b82c4951 100644 --- a/pkg/configuration/user/seedjobs/seedjobs.go +++ b/pkg/configuration/user/seedjobs/seedjobs.go @@ -45,6 +45,9 @@ const ( // AgentName is the name of seed job agent AgentName = "seed-job-agent" + // DefaultAgentImage is the default image used for the seed-job agent + defaultAgentImage = "jenkins/inbound-agent:4.9-1" + creatingGroovyScriptName = "seed-job-groovy-script.groovy" homeVolumeName = "home" @@ -416,6 +419,11 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri return nil, err } + agentImage := jenkins.Spec.SeedJobAgentImage + if jenkins.Spec.SeedJobAgentImage == "" { + agentImage = defaultAgentImage + } + suffix := "" if prefix, ok := resources.GetJenkinsOpts(*jenkins)["prefix"]; ok { suffix = prefix @@ -445,7 +453,7 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri Containers: []corev1.Container{ { Name: "jnlp", - Image: "jenkins/inbound-agent:4.9-1", + Image: agentImage, Env: []corev1.EnvVar{ { Name: "JENKINS_TUNNEL", diff --git a/pkg/configuration/user/seedjobs/seedjobs_test.go b/pkg/configuration/user/seedjobs/seedjobs_test.go index 45582e72..3cf06229 100644 --- a/pkg/configuration/user/seedjobs/seedjobs_test.go +++ b/pkg/configuration/user/seedjobs/seedjobs_test.go @@ -113,6 +113,7 @@ func TestEnsureSeedJobs(t *testing.T) { var agentDeployment appsv1.Deployment err = fakeClient.Get(ctx, types.NamespacedName{Namespace: jenkins.Namespace, Name: agentDeploymentName(*jenkins, AgentName)}, &agentDeployment) assert.NoError(t, err) + assert.Equal(t, "jenkins/inbound-agent:4.9-1", agentDeployment.Spec.Template.Spec.Containers[0].Image) }) t.Run("delete agent deployment when no seed jobs", func(t *testing.T) {