1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-11-06 09:09:19 +02:00

abapEnvironmentAssemblePackages store file in workspace instead of cpe (#3232)

* initial refac

* fix unit test, no publish

* fix typo
This commit is contained in:
tiloKo
2021-11-02 11:00:01 +01:00
committed by GitHub
parent 3ee4339af1
commit 9464b345d0
6 changed files with 86 additions and 49 deletions

View File

@@ -33,27 +33,33 @@ func abapAddonAssemblyKitRegisterPackages(config abapAddonAssemblyKitRegisterPac
func runAbapAddonAssemblyKitRegisterPackages(config *abapAddonAssemblyKitRegisterPackagesOptions, telemetryData *telemetry.CustomData, client piperhttp.Sender,
cpe *abapAddonAssemblyKitRegisterPackagesCommonPipelineEnvironment, fileReader readFile) error {
var addonDescriptor abaputils.AddonDescriptor
json.Unmarshal([]byte(config.AddonDescriptor), &addonDescriptor)
conn := new(abapbuild.Connector)
conn.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, client)
err := uploadSarFiles(addonDescriptor.Repositories, *conn, fileReader)
if err != nil {
if err := conn.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, client); err != nil {
return err
}
// we need a second connector without the added Header
conn2 := new(abapbuild.Connector)
conn2.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, client)
if err := uploadSarFiles(addonDescriptor.Repositories, *conn, fileReader); err != nil {
return err
}
conn2 := new(abapbuild.Connector) // we need a second connector without the added Header
if err := conn2.InitAAKaaS(config.AbapAddonAssemblyKitEndpoint, config.Username, config.Password, client); err != nil {
return err
}
var err error
addonDescriptor.Repositories, err = registerPackages(addonDescriptor.Repositories, *conn2)
if err != nil {
return err
}
log.Entry().Info("Writing package status to CommonPipelineEnvironment")
backToCPE, _ := json.Marshal(addonDescriptor)
cpe.abap.addonDescriptor = string(backToCPE)
cpe.abap.addonDescriptor = addonDescriptor.AsJSONstring()
return nil
}

View File

@@ -22,6 +22,8 @@ func mockReader(path string) ([]byte, error) {
func TestRegisterPackagesStep(t *testing.T) {
var config abapAddonAssemblyKitRegisterPackagesOptions
config.Username = "dummy"
config.Password = "dummy"
var cpe abapAddonAssemblyKitRegisterPackagesCommonPipelineEnvironment
t.Run("step success", func(t *testing.T) {
client := &abaputils.ClientMock{

View File

@@ -1,7 +1,6 @@
package cmd
import (
"encoding/json"
"path"
"path/filepath"
"time"
@@ -40,33 +39,17 @@ func abapEnvironmentAssemblePackages(config abapEnvironmentAssemblePackagesOptio
}
func runAbapEnvironmentAssemblePackages(config *abapEnvironmentAssemblePackagesOptions, telemetryData *telemetry.CustomData, com abaputils.Communication, client abapbuild.HTTPSendLoader, cpe *abapEnvironmentAssemblePackagesCommonPipelineEnvironment) error {
conn := new(abapbuild.Connector)
var connConfig abapbuild.ConnectorConfiguration
connConfig.CfAPIEndpoint = config.CfAPIEndpoint
connConfig.CfOrg = config.CfOrg
connConfig.CfSpace = config.CfSpace
connConfig.CfServiceInstance = config.CfServiceInstance
connConfig.CfServiceKeyName = config.CfServiceKeyName
connConfig.Host = config.Host
connConfig.Username = config.Username
connConfig.Password = config.Password
connConfig.AddonDescriptor = config.AddonDescriptor
connConfig.MaxRuntimeInMinutes = config.MaxRuntimeInMinutes
err := conn.InitBuildFramework(connConfig, com, client)
if err != nil {
return errors.Wrap(err, "Connector initialization for communication with the ABAP system failed")
connBuild := new(abapbuild.Connector)
if errConBuild := initAssemblePackagesConnection(connBuild, config, com, client); errConBuild != nil {
return errConBuild
}
var addonDescriptor abaputils.AddonDescriptor
err = json.Unmarshal([]byte(config.AddonDescriptor), &addonDescriptor)
if err != nil {
addonDescriptor := new(abaputils.AddonDescriptor)
if err := addonDescriptor.InitFromJSONstring(config.AddonDescriptor); err != nil {
return errors.Wrap(err, "Reading AddonDescriptor failed [Make sure abapAddonAssemblyKit...CheckCVs|CheckPV|ReserveNextPackages steps have been run before]")
}
maxRuntimeInMinutes := time.Duration(config.MaxRuntimeInMinutes) * time.Minute
pollInterval := time.Duration(config.PollIntervalsInMilliseconds) * time.Millisecond
builds, err := executeBuilds(addonDescriptor.Repositories, *conn, maxRuntimeInMinutes, pollInterval)
builds, err := executeBuilds(addonDescriptor.Repositories, *connBuild, time.Duration(config.MaxRuntimeInMinutes)*time.Minute, time.Duration(config.PollIntervalsInMilliseconds)*time.Millisecond)
if err != nil {
return errors.Wrap(err, "Starting Builds for Repositories with reserved AAKaaS packages failed")
}
@@ -76,28 +59,26 @@ func runAbapEnvironmentAssemblePackages(config *abapEnvironmentAssemblePackagesO
return errors.Wrap(err, "Checking for failed Builds and Printing Build Logs failed")
}
var filesToPublish []piperutils.Path
filesToPublish, err = downloadResultToFile(builds, "SAR_XML", filesToPublish)
_, err = downloadResultToFile(builds, "SAR_XML", false) //File is present in ABAP build system and uploaded to AAKaaS, no need to fill up jenkins with it
if err != nil {
return errors.Wrap(err, "Download of Build Artifact SAR_XML failed")
}
filesToPublish, err = downloadResultToFile(builds, "DELIVERY_LOGS.ZIP", filesToPublish)
var filesToPublish []piperutils.Path
filesToPublish, err = downloadResultToFile(builds, "DELIVERY_LOGS.ZIP", true)
if err != nil {
//changed result storage with 2105, thus ignore errors for now
log.Entry().Error(errors.Wrap(err, "Download of Build Artifact DELIVERY_LOGS.ZIP failed"))
return errors.Wrap(err, "Download of Build Artifact DELIVERY_LOGS.ZIP failed")
}
log.Entry().Infof("Publsihing %v files", len(filesToPublish))
log.Entry().Infof("Publishing %v files", len(filesToPublish))
piperutils.PersistReportsAndLinks("abapEnvironmentAssemblePackages", "", filesToPublish, nil)
var reposBackToCPE []abaputils.Repository
for _, b := range builds {
reposBackToCPE = append(reposBackToCPE, b.repo)
}
addonDescriptor.Repositories = reposBackToCPE
backToCPE, _ := json.Marshal(addonDescriptor)
cpe.abap.addonDescriptor = string(backToCPE)
addonDescriptor.SetRepositories(reposBackToCPE)
cpe.abap.addonDescriptor = addonDescriptor.AsJSONstring()
return nil
}
@@ -205,8 +186,9 @@ func (br *buildWithRepository) start() error {
return br.build.Start(phase, valuesInput)
}
func downloadResultToFile(builds []buildWithRepository, resultName string, filesToPublish []piperutils.Path) ([]piperutils.Path, error) {
envPath := filepath.Join(GeneralConfig.EnvRootPath, "commonPipelineEnvironment", "abap")
func downloadResultToFile(builds []buildWithRepository, resultName string, publish bool) ([]piperutils.Path, error) {
envPath := filepath.Join(GeneralConfig.EnvRootPath, "abapBuild")
var filesToPublish []piperutils.Path
for i, b := range builds {
if b.repo.Status != "P" {
@@ -231,9 +213,10 @@ func downloadResultToFile(builds []buildWithRepository, resultName string, files
if resultName == "SAR_XML" {
builds[i].repo.SarXMLFilePath = downloadPath
}
log.Entry().Infof("Add %s to be published", resultName)
filesToPublish = append(filesToPublish, piperutils.Path{Target: downloadPath, Name: resultName, Mandatory: true})
if publish {
log.Entry().Infof("Add %s to be published", resultName)
filesToPublish = append(filesToPublish, piperutils.Path{Target: downloadPath, Name: resultName, Mandatory: true})
}
}
return filesToPublish, nil
}
@@ -252,3 +235,24 @@ func checkIfFailedAndPrintLogs(builds []buildWithRepository) error {
}
return nil
}
func initAssemblePackagesConnection(conn *abapbuild.Connector, config *abapEnvironmentAssemblePackagesOptions, com abaputils.Communication, client abapbuild.HTTPSendLoader) error {
var connConfig abapbuild.ConnectorConfiguration
connConfig.CfAPIEndpoint = config.CfAPIEndpoint
connConfig.CfOrg = config.CfOrg
connConfig.CfSpace = config.CfSpace
connConfig.CfServiceInstance = config.CfServiceInstance
connConfig.CfServiceKeyName = config.CfServiceKeyName
connConfig.Host = config.Host
connConfig.Username = config.Username
connConfig.Password = config.Password
connConfig.AddonDescriptor = config.AddonDescriptor
connConfig.MaxRuntimeInMinutes = config.MaxRuntimeInMinutes
err := conn.InitBuildFramework(connConfig, com, client)
if err != nil {
return errors.Wrap(err, "Connector initialization for communication with the ABAP system failed")
}
return nil
}