Skip to content

Commit

Permalink
Disable download logs in Maven by default (#159)
Browse files Browse the repository at this point in the history
Disable download logs in Maven by default

This commit adds a flag to Maven by default, which disables the messages
like "Downloading from central".

The logger is set to level "warn", so errors will still be visible, but
successful messages won't clutter logs anymore.

This option is also set by default in the GitLab CI template file for
maven.

See [1] for reference on the option.

1: https://stackoverflow.com/a/35653426/8843830
  • Loading branch information
fwilhe authored Jun 6, 2018
1 parent a4935a1 commit 6dc1380
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 27 deletions.
22 changes: 12 additions & 10 deletions documentation/docs/steps/mavenExecute.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@ Executes a maven command inside a Docker container.

## Parameters

| parameter | mandatory | default | example values |
| ---------------------|-----------|-------------------|----------------------------|
| `dockerImage` | no | 'maven:3.5-jdk-7' | |
| `globalSettingsFile` | no | | 'local_folder/settings.xml'|
| `projectSettingsFile`| no | | |
| `pomPath` | no | | 'local_folder/m2' |
| `flags` | no | | '-o' |
| `goals` | no | | 'clean install' |
| `m2Path` | no | | 'local_folder/m2' |
| `defines` | no | | '-Dmaven.tests.skip=true' |
| parameter | mandatory | default | example values |
| -------------------------------|-----------|-------------------|----------------------------|
| `dockerImage` | no | 'maven:3.5-jdk-7' | |
| `globalSettingsFile` | no | | 'local_folder/settings.xml'|
| `projectSettingsFile` | no | | |
| `pomPath` | no | | 'local_folder/m2' |
| `flags` | no | | '-o' |
| `goals` | no | | 'clean install' |
| `m2Path` | no | | 'local_folder/m2' |
| `defines` | no | | '-Dmaven.tests.skip=true' |
| `logSuccessfulMavenTransfers` | no | `false` | 'true' |

* `dockerImage` Name of the docker image that should be used.
* `globalSettingsFile` Path or url to the mvn settings file that should be used as global settings file.
Expand All @@ -25,6 +26,7 @@ Executes a maven command inside a Docker container.
* `goals` Maven goals that should be executed.
* `m2Path` Path to the location of the local repository that should be used.
* `defines` Additional properties.
* `logSuccessfulMavenTransfers` configures maven to log successful downloads. This is set to `false` by default to reduce the noise in build logs.

## Step configuration
The following parameters can also be specified as step parameters using the global configuration file:
Expand Down
1 change: 1 addition & 0 deletions resources/default_pipeline_environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ steps:
influxServer: 'jenkins'
mavenExecute:
dockerImage: 'maven:3.5-jdk-7'
logSuccessfulMavenTransfers: false
mtaBuild:
buildTarget: 'NEO'
mtaJarLocation: 'mta.jar'
Expand Down
6 changes: 3 additions & 3 deletions test/groovy/ArtifactSetVersionTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class ArtifactSetVersionTest extends BasePiperTest {
assertEquals('1.2.3-20180101010203_testCommitId', jer.env.getArtifactVersion())
assertEquals('testCommitId', jer.env.getGitCommitId())

assertThat(jscr.shell, hasItem("mvn --file 'pom.xml' versions:set -DnewVersion=1.2.3-20180101010203_testCommitId"))
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"))
assertThat(jscr.shell, hasItem('git add .'))
assertThat(jscr.shell, hasItem("git commit -m 'update version 1.2.3-20180101010203_testCommitId'"))
assertThat(jscr.shell, hasItem("git remote set-url origin myGitSshUrl"))
Expand All @@ -82,15 +82,15 @@ class ArtifactSetVersionTest extends BasePiperTest {
jsr.step.call(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' versions:set -DnewVersion=1.2.3-20180101010203_testCommitId"))
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"))
}

@Test
void testVersioningWithoutScript() {
jsr.step.call(juStabGitUtils: gitUtils, buildTool: 'maven', commitVersion: false)

assertEquals('1.2.3-20180101010203_testCommitId', jer.env.getArtifactVersion())
assertThat(jscr.shell, hasItem("mvn --file 'pom.xml' versions:set -DnewVersion=1.2.3-20180101010203_testCommitId"))
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"))
}

@Test
Expand Down
25 changes: 15 additions & 10 deletions test/groovy/MavenExecuteTest.groovy
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@

import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain

import util.BasePiperTest
import util.JenkinsDockerExecuteRule
import util.JenkinsShellCallRule
import util.JenkinsStepRule
import util.Rules

import static org.junit.Assert.assertEquals
import static org.junit.Assert.assertTrue

import util.BasePiperTest
import util.JenkinsShellCallRule
import util.Rules

class MavenExecuteTest extends BasePiperTest {

Map dockerParameters
Expand All @@ -35,7 +31,16 @@ class MavenExecuteTest extends BasePiperTest {
jsr.step.mavenExecute(script: nullScript, goals: 'clean install')
assertEquals('maven:3.5-jdk-7', jder.dockerParams.dockerImage)

assert jscr.shell[0] == 'mvn clean install'
assert jscr.shell[0] == 'mvn --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install'
}

@Test
void testExecuteBasicMavenCommandWithDownloadLogsEnabled() throws Exception {

jsr.step.mavenExecute(script: nullScript, goals: 'clean install', logSuccessfulMavenTransfers: true)
assertEquals('maven:3.5-jdk-7', jder.dockerParams.dockerImage)

assert jscr.shell[0] == 'mvn --batch-mode clean install'
}

@Test
Expand All @@ -52,7 +57,7 @@ class MavenExecuteTest extends BasePiperTest {
m2Path: 'm2Path',
defines: '-Dmaven.tests.skip=true')
assertEquals('maven:3.5-jdk-8-alpine', jder.dockerParams.dockerImage)
String mvnCommand = "mvn --global-settings 'globalSettingsFile.xml' -Dmaven.repo.local='m2Path' --settings 'projectSettingsFile.xml' --file 'pom.xml' -o clean install -Dmaven.tests.skip=true"
String mvnCommand = "mvn --global-settings 'globalSettingsFile.xml' -Dmaven.repo.local='m2Path' --settings 'projectSettingsFile.xml' --file 'pom.xml' -o --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install -Dmaven.tests.skip=true"
assertTrue(jscr.shell.contains(mvnCommand))
}

Expand All @@ -62,6 +67,6 @@ class MavenExecuteTest extends BasePiperTest {
jsr.step.mavenExecute(script: nullScript, goals: 'clean install')
assertEquals('maven:3.5-jdk-7', jder.dockerParams.dockerImage)

assert jscr.shell[0] == 'mvn clean install'
assert jscr.shell[0] == 'mvn --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install'
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ class MavenArtifactVersioningTest extends BasePiperTest{
av = new MavenArtifactVersioning(nullScript, [filePath: 'pom.xml'])
assertEquals('1.2.3', av.getVersion())
av.setVersion('1.2.3-20180101')
assertEquals('mvn --file \'pom.xml\' versions:set -DnewVersion=1.2.3-20180101', jscr.shell[0])
assertEquals('mvn --file \'pom.xml\' --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn versions:set -DnewVersion=1.2.3-20180101', jscr.shell[0])
}

@Test
void testVersioningCustomFilePathSnapshot() {
av = new MavenArtifactVersioning(nullScript, [filePath: 'snapshot/pom.xml'])
assertEquals('1.2.3', av.getVersion())
av.setVersion('1.2.3-20180101')
assertEquals('mvn --file \'snapshot/pom.xml\' versions:set -DnewVersion=1.2.3-20180101', jscr.shell[0])
assertEquals('mvn --file \'snapshot/pom.xml\' --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn versions:set -DnewVersion=1.2.3-20180101', jscr.shell[0])
}
}
17 changes: 15 additions & 2 deletions vars/mavenExecute.groovy
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import com.sap.piper.ConfigurationLoader
import com.sap.piper.ConfigurationMerger

def call(Map parameters = [:]) {
Expand All @@ -17,7 +16,8 @@ def call(Map parameters = [:]) {
'flags',
'goals',
'm2Path',
'defines'
'defines',
'logSuccessfulMavenTransfers'
]
Set stepConfigurationKeys = [
'dockerImage',
Expand Down Expand Up @@ -66,6 +66,19 @@ def call(Map parameters = [:]) {
command += " ${mavenFlags}"
}

// Always use Maven's batch mode
if (!(command.contains('-B') || command.contains('--batch-mode'))){
command += ' --batch-mode'
}

// Disable log for successful transfers by default. Note this requires the batch-mode flag.
final String disableSuccessfulMavenTransfersLogFlag = ' -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'
if (!configuration.logSuccessfulMavenTransfers) {
if (!command.contains(disableSuccessfulMavenTransfersLogFlag)) {
command += disableSuccessfulMavenTransfersLogFlag
}
}

def mavenGoals = configuration.goals
if (mavenGoals?.trim()) {
command += " ${mavenGoals}"
Expand Down

0 comments on commit 6dc1380

Please sign in to comment.