#328 Fix 65535 string length issue
This commit is contained in:
parent
9715217f1d
commit
fd1b5f2bd9
|
|
@ -35,16 +35,49 @@ func (c *ConfigurationAsCode) Ensure(jenkins *v1alpha2.Jenkins) (requeue bool, e
|
||||||
return c.groovyClient.Ensure(func(name string) bool {
|
return c.groovyClient.Ensure(func(name string) bool {
|
||||||
return strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml")
|
return strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml")
|
||||||
}, func(groovyScript string) string {
|
}, func(groovyScript string) string {
|
||||||
return fmt.Sprintf(applyConfigurationAsCodeGroovyScriptFmt, groovyScript)
|
return fmt.Sprintf(applyConfigurationAsCodeGroovyScriptFmt, prepareScript(groovyScript))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const applyConfigurationAsCodeGroovyScriptFmt = `
|
const applyConfigurationAsCodeGroovyScriptFmt = `
|
||||||
def config = '''
|
String[] configContent = ['''%s''']
|
||||||
%s
|
def configSb = new StringBuffer()
|
||||||
'''
|
for (int i=0; i<configContent.size(); i++) {
|
||||||
def stream = new ByteArrayInputStream(config.getBytes('UTF-8'))
|
configSb << configContent[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
def stream = new ByteArrayInputStream(configSb.toString().getBytes('UTF-8'))
|
||||||
|
|
||||||
def source = new io.jenkins.plugins.casc.yaml.YamlSource(stream, io.jenkins.plugins.casc.yaml.YamlSource.READ_FROM_INPUTSTREAM)
|
def source = new io.jenkins.plugins.casc.yaml.YamlSource(stream, io.jenkins.plugins.casc.yaml.YamlSource.READ_FROM_INPUTSTREAM)
|
||||||
io.jenkins.plugins.casc.ConfigurationAsCode.get().configureWith(source)
|
io.jenkins.plugins.casc.ConfigurationAsCode.get().configureWith(source)
|
||||||
`
|
`
|
||||||
|
|
||||||
|
func prepareScript(script string) string {
|
||||||
|
groovyUtf8MaxStringLength := 65535
|
||||||
|
var slicedScript []string
|
||||||
|
if len(script) > groovyUtf8MaxStringLength {
|
||||||
|
slicedScript = splitTooLongScript(script)
|
||||||
|
} else {
|
||||||
|
slicedScript = append(slicedScript, script)
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(slicedScript, "''','''")
|
||||||
|
}
|
||||||
|
|
||||||
|
func splitTooLongScript(groovyScript string) []string {
|
||||||
|
groovyUtf8MaxStringLength := 65535
|
||||||
|
var slicedGroovyScript []string
|
||||||
|
|
||||||
|
lastSubstrIndex := len(groovyScript) % groovyUtf8MaxStringLength
|
||||||
|
lastSubstr := groovyScript[len(groovyScript)-lastSubstrIndex:]
|
||||||
|
|
||||||
|
substrNumber := len(groovyScript) / groovyUtf8MaxStringLength
|
||||||
|
for i := 0; i < substrNumber; i++ {
|
||||||
|
scriptSubstr := groovyScript[i*groovyUtf8MaxStringLength : (i*groovyUtf8MaxStringLength)+groovyUtf8MaxStringLength]
|
||||||
|
slicedGroovyScript = append(slicedGroovyScript, scriptSubstr)
|
||||||
|
}
|
||||||
|
|
||||||
|
slicedGroovyScript = append(slicedGroovyScript, lastSubstr)
|
||||||
|
|
||||||
|
return slicedGroovyScript
|
||||||
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue