You've already forked sap-jenkins-library
							
							
				mirror of
				https://github.com/SAP/jenkins-library.git
				synced 2025-10-30 23:57:50 +02:00 
			
		
		
		
	fix: use orchestrator specific stage name (#3127)
* extend orchestator to provide stage name * use orchestrator specific stage name * fix test case * remove comment * fix test case * prettify * change something.. * do not exit * Update pkg/orchestrator/azureDevOps.go Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							3351250eb7
						
					
				
				
					commit
					4525c1daa4
				
			
							
								
								
									
										16
									
								
								cmd/piper.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								cmd/piper.go
									
									
									
									
									
								
							| @@ -12,6 +12,7 @@ import ( | ||||
|  | ||||
| 	"github.com/SAP/jenkins-library/pkg/config" | ||||
| 	"github.com/SAP/jenkins-library/pkg/log" | ||||
| 	"github.com/SAP/jenkins-library/pkg/orchestrator" | ||||
| 	"github.com/SAP/jenkins-library/pkg/piperutils" | ||||
| 	"github.com/pkg/errors" | ||||
| 	"github.com/spf13/cobra" | ||||
| @@ -223,10 +224,8 @@ func AccessTokensFromEnvJSON(env string) []string { | ||||
| 	return accessTokens | ||||
| } | ||||
|  | ||||
| const stageNameEnvKey = "STAGE_NAME" | ||||
|  | ||||
| // initStageName initializes GeneralConfig.StageName from either GeneralConfig.ParametersJSON | ||||
| // or the environment variable 'STAGE_NAME', unless it has been provided as command line option. | ||||
| // or the environment variable (orchestrator specific), unless it has been provided as command line option. | ||||
| // Log output needs to be suppressed via outputToLog by the getConfig step. | ||||
| func initStageName(outputToLog bool) { | ||||
| 	var stageNameSource string | ||||
| @@ -243,15 +242,20 @@ func initStageName(outputToLog bool) { | ||||
| 	} | ||||
|  | ||||
| 	// Use stageName from ENV as fall-back, for when extracting it from parametersJSON fails below | ||||
| 	GeneralConfig.StageName = os.Getenv(stageNameEnvKey) | ||||
| 	stageNameSource = fmt.Sprintf("env variable '%s'", stageNameEnvKey) | ||||
| 	provider, err := orchestrator.NewOrchestratorSpecificConfigProvider() | ||||
| 	if err != nil { | ||||
| 		log.Entry().WithError(err).Warning("Cannot infer stage name from CI environment") | ||||
| 	} else { | ||||
| 		stageNameSource = "env variable" | ||||
| 		GeneralConfig.StageName = provider.GetStageName() | ||||
| 	} | ||||
|  | ||||
| 	if len(GeneralConfig.ParametersJSON) == 0 { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	var params map[string]interface{} | ||||
| 	err := json.Unmarshal([]byte(GeneralConfig.ParametersJSON), ¶ms) | ||||
| 	err = json.Unmarshal([]byte(GeneralConfig.ParametersJSON), ¶ms) | ||||
| 	if err != nil { | ||||
| 		if outputToLog { | ||||
| 			log.Entry().Infof("Failed to extract 'stageName' from parametersJSON: %v", err) | ||||
|   | ||||
| @@ -7,18 +7,27 @@ import ( | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/SAP/jenkins-library/pkg/log" | ||||
|  | ||||
| 	"github.com/SAP/jenkins-library/pkg/config" | ||||
| 	"github.com/SAP/jenkins-library/pkg/mock" | ||||
| 	"github.com/ghodss/yaml" | ||||
| 	"github.com/spf13/cobra" | ||||
| 	flag "github.com/spf13/pflag" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"github.com/SAP/jenkins-library/pkg/config" | ||||
| 	"github.com/SAP/jenkins-library/pkg/log" | ||||
| 	"github.com/SAP/jenkins-library/pkg/mock" | ||||
| ) | ||||
|  | ||||
| func resetEnv(e []string) { | ||||
| 	for _, val := range e { | ||||
| 		tmp := strings.Split(val, "=") | ||||
| 		os.Setenv(tmp[0], tmp[1]) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestAddRootFlags(t *testing.T) { | ||||
| 	var testRootCmd = &cobra.Command{Use: "test", Short: "This is just a test"} | ||||
| 	addRootFlags(testRootCmd) | ||||
| @@ -49,16 +58,16 @@ func TestAdoptStageNameFromParametersJSON(t *testing.T) { | ||||
| 	for _, test := range tt { | ||||
| 		t.Run(test.name, func(t *testing.T) { | ||||
| 			// init | ||||
| 			defer resetEnv(os.Environ()) | ||||
| 			os.Clearenv() | ||||
|  | ||||
| 			//mock Jenkins env | ||||
| 			os.Setenv("JENKINS_HOME", "anything") | ||||
| 			require.NotEmpty(t, os.Getenv("JENKINS_HOME")) | ||||
| 			os.Setenv("STAGE_NAME", test.stageNameEnv) | ||||
|  | ||||
| 			GeneralConfig.StageName = test.stageNameArg | ||||
|  | ||||
| 			resetValue := os.Getenv(stageNameEnvKey) | ||||
| 			defer func() { _ = os.Setenv(stageNameEnvKey, resetValue) }() | ||||
|  | ||||
| 			err := os.Setenv(stageNameEnvKey, test.stageNameEnv) | ||||
| 			if err != nil { | ||||
| 				t.Fatalf("could not set env var %s", stageNameEnvKey) | ||||
| 			} | ||||
|  | ||||
| 			if test.stageNameJSON != "" { | ||||
| 				GeneralConfig.ParametersJSON = fmt.Sprintf("{\"stageName\":\"%s\"}", test.stageNameJSON) | ||||
| 			} else { | ||||
|   | ||||
| @@ -7,6 +7,10 @@ import ( | ||||
|  | ||||
| type AzureDevOpsConfigProvider struct{} | ||||
|  | ||||
| func (a *AzureDevOpsConfigProvider) GetStageName() string { | ||||
| 	return os.Getenv("SYSTEM_STAGEDISPLAYNAME") | ||||
| } | ||||
|  | ||||
| func (a *AzureDevOpsConfigProvider) GetBranch() string { | ||||
| 	tmp := os.Getenv("BUILD_SOURCEBRANCH") | ||||
| 	return strings.TrimPrefix(tmp, "refs/heads/") | ||||
|   | ||||
| @@ -7,6 +7,10 @@ import ( | ||||
|  | ||||
| type GitHubActionsConfigProvider struct{} | ||||
|  | ||||
| func (g *GitHubActionsConfigProvider) GetStageName() string { | ||||
| 	return "GITHUB_WORKFLOW" //TODO: is there something like is "stage" in GH Actions? | ||||
| } | ||||
|  | ||||
| func (g *GitHubActionsConfigProvider) GetBranch() string { | ||||
| 	return strings.TrimPrefix(os.Getenv("GITHUB_REF"), "refs/heads/") | ||||
| } | ||||
|   | ||||
| @@ -6,6 +6,10 @@ import ( | ||||
|  | ||||
| type JenkinsConfigProvider struct{} | ||||
|  | ||||
| func (a *JenkinsConfigProvider) GetStageName() string { | ||||
| 	return os.Getenv("STAGE_NAME") | ||||
| } | ||||
|  | ||||
| func (j *JenkinsConfigProvider) GetBranch() string { | ||||
| 	return os.Getenv("GIT_BRANCH") | ||||
| } | ||||
|   | ||||
| @@ -15,6 +15,7 @@ const ( | ||||
| ) | ||||
|  | ||||
| type OrchestratorSpecificConfigProviding interface { | ||||
| 	GetStageName() string | ||||
| 	GetBranch() string | ||||
| 	GetBuildUrl() string | ||||
| 	GetCommit() string | ||||
|   | ||||
		Reference in New Issue
	
	Block a user