mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
Merge branch 'master' into CCFenner/newman
This commit is contained in:
commit
059268459a
@ -23,19 +23,19 @@ none
|
||||
| ----------|-----------|---------|-----------------|
|
||||
| script | no | empty `commonPipelineEnvironment` | |
|
||||
| artifactType | no | | 'appContainer' |
|
||||
| buildTool | no | maven | maven, docker |
|
||||
| buildTool | no | maven | docker, dlang, golang, maven, mta, npm, pip, sbt |
|
||||
| commitVersion | no | `true` | `true`, `false` |
|
||||
| dockerVersionSource | no | `''` | FROM, (ENV name),appVersion |
|
||||
| filePath | no | buildTool=`maven`: pom.xml <br />docker: Dockerfile | |
|
||||
| filePath | no | buildTool=`docker`: Dockerfile <br />buildTool=`dlang`: dub.json <br />buildTool=`golang`: VERSION <br />buildTool=`maven`: pom.xml <br />buildTool=`mta`: mta.yaml <br />buildTool=`npm`: package.json <br />buildTool=`pip`: version.txt <br />buildTool=`sbt`: sbtDescriptor.json| |
|
||||
| gitCommitId | no | `GitUtils.getGitCommitId()` | |
|
||||
| gitCredentialsId | If `commitVersion` is `true` | as defined in custom configuration | |
|
||||
| gitSshCredentialsId | If `commitVersion` is `true` | as defined in custom configuration | |
|
||||
| gitUserEMail | no | | |
|
||||
| gitUserName | no | | |
|
||||
| gitSshUrl | If `commitVersion` is `true` | | |
|
||||
| tagPrefix | no | 'build_' | |
|
||||
| timestamp | no | current time in format according to `timestampTemplate` | |
|
||||
| timestampTemplate | no | `%Y%m%d%H%M%S` | |
|
||||
| versioningTemplate | no | depending on `buildTool`<br />maven: `${version}-${timestamp}${commitId?"_"+commitId:""}` | |
|
||||
| versioningTemplate | no |buildTool=`docker`: `${version}-${timestamp}${commitId?"_"+commitId:""}`<br> />buildTool=`dlang`: `${version}-${timestamp}${commitId?"+"+commitId:""}`<br />buildTool=`golang`:`${version}-${timestamp}${commitId?"+"+commitId:""}`<br />buildTool=`maven`: `${version}-${timestamp}${commitId?"_"+commitId:""}`<br />buildTool=`mta`: `${version}-${timestamp}${commitId?"+"+commitId:""}`<br />buildTool=`npm`: `${version}-${timestamp}${commitId?"+"+commitId:""}`<br />buildTool=`pip`: `${version}.${timestamp}${commitId?"."+commitId:""}`<br />buildTool=`sbt`: `${version}-${timestamp}${commitId?"+"+commitId:""}`| |
|
||||
|
||||
* `script` defines the global script environment of the Jenkinsfile run. Typically `this` is passed to this parameter. This allows the function to access the [`commonPipelineEnvironment`](commonPipelineEnvironment.md) for retrieving e.g. configuration parameters.
|
||||
* `artifactType` defines the type of the artifact.
|
||||
@ -49,7 +49,7 @@ none
|
||||
|
||||
* Using `filePath` you could define a custom path to the descriptor file.
|
||||
* `gitCommitId` defines the version prefix of the automatically generated version. By default it will take the long commitId hash. You could pass any other string (e.g. the short commitId hash) to be used. In case you don't want to have the gitCommitId added to the automatic versioning string you could set the value to an empty string: `''`.
|
||||
* `gitCredentialsId`defines the ssh git credentials to be used for writing the tag.
|
||||
* `gitSshCredentialsId`defines the ssh git credentials to be used for writing the tag.
|
||||
* The parameters `gitUserName` and `gitUserEMail` allow to overwrite the global git settings available on your Jenkins server
|
||||
* `gitSshUrl` defines the git ssh url to the source code repository.
|
||||
* `tagPrefix` defines the prefix wich is used for the git tag which is written during the versioning run.
|
||||
|
@ -11,21 +11,37 @@ general:
|
||||
from: 'origin/master'
|
||||
to: 'HEAD'
|
||||
format: '%b'
|
||||
gitSshKeyCredentialsId: '' #needed to allow sshagent to run with local ssh key
|
||||
#Steps Specific Configuration
|
||||
steps:
|
||||
artifactSetVersion:
|
||||
timestampTemplate: '%Y%m%d%H%M%S'
|
||||
tagPrefix: 'build_'
|
||||
commitVersion: true
|
||||
dlang:
|
||||
filePath: 'dub.json'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"+"+commitId:""}'
|
||||
docker:
|
||||
filePath: 'Dockerfile'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"_"+commitId:""}'
|
||||
golang:
|
||||
filePath: 'VERSION'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"+"+commitId:""}'
|
||||
maven:
|
||||
filePath: 'pom.xml'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"_"+commitId:""}'
|
||||
mta:
|
||||
filePath: 'mta.yaml'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"+"+commitId:""}'
|
||||
npm:
|
||||
filePath: 'package.json'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"+"+commitId:""}'
|
||||
pip:
|
||||
filePath: 'version.txt'
|
||||
versioningTemplate: '${version}.${timestamp}${commitId?"."+commitId:""}'
|
||||
sbt:
|
||||
filePath: 'sbtDescriptor.json'
|
||||
versioningTemplate: '${version}-${timestamp}${commitId?"+"+commitId:""}'
|
||||
checksPublishResults:
|
||||
aggregation:
|
||||
active: true
|
||||
|
@ -12,12 +12,22 @@ abstract class ArtifactVersioning implements Serializable {
|
||||
|
||||
public static getArtifactVersioning(buildTool, script, configuration) {
|
||||
switch (buildTool) {
|
||||
case 'mta':
|
||||
return new MtaArtifactVersioning(script, configuration)
|
||||
case 'maven':
|
||||
return new MavenArtifactVersioning(script, configuration)
|
||||
case 'dlang':
|
||||
return new DlangArtifactVersioning(script, configuration)
|
||||
case 'docker':
|
||||
return new DockerArtifactVersioning(script, configuration)
|
||||
case 'golang':
|
||||
return new GolangArtifactVersioning(script, configuration)
|
||||
case 'maven':
|
||||
return new MavenArtifactVersioning(script, configuration)
|
||||
case 'mta':
|
||||
return new MtaArtifactVersioning(script, configuration)
|
||||
case 'npm':
|
||||
return new NpmArtifactVersioning(script, configuration)
|
||||
case 'pip':
|
||||
return new PipArtifactVersioning(script, configuration)
|
||||
case 'sbt':
|
||||
return new SbtArtifactVersioning(script, configuration)
|
||||
default:
|
||||
throw new IllegalArgumentException("No versioning implementation for buildTool: ${buildTool} available.")
|
||||
}
|
||||
|
20
src/com/sap/piper/versioning/DlangArtifactVersioning.groovy
Normal file
20
src/com/sap/piper/versioning/DlangArtifactVersioning.groovy
Normal file
@ -0,0 +1,20 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
class DlangArtifactVersioning extends ArtifactVersioning {
|
||||
protected DlangArtifactVersioning(script, configuration) {
|
||||
super(script, configuration)
|
||||
}
|
||||
|
||||
@Override
|
||||
def getVersion() {
|
||||
def descriptor = script.readJSON file: configuration.filePath
|
||||
return descriptor.version
|
||||
}
|
||||
|
||||
@Override
|
||||
def setVersion(version) {
|
||||
def descriptor = script.readJSON file: configuration.filePath
|
||||
descriptor.version = new String(version)
|
||||
script.writeJSON file: configuration.filePath, json: descriptor
|
||||
}
|
||||
}
|
@ -5,13 +5,29 @@ class DockerArtifactVersioning extends ArtifactVersioning {
|
||||
super(script, configuration)
|
||||
}
|
||||
|
||||
@Override
|
||||
def getVersion() {
|
||||
if (configuration.dockerVersionSource == 'FROM')
|
||||
return getVersionFromDockerBaseImageTag(configuration.filePath)
|
||||
else
|
||||
//standard assumption: version is assigned to an env variable
|
||||
return getVersionFromDockerEnvVariable(configuration.filePath, configuration.dockerVersionSource)
|
||||
if(configuration.artifactType == 'appContainer' && configuration.dockerVersionSource == 'appVersion'){
|
||||
//replace + sign if available since + is not allowed in a Docker tag
|
||||
if (script.commonPipelineEnvironment.getArtifactVersion()){
|
||||
return script.commonPipelineEnvironment.getArtifactVersion().replace('+', '_')
|
||||
}else{
|
||||
throw new IllegalArgumentException("No artifact version available for 'dockerVersionSource: appVersion' -> executeBuild needs to run for the application artifact first to set the appVersion attribute.'")
|
||||
}
|
||||
} else if (configuration.dockerVersionSource == 'FROM') {
|
||||
def version = getVersionFromDockerBaseImageTag(configuration.filePath)
|
||||
if (version) {
|
||||
return getVersionFromDockerBaseImageTag(configuration.filePath)
|
||||
} else {
|
||||
throw new IllegalArgumentException("No version information available in FROM statement")
|
||||
}
|
||||
} else {
|
||||
def version = getVersionFromDockerEnvVariable(configuration.filePath, configuration.dockerVersionSource)
|
||||
if (version) {
|
||||
return version
|
||||
} else {
|
||||
throw new IllegalArgumentException("ENV variable '${configuration.dockerVersionSource}' not found.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
17
src/com/sap/piper/versioning/GolangArtifactVersioning.groovy
Normal file
17
src/com/sap/piper/versioning/GolangArtifactVersioning.groovy
Normal file
@ -0,0 +1,17 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
class GolangArtifactVersioning extends ArtifactVersioning {
|
||||
protected GolangArtifactVersioning(script, configuration) {
|
||||
super(script, configuration)
|
||||
}
|
||||
|
||||
@Override
|
||||
def getVersion() {
|
||||
return script.readFile(configuration.filePath).split('\n')[0].trim()
|
||||
}
|
||||
|
||||
@Override
|
||||
def setVersion(version) {
|
||||
script.writeFile file: configuration.filePath, text: version
|
||||
}
|
||||
}
|
20
src/com/sap/piper/versioning/NpmArtifactVersioning.groovy
Normal file
20
src/com/sap/piper/versioning/NpmArtifactVersioning.groovy
Normal file
@ -0,0 +1,20 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
class NpmArtifactVersioning extends ArtifactVersioning {
|
||||
protected NpmArtifactVersioning(script, configuration) {
|
||||
super(script, configuration)
|
||||
}
|
||||
|
||||
@Override
|
||||
def getVersion() {
|
||||
def packageJson = script.readJSON file: configuration.filePath
|
||||
return packageJson.version
|
||||
}
|
||||
|
||||
@Override
|
||||
def setVersion(version) {
|
||||
def packageJson = script.readJSON file: configuration.filePath
|
||||
packageJson.version = new String(version)
|
||||
script.writeJSON file: configuration.filePath, json: packageJson
|
||||
}
|
||||
}
|
17
src/com/sap/piper/versioning/PipArtifactVersioning.groovy
Normal file
17
src/com/sap/piper/versioning/PipArtifactVersioning.groovy
Normal file
@ -0,0 +1,17 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
class PipArtifactVersioning extends ArtifactVersioning {
|
||||
protected PipArtifactVersioning(script, configuration) {
|
||||
super(script, configuration)
|
||||
}
|
||||
|
||||
@Override
|
||||
def getVersion() {
|
||||
return script.readFile(configuration.filePath).split('\n')[0].trim()
|
||||
}
|
||||
|
||||
@Override
|
||||
def setVersion(version) {
|
||||
script.writeFile file: configuration.filePath, text: version
|
||||
}
|
||||
}
|
20
src/com/sap/piper/versioning/SbtArtifactVersioning.groovy
Normal file
20
src/com/sap/piper/versioning/SbtArtifactVersioning.groovy
Normal file
@ -0,0 +1,20 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
class SbtArtifactVersioning extends ArtifactVersioning {
|
||||
protected SbtArtifactVersioning(script, configuration) {
|
||||
super(script, configuration)
|
||||
}
|
||||
|
||||
@Override
|
||||
def getVersion() {
|
||||
def sbtDescriptorJson = script.readJSON file: configuration.filePath
|
||||
return sbtDescriptorJson.version
|
||||
}
|
||||
|
||||
@Override
|
||||
def setVersion(version) {
|
||||
def sbtDescriptorJson = script.readJSON file: configuration.filePath
|
||||
sbtDescriptorJson.version = new String(version)
|
||||
script.writeJSON file: configuration.filePath, json: sbtDescriptorJson
|
||||
}
|
||||
}
|
@ -47,6 +47,9 @@ class ArtifactSetVersionTest extends BasePiperTest {
|
||||
void init() throws Throwable {
|
||||
dockerParameters = [:]
|
||||
|
||||
nullScript.commonPipelineEnvironment.setArtifactVersion(null)
|
||||
nullScript.commonPipelineEnvironment.setGitSshUrl('git@test.url')
|
||||
|
||||
helper.registerAllowedMethod("sshagent", [List.class, Closure.class], { list, closure ->
|
||||
sshAgentList = list
|
||||
return closure()
|
||||
@ -64,7 +67,7 @@ class ArtifactSetVersionTest extends BasePiperTest {
|
||||
|
||||
@Test
|
||||
void testVersioning() {
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', gitSshUrl: 'myGitSshUrl')
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', gitSshUrl: 'myGitSshUrl')
|
||||
|
||||
assertEquals('1.2.3-20180101010203_testCommitId', jer.env.getArtifactVersion())
|
||||
assertEquals('testCommitId', jer.env.getGitCommitId())
|
||||
@ -79,7 +82,7 @@ class ArtifactSetVersionTest extends BasePiperTest {
|
||||
|
||||
@Test
|
||||
void testVersioningWithoutCommit() {
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', commitVersion: false)
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', commitVersion: false)
|
||||
|
||||
assertEquals('1.2.3-20180101010203_testCommitId', jer.env.getArtifactVersion())
|
||||
assertThat(jscr.shell, hasItem("mvn --file 'pom.xml' --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn versions:set -DnewVersion=1.2.3-20180101010203_testCommitId"))
|
||||
@ -87,7 +90,7 @@ class ArtifactSetVersionTest extends BasePiperTest {
|
||||
|
||||
@Test
|
||||
void testVersioningWithoutScript() {
|
||||
jsr.step.call(juStabGitUtils: gitUtils, buildTool: 'maven', commitVersion: false)
|
||||
jsr.step.artifactSetVersion(juStabGitUtils: gitUtils, buildTool: 'maven', commitVersion: false)
|
||||
|
||||
assertEquals('1.2.3-20180101010203_testCommitId', jer.env.getArtifactVersion())
|
||||
assertThat(jscr.shell, hasItem("mvn --file 'pom.xml' --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn versions:set -DnewVersion=1.2.3-20180101010203_testCommitId"))
|
||||
@ -95,14 +98,14 @@ class ArtifactSetVersionTest extends BasePiperTest {
|
||||
|
||||
@Test
|
||||
void testVersioningCustomGitUserAndEMail() {
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', gitSshUrl: 'myGitSshUrl', gitUserEMail: 'test@test.com', gitUserName: 'test')
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', gitSshUrl: 'myGitSshUrl', gitUserEMail: 'test@test.com', gitUserName: 'test')
|
||||
|
||||
assertThat(jscr.shell, hasItem("git -c user.email=\"test@test.com\" -c user.name=\"test\" commit -m 'update version 1.2.3-20180101010203_testCommitId'"))
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVersioningWithTimestamp() {
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', timestamp: '2018')
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', timestamp: '2018')
|
||||
assertEquals('1.2.3-2018_testCommitId', jer.env.getArtifactVersion())
|
||||
}
|
||||
|
||||
@ -110,23 +113,35 @@ class ArtifactSetVersionTest extends BasePiperTest {
|
||||
void testVersioningNoBuildTool() {
|
||||
thrown.expect(Exception)
|
||||
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR buildTool')
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils)
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils)
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVersioningWithCustomTemplate() {
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', versioningTemplate: '${version}-xyz')
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'maven', versioningTemplate: '${version}-xyz')
|
||||
assertEquals('1.2.3-xyz', jer.env.getArtifactVersion())
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVersioningWithTypeAppContainer() {
|
||||
nullScript.commonPipelineEnvironment.setAppContainerProperty('gitSshUrl', 'git@test.url')
|
||||
jer.env.setArtifactVersion('1.2.3-xyz')
|
||||
jsr.step.call(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'docker', artifactType: 'appContainer', dockerVersionSource: 'appVersion')
|
||||
jsr.step.artifactSetVersion(script: jsr.step, juStabGitUtils: gitUtils, buildTool: 'docker', artifactType: 'appContainer', dockerVersionSource: 'appVersion')
|
||||
assertEquals('1.2.3-xyz', jer.env.getArtifactVersion())
|
||||
assertEquals('1.2.3-xyz', jwfr.files['VERSION'])
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCredentialCompatibility() {
|
||||
jsr.step.artifactSetVersion (
|
||||
script: nullScript,
|
||||
buildTool: 'maven',
|
||||
gitCredentialsId: 'testCredentials',
|
||||
juStabGitUtils: gitUtils
|
||||
)
|
||||
assertThat(sshAgentList, hasItem('testCredentials'))
|
||||
}
|
||||
|
||||
void prepareObjectInterceptors(object) {
|
||||
object.metaClass.invokeMethod = helper.getMethodInterceptor()
|
||||
object.metaClass.static.invokeMethod = helper.getMethodInterceptor()
|
||||
|
@ -0,0 +1,32 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.RuleChain
|
||||
import util.BasePiperTest
|
||||
import util.JenkinsReadJsonRule
|
||||
import util.JenkinsWriteJsonRule
|
||||
import util.Rules
|
||||
|
||||
import static org.junit.Assert.assertEquals
|
||||
import static org.junit.Assert.assertTrue
|
||||
|
||||
class DlangArtifactVersioningTest extends BasePiperTest{
|
||||
|
||||
JenkinsReadJsonRule jrjr = new JenkinsReadJsonRule(this, 'test/resources/versioning/DlangArtifactVersioning/')
|
||||
JenkinsWriteJsonRule jwjr = new JenkinsWriteJsonRule(this)
|
||||
|
||||
@Rule
|
||||
public RuleChain ruleChain = Rules
|
||||
.getCommonRules(this)
|
||||
.around(jrjr)
|
||||
.around(jwjr)
|
||||
|
||||
@Test
|
||||
void testVersioning() {
|
||||
DlangArtifactVersioning av = new DlangArtifactVersioning(nullScript, [filePath: 'dub.json'])
|
||||
assertEquals('1.2.3', av.getVersion())
|
||||
av.setVersion('1.2.3-20180101')
|
||||
assertTrue(jwjr.files['dub.json'].contains('1.2.3-20180101'))
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.RuleChain
|
||||
import util.BasePiperTest
|
||||
import util.JenkinsReadFileRule
|
||||
import util.JenkinsWriteFileRule
|
||||
import util.Rules
|
||||
|
||||
import static org.junit.Assert.assertEquals
|
||||
|
||||
class GolangArtifactVersioningTest extends BasePiperTest{
|
||||
|
||||
JenkinsReadFileRule jrfr = new JenkinsReadFileRule(this, 'test/resources/versioning/GolangArtifactVersioning/')
|
||||
JenkinsWriteFileRule jwfr = new JenkinsWriteFileRule(this)
|
||||
|
||||
@Rule
|
||||
public RuleChain ruleChain = Rules
|
||||
.getCommonRules(this)
|
||||
.around(jrfr)
|
||||
.around(jwfr)
|
||||
|
||||
@Test
|
||||
void testVersioning() {
|
||||
GolangArtifactVersioning av = new GolangArtifactVersioning(nullScript, [filePath: 'VERSION'])
|
||||
assertEquals('1.2.3', av.getVersion())
|
||||
av.setVersion('1.2.3-20180101')
|
||||
assertEquals('1.2.3-20180101', jwfr.files['VERSION'])
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.RuleChain
|
||||
import util.BasePiperTest
|
||||
import util.JenkinsReadJsonRule
|
||||
import util.JenkinsWriteJsonRule
|
||||
import util.Rules
|
||||
|
||||
import static org.junit.Assert.assertEquals
|
||||
import static org.junit.Assert.assertTrue
|
||||
|
||||
class NpmArtifactVersioningTest extends BasePiperTest{
|
||||
|
||||
JenkinsReadJsonRule jrjr = new JenkinsReadJsonRule(this, 'test/resources/versioning/NpmArtifactVersioning/')
|
||||
JenkinsWriteJsonRule jwjr = new JenkinsWriteJsonRule(this)
|
||||
|
||||
@Rule
|
||||
public RuleChain ruleChain = Rules
|
||||
.getCommonRules(this)
|
||||
.around(jrjr)
|
||||
.around(jwjr)
|
||||
|
||||
@Test
|
||||
void testVersioning() {
|
||||
NpmArtifactVersioning av = new NpmArtifactVersioning(nullScript, [filePath: 'package.json'])
|
||||
assertEquals('1.2.3', av.getVersion())
|
||||
av.setVersion('1.2.3-20180101')
|
||||
assertTrue(jwjr.files['package.json'].contains('1.2.3-20180101'))
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.RuleChain
|
||||
import util.BasePiperTest
|
||||
import util.JenkinsReadFileRule
|
||||
import util.JenkinsWriteFileRule
|
||||
import util.Rules
|
||||
|
||||
import static org.junit.Assert.assertEquals
|
||||
|
||||
class PipArtifactVersioningTest extends BasePiperTest{
|
||||
|
||||
JenkinsReadFileRule jrfr = new JenkinsReadFileRule(this, 'test/resources/versioning/PipArtifactVersioning/')
|
||||
JenkinsWriteFileRule jwfr = new JenkinsWriteFileRule(this)
|
||||
|
||||
@Rule
|
||||
public RuleChain ruleChain = Rules
|
||||
.getCommonRules(this)
|
||||
.around(jrfr)
|
||||
.around(jwfr)
|
||||
|
||||
@Test
|
||||
void testVersioning() {
|
||||
PipArtifactVersioning av = new PipArtifactVersioning(nullScript, [filePath: 'version.txt'])
|
||||
assertEquals('1.2.3', av.getVersion())
|
||||
av.setVersion('1.2.3-20180101')
|
||||
assertEquals('1.2.3-20180101', jwfr.files['version.txt'])
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.sap.piper.versioning
|
||||
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.RuleChain
|
||||
import util.BasePiperTest
|
||||
import util.JenkinsReadJsonRule
|
||||
import util.JenkinsWriteJsonRule
|
||||
import util.Rules
|
||||
|
||||
import static org.junit.Assert.assertEquals
|
||||
import static org.junit.Assert.assertTrue
|
||||
|
||||
class SbtArtifactVersioningTest extends BasePiperTest{
|
||||
|
||||
JenkinsReadJsonRule jrjr = new JenkinsReadJsonRule(this, 'test/resources/versioning/SbtArtifactVersioning/')
|
||||
JenkinsWriteJsonRule jwjr = new JenkinsWriteJsonRule(this)
|
||||
|
||||
@Rule
|
||||
public RuleChain ruleChain = Rules
|
||||
.getCommonRules(this)
|
||||
.around(jrjr)
|
||||
.around(jwjr)
|
||||
|
||||
@Test
|
||||
void testVersioning() {
|
||||
SbtArtifactVersioning av = new SbtArtifactVersioning(nullScript, [filePath: 'sbtDescriptor.json'])
|
||||
assertEquals('1.2.3', av.getVersion())
|
||||
av.setVersion('1.2.3-20180101')
|
||||
assertTrue(jwjr.files['sbtDescriptor.json'].contains('1.2.3-20180101'))
|
||||
}
|
||||
}
|
34
test/groovy/util/JenkinsWriteJsonRule.groovy
Normal file
34
test/groovy/util/JenkinsWriteJsonRule.groovy
Normal file
@ -0,0 +1,34 @@
|
||||
package util
|
||||
|
||||
import com.lesfurets.jenkins.unit.BasePipelineTest
|
||||
import org.junit.rules.TestRule
|
||||
import org.junit.runner.Description
|
||||
import org.junit.runners.model.Statement
|
||||
|
||||
class JenkinsWriteJsonRule implements TestRule {
|
||||
|
||||
final BasePipelineTest testInstance
|
||||
|
||||
Map files = [:]
|
||||
|
||||
JenkinsWriteJsonRule(BasePipelineTest testInstance) {
|
||||
this.testInstance = testInstance
|
||||
}
|
||||
|
||||
@Override
|
||||
Statement apply(Statement base, Description description) {
|
||||
return statement(base)
|
||||
}
|
||||
|
||||
private Statement statement(final Statement base) {
|
||||
return new Statement() {
|
||||
@Override
|
||||
void evaluate() throws Throwable {
|
||||
|
||||
testInstance.helper.registerAllowedMethod( 'writeJSON', [Map.class], {m -> files[m.file] = m.json.toString()})
|
||||
|
||||
base.evaluate()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "sap-pipeline-test",
|
||||
"version": "1.2.3",
|
||||
"description": "package.json for testing",
|
||||
}
|
@ -0,0 +1 @@
|
||||
1.2.3
|
15
test/resources/versioning/NpmArtifactVersioning/package.json
Normal file
15
test/resources/versioning/NpmArtifactVersioning/package.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "sap-pipeline-test",
|
||||
"version": "1.2.3",
|
||||
"private": false,
|
||||
"description": "package.json for testing",
|
||||
"engines": {
|
||||
"node": "6.x"
|
||||
},
|
||||
"dependencies": {
|
||||
"apn": "1.7.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chai": "^3.4.1"
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
1.2.3
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "sap-pipeline-test",
|
||||
"version": "1.2.3",
|
||||
}
|
@ -8,13 +8,14 @@ import groovy.text.SimpleTemplateEngine
|
||||
|
||||
@Field String STEP_NAME = 'artifactSetVersion'
|
||||
@Field Set GENERAL_CONFIG_KEYS = ['collectTelemetryData']
|
||||
@Field Map CONFIG_KEY_COMPATIBILITY = [gitSshKeyCredentialsId: 'gitCredentialsId']
|
||||
@Field Set STEP_CONFIG_KEYS = [
|
||||
'artifactType',
|
||||
'buildTool',
|
||||
'commitVersion',
|
||||
'dockerVersionSource',
|
||||
'filePath',
|
||||
'gitCredentialsId',
|
||||
'gitSshKeyCredentialsId',
|
||||
'gitUserEMail',
|
||||
'gitUserName',
|
||||
'gitSshUrl',
|
||||
@ -25,7 +26,7 @@ import groovy.text.SimpleTemplateEngine
|
||||
]
|
||||
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS.plus('gitCommitId')
|
||||
|
||||
def call(Map parameters = [:]) {
|
||||
def call(Map parameters = [:], Closure body = null) {
|
||||
|
||||
handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters) {
|
||||
|
||||
@ -43,49 +44,45 @@ def call(Map parameters = [:]) {
|
||||
// load default & individual configuration
|
||||
Map config = ConfigurationHelper
|
||||
.loadStepDefaults(this)
|
||||
.mixinGeneralConfig(script.commonPipelineEnvironment, GENERAL_CONFIG_KEYS)
|
||||
.mixinStepConfig(script.commonPipelineEnvironment, STEP_CONFIG_KEYS)
|
||||
.mixinStageConfig(script.commonPipelineEnvironment, parameters.stageName?:env.STAGE_NAME, STEP_CONFIG_KEYS)
|
||||
.mixinGeneralConfig(script.commonPipelineEnvironment, STEP_CONFIG_KEYS, this, CONFIG_KEY_COMPATIBILITY)
|
||||
.mixinStepConfig(script.commonPipelineEnvironment, STEP_CONFIG_KEYS, this, CONFIG_KEY_COMPATIBILITY)
|
||||
.mixinStageConfig(script.commonPipelineEnvironment, parameters.stageName?:env.STAGE_NAME, STEP_CONFIG_KEYS, this, CONFIG_KEY_COMPATIBILITY)
|
||||
.mixin(gitCommitId: gitUtils.getGitCommitIdOrNull())
|
||||
.mixin(parameters, PARAMETER_KEYS)
|
||||
.mixin(parameters, PARAMETER_KEYS, this, CONFIG_KEY_COMPATIBILITY)
|
||||
.withMandatoryProperty('buildTool')
|
||||
.dependingOn('buildTool').mixin('filePath')
|
||||
.dependingOn('buildTool').mixin('versioningTemplate')
|
||||
.use()
|
||||
|
||||
config = new ConfigurationHelper(config)
|
||||
.addIfEmpty('gitSshUrl', (config.buildTool == 'docker' && config.artifactType == 'appContainer')?script.commonPipelineEnvironment.getAppContainerProperty('gitSshUrl'):script.commonPipelineEnvironment.getGitSshUrl())
|
||||
.addIfEmpty('timestamp', getTimestamp(config.timestampTemplate))
|
||||
.withMandatoryProperty('gitSshUrl')
|
||||
.use()
|
||||
|
||||
new Utils().pushToSWA([step: STEP_NAME, stepParam1: config.buildTool], config)
|
||||
|
||||
if (!config.filePath)
|
||||
config.filePath = config[config.buildTool].filePath //use default configuration
|
||||
def artifactVersioning = ArtifactVersioning.getArtifactVersioning(config.buildTool, script, config)
|
||||
def currentVersion = artifactVersioning.getVersion()
|
||||
|
||||
def newVersion
|
||||
def artifactVersioning = ArtifactVersioning.getArtifactVersioning(config.buildTool, script, config)
|
||||
|
||||
if(config.artifactType == 'appContainer' && config.dockerVersionSource == 'appVersion'){
|
||||
if (script.commonPipelineEnvironment.getArtifactVersion())
|
||||
//replace + sign if available since + is not allowed in a Docker tag
|
||||
newVersion = script.commonPipelineEnvironment.getArtifactVersion().replace('+', '_')
|
||||
else
|
||||
error ("[${STEP_NAME}] No artifact version available for 'dockerVersionSource: appVersion' -> executeBuild needs to run for the application artifact first to set the artifactVersion for the application artifact.'")
|
||||
if (config.artifactType == 'appContainer' && config.dockerVersionSource == 'appVersion'){
|
||||
newVersion = currentVersion
|
||||
} else {
|
||||
def currentVersion = artifactVersioning.getVersion()
|
||||
|
||||
def timestamp = config.timestamp ? config.timestamp : getTimestamp(config.timestampTemplate)
|
||||
|
||||
def versioningTemplate = config.versioningTemplate ? config.versioningTemplate : config[config.buildTool].versioningTemplate
|
||||
//defined in default configuration
|
||||
def binding = [version: currentVersion, timestamp: timestamp, commitId: config.gitCommitId]
|
||||
def templatingEngine = new SimpleTemplateEngine()
|
||||
def template = templatingEngine.createTemplate(versioningTemplate).make(binding)
|
||||
newVersion = template.toString()
|
||||
def binding = [version: currentVersion, timestamp: config.timestamp, commitId: config.gitCommitId]
|
||||
newVersion = new SimpleTemplateEngine().createTemplate(config.versioningTemplate).make(binding).toString()
|
||||
}
|
||||
|
||||
artifactVersioning.setVersion(newVersion)
|
||||
|
||||
def gitCommitId
|
||||
if(body != null){
|
||||
body(newVersion)
|
||||
}
|
||||
|
||||
if (config.commitVersion) {
|
||||
sh 'git add .'
|
||||
|
||||
sshagent([config.gitCredentialsId]) {
|
||||
sshagent([config.gitSshKeyCredentialsId]) {
|
||||
def gitUserMailConfig = ''
|
||||
if (config.gitUserName && config.gitUserEMail)
|
||||
gitUserMailConfig = "-c user.email=\"${config.gitUserEMail}\" -c user.name=\"${config.gitUserName}\""
|
||||
@ -99,17 +96,17 @@ def call(Map parameters = [:]) {
|
||||
sh "git tag ${config.tagPrefix}${newVersion}"
|
||||
sh "git push origin ${config.tagPrefix}${newVersion}"
|
||||
|
||||
gitCommitId = gitUtils.getGitCommitIdOrNull()
|
||||
config.gitCommitId = gitUtils.getGitCommitIdOrNull()
|
||||
}
|
||||
}
|
||||
|
||||
if (config.buildTool == 'docker' && config.artifactType == 'appContainer') {
|
||||
script.commonPipelineEnvironment.setAppContainerProperty('artifactVersion', newVersion)
|
||||
script.commonPipelineEnvironment.setAppContainerProperty('gitCommitId', gitCommitId)
|
||||
script.commonPipelineEnvironment.setAppContainerProperty('gitCommitId', config.gitCommitId)
|
||||
} else {
|
||||
//standard case
|
||||
script.commonPipelineEnvironment.setArtifactVersion(newVersion)
|
||||
script.commonPipelineEnvironment.setGitCommitId(gitCommitId)
|
||||
script.commonPipelineEnvironment.setGitCommitId(config.gitCommitId)
|
||||
}
|
||||
|
||||
echo "[${STEP_NAME}]New version: ${newVersion}"
|
||||
|
Loading…
Reference in New Issue
Block a user