diff --git a/cmd/cloudFoundryDeploy.go b/cmd/cloudFoundryDeploy.go index a77cefd2f..3d52cdbc8 100644 --- a/cmd/cloudFoundryDeploy.go +++ b/cmd/cloudFoundryDeploy.go @@ -182,6 +182,7 @@ func prepareInflux(success bool, config *cloudFoundryDeployOptions, influxData * // n/a (literally) is also reported in groovy influxData.deployment_data.fields.artifactURL = "n/a" + influxData.deployment_data.fields.commitHash = config.CommitHash influxData.deployment_data.fields.deployTime = strings.ToUpper(_now().Format("Jan 02 2006 15:04:05")) diff --git a/cmd/cloudFoundryDeploy_generated.go b/cmd/cloudFoundryDeploy_generated.go index c79389b2f..0dcad30d6 100644 --- a/cmd/cloudFoundryDeploy_generated.go +++ b/cmd/cloudFoundryDeploy_generated.go @@ -20,6 +20,7 @@ type cloudFoundryDeployOptions struct { APIEndpoint string `json:"apiEndpoint,omitempty"` AppName string `json:"appName,omitempty"` ArtifactVersion string `json:"artifactVersion,omitempty"` + CommitHash string `json:"commitHash,omitempty"` CfHome string `json:"cfHome,omitempty"` CfNativeDeployParameters string `json:"cfNativeDeployParameters,omitempty"` CfPluginHome string `json:"cfPluginHome,omitempty"` @@ -51,6 +52,7 @@ type cloudFoundryDeployInflux struct { fields struct { artifactURL string deployTime string + commitHash string jobTrigger string } tags struct { @@ -73,6 +75,7 @@ func (i *cloudFoundryDeployInflux) persist(path, resourceName string) { }{ {valType: config.InfluxField, measurement: "deployment_data", name: "artifactUrl", value: i.deployment_data.fields.artifactURL}, {valType: config.InfluxField, measurement: "deployment_data", name: "deployTime", value: i.deployment_data.fields.deployTime}, + {valType: config.InfluxField, measurement: "deployment_data", name: "commitHash", value: i.deployment_data.fields.commitHash}, {valType: config.InfluxField, measurement: "deployment_data", name: "jobTrigger", value: i.deployment_data.fields.jobTrigger}, {valType: config.InfluxTag, measurement: "deployment_data", name: "artifactVersion", value: i.deployment_data.tags.artifactVersion}, {valType: config.InfluxTag, measurement: "deployment_data", name: "deployUser", value: i.deployment_data.tags.deployUser}, @@ -179,6 +182,7 @@ func addCloudFoundryDeployFlags(cmd *cobra.Command, stepConfig *cloudFoundryDepl cmd.Flags().StringVar(&stepConfig.APIEndpoint, "apiEndpoint", `https://api.cf.eu10.hana.ondemand.com`, "Cloud Foundry API endpoint") cmd.Flags().StringVar(&stepConfig.AppName, "appName", os.Getenv("PIPER_appName"), "Defines the name of the application to be deployed to the Cloud Foundry space") cmd.Flags().StringVar(&stepConfig.ArtifactVersion, "artifactVersion", os.Getenv("PIPER_artifactVersion"), "The artifact version, used for influx reporting") + cmd.Flags().StringVar(&stepConfig.CommitHash, "commitHash", os.Getenv("PIPER_commitHash"), "The commit hash, used for influx reporting") cmd.Flags().StringVar(&stepConfig.CfHome, "cfHome", os.Getenv("PIPER_cfHome"), "The cf home folder used by the cf cli. If not provided the default assumed by the cf cli is used.") cmd.Flags().StringVar(&stepConfig.CfNativeDeployParameters, "cfNativeDeployParameters", os.Getenv("PIPER_cfNativeDeployParameters"), "Additional parameters passed to cf native deployment command") cmd.Flags().StringVar(&stepConfig.CfPluginHome, "cfPluginHome", os.Getenv("PIPER_cfPluginHome"), "The cf plugin home folder used by the cf cli. If not provided the default assumed by the cf cli is used.") @@ -258,6 +262,20 @@ func cloudFoundryDeployMetadata() config.StepData { Aliases: []config.Alias{}, Default: os.Getenv("PIPER_artifactVersion"), }, + { + Name: "commitHash", + ResourceRef: []config.ResourceReference{ + { + Name: "commonPipelineEnvironment", + Param: "git/headCommitId", + }, + }, + Scope: []string{"PARAMETERS", "STAGES", "STEPS", "GENERAL"}, + Type: "string", + Mandatory: false, + Aliases: []config.Alias{}, + Default: os.Getenv("PIPER_commitHash"), + }, { Name: "cfHome", ResourceRef: []config.ResourceReference{}, @@ -530,7 +548,7 @@ func cloudFoundryDeployMetadata() config.StepData { Name: "influx", Type: "influx", Parameters: []map[string]interface{}{ - {"Name": "deployment_data"}, {"fields": []map[string]string{{"name": "artifactUrl"}, {"name": "deployTime"}, {"name": "jobTrigger"}}}, {"tags": []map[string]string{{"name": "artifactVersion"}, {"name": "deployUser"}, {"name": "deployResult"}, {"name": "cfApiEndpoint"}, {"name": "cfOrg"}, {"name": "cfSpace"}}}, + {"Name": "deployment_data"}, {"fields": []map[string]string{{"name": "artifactUrl"}, {"name": "deployTime"}, {"name": "commitHash"}, {"name": "jobTrigger"}}}, {"tags": []map[string]string{{"name": "artifactVersion"}, {"name": "deployUser"}, {"name": "deployResult"}, {"name": "cfApiEndpoint"}, {"name": "cfOrg"}, {"name": "cfSpace"}}}, }, }, }, diff --git a/cmd/cloudFoundryDeploy_test.go b/cmd/cloudFoundryDeploy_test.go index 46e9bd5c9..da4679126 100644 --- a/cmd/cloudFoundryDeploy_test.go +++ b/cmd/cloudFoundryDeploy_test.go @@ -290,7 +290,7 @@ func TestCfDeployment(t *testing.T) { }() _now = func() time.Time { - // There was the big eclise in Karlsruhe + // There was the big eclipse in Karlsruhe return time.Date(1999, time.August, 11, 12, 32, 0, 0, time.UTC) } @@ -298,6 +298,7 @@ func TestCfDeployment(t *testing.T) { config.DeployTool = "cf_native" config.ArtifactVersion = "0.1.2" + config.CommitHash = "123456" influxData := cloudFoundryDeployInflux{} @@ -310,6 +311,7 @@ func TestCfDeployment(t *testing.T) { expected.deployment_data.fields.artifactURL = "n/a" expected.deployment_data.fields.deployTime = "AUG 11 1999 12:32:00" expected.deployment_data.fields.jobTrigger = "n/a" + expected.deployment_data.fields.commitHash = "123456" expected.deployment_data.tags.artifactVersion = "0.1.2" expected.deployment_data.tags.deployUser = "me" diff --git a/documentation/docs/steps/cloudFoundryDeploy.md b/documentation/docs/steps/cloudFoundryDeploy.md index 65772b2a0..1948baaca 100644 --- a/documentation/docs/steps/cloudFoundryDeploy.md +++ b/documentation/docs/steps/cloudFoundryDeploy.md @@ -7,7 +7,7 @@ Deployment can be done * in a standard way -* in a zero downtime manner (using a [blue-green deployment approach](https://martinfowler.com/bliki/BlueGreenDeployment.html)) +* in a zero-downtime manner (using a [blue-green deployment approach](https://martinfowler.com/bliki/BlueGreenDeployment.html)) !!! note "Deployment supports multiple deployment tools" Currently the following are supported: @@ -17,17 +17,17 @@ Deployment can be done !!! note Due to [an incompatible change](https://github.com/cloudfoundry/cli/issues/1445) in the Cloud Foundry CLI, multiple buildpacks are not supported by this step. - If your `application` contains a list of `buildpacks` instead a single `buildpack`, this will be automatically re-written by the step when blue-green deployment is used. + If your `application` contains a list of `buildpacks` instead of a single `buildpack`, this will be automatically re-written by the step when blue-green deployment is used. !!! note Cloud Foundry supports the deployment of multiple applications using a single manifest file. This option is supported with project "Piper". - In this case define `appName: ''` since the app name for the individual applications have to be defined via the manifest. + In this case, define `appName: ''` since the app name for the individual applications has to be defined via the manifest. You can find details in the [Cloud Foundry Documentation](https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#multi-apps) ## Prerequisites -* Cloud Foundry organization, space and deployment user are available +* Cloud Foundry organization, space and deployment users are available * Credentials for deployment have been configured in Jenkins with a dedicated Id ![Jenkins credentials configuration](../images/cf_credentials.png) diff --git a/resources/metadata/cloudFoundryDeploy.yaml b/resources/metadata/cloudFoundryDeploy.yaml index f21d8bd00..162cb8159 100644 --- a/resources/metadata/cloudFoundryDeploy.yaml +++ b/resources/metadata/cloudFoundryDeploy.yaml @@ -52,6 +52,18 @@ spec: resourceRef: - name: commonPipelineEnvironment param: artifactVersion + - name: commitHash + type: string + description: "The commit hash, used for influx reporting" + scope: + - PARAMETERS + - STAGES + - STEPS + - GENERAL + mandatory: false + resourceRef: + - name: commonPipelineEnvironment + param: git/headCommitId - name: cfHome type: string description: "The cf home folder used by the cf cli. If not provided the default assumed by the cf cli is used." @@ -380,6 +392,7 @@ spec: fields: - name: artifactUrl - name: deployTime + - name: commitHash - name: jobTrigger tags: - name: artifactVersion