From 3ff031e960968cd2a381cb6c91db553350784e38 Mon Sep 17 00:00:00 2001 From: Sergey Smolnikov Date: Mon, 22 Jan 2024 09:26:13 +0100 Subject: [PATCH] Deploy only specific component (#587) * In the deploy pipeline added argument components * Added commit-id to deploying component, deploy component list to the pipeline job * Corrected properties * Renamed components property, set it as array * Added swagger.json * Fixed CommitID * Fixed CommitID * Fixed go.mod --- .../models/pipeline_parameters.go | 21 +++++++++++++------ api/deployments/models/component_builder.go | 1 + .../models/component_deployment.go | 5 +++++ api/jobs/models/job.go | 15 +++++++++++-- api/jobs/models/job_parameters.go | 6 ++++++ api/jobs/start_job_handler.go | 7 ++++--- go.mod | 2 +- go.sum | 4 ++-- swaggerui/html/swagger.json | 21 +++++++++++++++++++ 9 files changed, 68 insertions(+), 14 deletions(-) diff --git a/api/applications/models/pipeline_parameters.go b/api/applications/models/pipeline_parameters.go index 52bdfd78..7ecc8a92 100644 --- a/api/applications/models/pipeline_parameters.go +++ b/api/applications/models/pipeline_parameters.go @@ -1,6 +1,8 @@ package models -import jobModels "github.com/equinor/radix-api/api/jobs/models" +import ( + jobModels "github.com/equinor/radix-api/api/jobs/models" +) // PipelineParametersPromote identify deployment to promote and a target environment // swagger:model PipelineParametersPromote @@ -121,15 +123,22 @@ type PipelineParametersDeploy struct { // OPTIONAL for information only // // example: 4faca8595c5283a9d0f17a623b9255a0d9866a2e - CommitID string `json:"commitID"` + CommitID string `json:"commitID,omitempty"` + + // ComponentsToDeploy List of components to deploy + // OPTIONAL If specified, only these components are deployed + // + // required: false + ComponentsToDeploy []string `json:"componentsToDeploy"` } // MapPipelineParametersDeployToJobParameter maps to JobParameter func (deployParam PipelineParametersDeploy) MapPipelineParametersDeployToJobParameter() *jobModels.JobParameters { return &jobModels.JobParameters{ - ToEnvironment: deployParam.ToEnvironment, - TriggeredBy: deployParam.TriggeredBy, - ImageTagNames: deployParam.ImageTagNames, - CommitID: deployParam.CommitID, + ToEnvironment: deployParam.ToEnvironment, + TriggeredBy: deployParam.TriggeredBy, + ImageTagNames: deployParam.ImageTagNames, + CommitID: deployParam.CommitID, + ComponentsToDeploy: deployParam.ComponentsToDeploy, } } diff --git a/api/deployments/models/component_builder.go b/api/deployments/models/component_builder.go index b44f887d..ce844a2b 100644 --- a/api/deployments/models/component_builder.go +++ b/api/deployments/models/component_builder.go @@ -231,6 +231,7 @@ func (b *componentBuilder) BuildComponent() (*Component, error) { Notifications: b.notifications, ExternalDNS: b.externalDNS, HorizontalScalingSummary: b.hpa, + CommitID: variables[defaults.RadixCommitHashEnvironmentVariable], }, b.buildError() } diff --git a/api/deployments/models/component_deployment.go b/api/deployments/models/component_deployment.go index 948aea4e..3f6c7cc5 100644 --- a/api/deployments/models/component_deployment.go +++ b/api/deployments/models/component_deployment.go @@ -103,6 +103,11 @@ type Component struct { // required: false ExternalDNS []ExternalDNS `json:"externalDNS,omitempty"` + // Commit ID for the component. It can be different from the Commit ID, specified in deployment label + // + // required: false + CommitID string `json:"commitID,omitempty"` + AuxiliaryResource `json:",inline"` } diff --git a/api/jobs/models/job.go b/api/jobs/models/job.go index 7a04f51b..ca9f5ccf 100644 --- a/api/jobs/models/job.go +++ b/api/jobs/models/job.go @@ -123,6 +123,12 @@ type Job struct { // items: // "$ref": "#/definitions/ComponentSummary" Components []*deploymentModels.ComponentSummary `json:"components,omitempty"` + + // ComponentsToDeploy List of components to deploy + // OPTIONAL If specified, only these components are deployed + // + // required: false + ComponentsToDeploy []string `json:"componentsToDeploy,omitempty"` } // GetJobFromRadixJob Gets job from a radix job @@ -161,6 +167,7 @@ func GetJobFromRadixJob(job *radixv1.RadixJob, jobDeployments []*deploymentModel case radixv1.Deploy: jobModel.ImageTagNames = job.Spec.Deploy.ImageTagNames jobModel.CommitID = job.Spec.Deploy.CommitID + jobModel.ComponentsToDeploy = job.Spec.Deploy.ComponentsToDeploy case radixv1.Promote: jobModel.PromotedFromDeployment = job.Spec.Promote.DeploymentName jobModel.PromotedFromEnvironment = job.Spec.Promote.FromEnvironment @@ -181,8 +188,12 @@ func GetJobStepsFromRadixJob(job *radixv1.RadixJob) []Step { PodName: jobStep.PodName, Components: jobStep.Components, } - if jobStep.Started != nil {step.Started = &jobStep.Started.Time} - if jobStep.Ended != nil {step.Ended = &jobStep.Ended.Time} + if jobStep.Started != nil { + step.Started = &jobStep.Started.Time + } + if jobStep.Ended != nil { + step.Ended = &jobStep.Ended.Time + } steps = append(steps, step) } diff --git a/api/jobs/models/job_parameters.go b/api/jobs/models/job_parameters.go index 8483cbd1..0f8929ff 100644 --- a/api/jobs/models/job_parameters.go +++ b/api/jobs/models/job_parameters.go @@ -37,6 +37,12 @@ type JobParameters struct { // // example: component1=tag1,component2=tag2 ImageTagNames map[string]string + + // ComponentsToDeploy List of components to deploy + // OPTIONAL If specified, only these components are deployed + // + // required: false + ComponentsToDeploy []string `json:"componentsToDeploy"` } // GetPushImageTag Represents boolean as 1 or 0 diff --git a/api/jobs/start_job_handler.go b/api/jobs/start_job_handler.go index cd6f4137..b3a4da9d 100644 --- a/api/jobs/start_job_handler.go +++ b/api/jobs/start_job_handler.go @@ -94,9 +94,10 @@ func (jh JobHandler) buildPipelineJob(appName, cloneURL, radixConfigFullName str } case v1.Deploy: deploySpec = v1.RadixDeploySpec{ - ToEnvironment: jobSpec.ToEnvironment, - ImageTagNames: jobSpec.ImageTagNames, - CommitID: jobSpec.CommitID, + ToEnvironment: jobSpec.ToEnvironment, + ImageTagNames: jobSpec.ImageTagNames, + CommitID: jobSpec.CommitID, + ComponentsToDeploy: jobSpec.ComponentsToDeploy, } } diff --git a/go.mod b/go.mod index 39052d30..fc95ff67 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21 require ( github.com/equinor/radix-common v1.8.0 github.com/equinor/radix-job-scheduler v1.8.5 - github.com/equinor/radix-operator v1.49.0 + github.com/equinor/radix-operator v1.49.1 github.com/evanphx/json-patch/v5 v5.7.0 github.com/go-swagger/go-swagger v0.30.5 github.com/golang-jwt/jwt/v4 v4.5.0 diff --git a/go.sum b/go.sum index 16b2a634..5a835b03 100644 --- a/go.sum +++ b/go.sum @@ -85,8 +85,8 @@ github.com/equinor/radix-common v1.8.0 h1:4mMu36mvJi2QSPEiKOUUJG/Z5EUrPkf0/lRO1q github.com/equinor/radix-common v1.8.0/go.mod h1:8wGBEAa6auVB3yQ5pImahQzrL3w1ZYTu6N7EXLpJKUk= github.com/equinor/radix-job-scheduler v1.8.5 h1:ahw6FkFpPV167B1/w7/aQKpVMmU5Vc7UBO8411ZtYck= github.com/equinor/radix-job-scheduler v1.8.5/go.mod h1:rNIQU1eCInLV8Yl+5SRITOUU52QwYioYrIGQcsDc3kg= -github.com/equinor/radix-operator v1.49.0 h1:yNdb0zocBw7GdWybAGUm2lWmk6I+xeeCjvrN8xjVTyA= -github.com/equinor/radix-operator v1.49.0/go.mod h1:i8A6V/g1OM+Zk2lAASZaoX+lHdJIZYYZHA586SHB2p8= +github.com/equinor/radix-operator v1.49.1 h1:X3MVpNGT6iyIO09nl82V6hjgwCvwsXPBkplKiLFQe0E= +github.com/equinor/radix-operator v1.49.1/go.mod h1:i8A6V/g1OM+Zk2lAASZaoX+lHdJIZYYZHA586SHB2p8= github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= diff --git a/swaggerui/html/swagger.json b/swaggerui/html/swagger.json index c930c879..836ac86e 100644 --- a/swaggerui/html/swagger.json +++ b/swaggerui/html/swagger.json @@ -5495,6 +5495,11 @@ "image" ], "properties": { + "commitID": { + "description": "Commit ID for the component. It can be different from the Commit ID, specified in deployment label", + "type": "string", + "x-go-name": "CommitID" + }, "externalDNS": { "description": "Array of external DNS configurations", "type": "array", @@ -6280,6 +6285,14 @@ }, "x-go-name": "Components" }, + "componentsToDeploy": { + "description": "ComponentsToDeploy List of components to deploy\nOPTIONAL If specified, only these components are deployed", + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ComponentsToDeploy" + }, "created": { "description": "Created timestamp", "type": "string", @@ -6618,6 +6631,14 @@ "x-go-name": "CommitID", "example": "4faca8595c5283a9d0f17a623b9255a0d9866a2e" }, + "componentsToDeploy": { + "description": "ComponentsToDeploy List of components to deploy\nOPTIONAL If specified, only these components are deployed", + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ComponentsToDeploy" + }, "imageTagNames": { "description": "Image tags names for components", "type": "object",