Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge remote-tracking branch 'origin/master' into JENKINS-36472
Conflicts:
	src/main/java/de/tracetronic/jenkins/plugins/ecutest/ETPlugin.java
  • Loading branch information
cpoenisch committed Jan 6, 2017
2 parents 4348bf4 + 5e8f792 commit e249323
Show file tree
Hide file tree
Showing 81 changed files with 2,237 additions and 790 deletions.
107 changes: 69 additions & 38 deletions Jenkinsfile
@@ -1,60 +1,91 @@
#!groovy

/* Required Jenkins plugins:
- https://wiki.jenkins-ci.org/display/JENKINS/Timestamper
- https://wiki.jenkins-ci.org/display/JENKINS/Static+Code+Analysis+Plug-ins
- https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin
- https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin
- https://wiki.jenkins-ci.org/display/JENKINS/PMD+Plugin
- https://wiki.jenkins-ci.org/display/JENKINS/DRY+Plugin
- https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin
- https://wiki.jenkins-ci.org/display/JENKINS/Javadoc+Plugin
- https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin
*/

// Only keep the 10 most recent builds
properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']]])

// Pipeline steps
timestamps {
node {
checkout scm

def mvnHome = tool 'M3'
env.JAVA_HOME = tool 'JDK7'
stage('Checkout') {
checkout scm
}

if (isUnix()) {
stage 'Build'
sh "${mvnHome}/bin/mvn -B -e -V -U clean package -DskipTests"
stage('Build') {
mvn 'clean package -B -V -U -e -DskipTests'
}

stage 'Static Code Analysis'
sh "${mvnHome}/bin/mvn -B -e checkstyle:check pmd:check pmd:cpd-check findbugs:check"
stage('Static Code Analysis') {
mvn 'checkstyle:check pmd:check pmd:cpd-check findbugs:check -B -e'
step([$class: 'CheckStylePublisher', pattern: 'target/checkstyle-result.xml'])
step([$class: 'FindBugsPublisher', pattern: 'target/findbugsXml.xml'])
step([$class: 'PmdPublisher', pattern: 'target/pmd.xml'])
step([$class: 'DryPublisher', pattern: 'target/cpd.xml'])
step([$class: 'TasksPublisher', high: 'FIXME', low: '', normal: 'TODO', pattern: 'src/**/*.java'])
}

stage 'Documentation'
sh "${mvnHome}/bin/mvn -B -e javadoc:javadoc"
stage('Documentation') {
mvn 'javadoc:javadoc -B -e'
step([$class: 'JavadocArchiver', javadocDir: 'target/site/apidocs', keepAll: false])
}

stage 'Unit Tests'
sh "${mvnHome}/bin/mvn -B -e test-compile jacoco:prepare-agent surefire:test"
step([$class: 'JUnitResultArchiver', testResults: 'target/surefire-reports/*.xml'])
stage('Unit Tests') {
mvn 'test-compile jacoco:prepare-agent surefire:test -B -e'
step([$class: 'JUnitResultArchiver', testResults: 'target/surefire-reports/TEST-*.xml'])
}

stage 'Code Coverage'
stage('Code Coverage') {
step([$class: 'JacocoPublisher', execPattern: 'target/jacoco.exec', exclusionPattern: '**/Messages.class'])
}

stage 'Archive Artifacts'
step([$class: 'ArtifactArchiver', artifacts: 'target/ecutest.hpi', fingerprint: true])
} else {
stage 'Build'
bat "${mvnHome}\\bin\\mvn -B -e -V -U clean package -DskipTests"

stage 'Static Code Analysis'
bat "${mvnHome}\\bin\\mvn -B -e checkstyle:check pmd:check pmd:cpd-check findbugs:check"
step([$class: 'CheckStylePublisher', pattern: 'target/checkstyle-result.xml'])
step([$class: 'FindBugsPublisher', pattern: 'target/findbugsXml.xml'])
step([$class: 'PmdPublisher', pattern: 'target/pmd.xml'])
step([$class: 'DryPublisher', pattern: 'target/cpd.xml'])
step([$class: 'TasksPublisher', high: 'FIXME', low: '', normal: 'TODO', pattern: 'src/**/*.java'])
stage('Archive Artifacts') {
step([$class: 'ArtifactArchiver', artifacts: 'target/*.hpi,target/*.jpi', fingerprint: true])
}
}
}

stage 'Documentation'
bat "${mvnHome}\\bin\\mvn -B -e javadoc:javadoc"
step([$class: 'JavadocArchiver', javadocDir: 'target/site/apidocs', keepAll: false])
// Run Maven from tool "mvn"
void mvn(def args) {
// Get JDK tool installation
def jdkHome = tool name: 'JDK7', type: 'hudson.model.JDK'

stage 'Unit Tests'
bat "${mvnHome}\\bin\\mvn -B -e test-compile jacoco:prepare-agent surefire:test"
step([$class: 'JUnitResultArchiver', testResults: 'target/surefire-reports/*.xml'])
// Get Maven tool installation
def mvnHome = tool name: 'M3', type: 'hudson.tasks.Maven$MavenInstallation'

stage 'Code Coverage'
step([$class: 'JacocoPublisher', execPattern: 'target/jacoco.exec', exclusionPattern: '**/Messages.class'])
// Set JAVA_HOME, MAVEN_HOME and special PATH variables
List javaEnv = [
"PATH+JDK=${jdkHome}/bin",
"PATH+MVN=${mvnHome}/bin",
"JAVA_HOME=${jdkHome}",
"MAVEN_HOME=${mvnHome}",
// Additional variables needed by tests on machines
// that don't have global git user.name and user.email configured.
'GIT_COMMITTER_EMAIL=me@hatescake.com',
'GIT_COMMITTER_NAME=Hates',
'GIT_AUTHOR_NAME=Cake',
'GIT_AUTHOR_EMAIL=hates@cake.com',
'LOGNAME=hatescake'
]

stage 'Archive Artifacts'
step([$class: 'ArtifactArchiver', artifacts: 'target/ecutest.hpi', fingerprint: true])
// Call Maven within Java environment
withEnv(javaEnv) {
timeout(time: 60, unit: 'MINUTES') {
if (isUnix()) {
sh "${mvnHome}/bin/mvn ${args}"
} else {
bat "${mvnHome}\\bin\\mvn ${args}"
}
}
}
}
52 changes: 41 additions & 11 deletions pom.xml
Expand Up @@ -34,13 +34,13 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>2.14</version>
<version>2.19</version>
<relativePath />
</parent>

<groupId>de.tracetronic.jenkins.plugins</groupId>
<artifactId>ecutest</artifactId>
<version>1.12-SNAPSHOT</version>
<version>1.15-SNAPSHOT</version>
<packaging>hpi</packaging>

<name>TraceTronic ECU-TEST Plugin</name>
Expand Down Expand Up @@ -87,16 +87,20 @@
<icon-shim.version>2.0.3</icon-shim.version>
<junit.version>1.3</junit.version>
<job-dsl.version>1.37</job-dsl.version>
<structs.version>1.5</structs.version>

<!-- Static code analysis -->
<maven-checkstyle-plugin.version>2.17</maven-checkstyle-plugin.version>
<maven-pmd-plugin.version>3.6</maven-pmd-plugin.version>
<maven-pmd-plugin.version>3.7</maven-pmd-plugin.version>

<!-- Test scope -->
<equalsverifier.version>2.1.5</equalsverifier.version>
<mockito-core.version>1.10.19</mockito-core.version>
<workflow.version>1.4.2</workflow.version>
<equalsverifier.version>2.1.7</equalsverifier.version>
<mockito-core.version>2.2.21</mockito-core.version>
<jacoco.version>0.7.7.201606060606</jacoco.version>
<workflow-aggregator.version>1.4.3</workflow-aggregator.version>
<workflow-basic-steps.version>1.4.3</workflow-basic-steps.version>
<workflow-cps.version>1.4.3</workflow-cps.version>
<workflow-step-api.version>1.4.3</workflow-step-api.version>
<concurrency>2</concurrency>

<!-- JACOB -->
Expand All @@ -114,13 +118,13 @@
</repository>
<repository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
<url>https://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
<url>https://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>

Expand Down Expand Up @@ -174,6 +178,26 @@
<version>${job-dsl.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jvnet.hudson</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7-jenkins-1</version>
<exclusions>
<exclusion>
<groupId>xmlpull</groupId>
<artifactId>xmlpull</artifactId>
</exclusion>
<exclusion>
<groupId>xpp3</groupId>
<artifactId>xpp3_min</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>structs</artifactId>
<version>${structs.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
Expand All @@ -195,19 +219,25 @@
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-aggregator</artifactId>
<version>${workflow.version}</version>
<version>${workflow-aggregator.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-basic-steps</artifactId>
<version>${workflow-basic-steps.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-cps</artifactId>
<version>${workflow.version}</version>
<version>${workflow-cps.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-step-api</artifactId>
<version>${workflow.version}</version>
<version>${workflow-step-api.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
Expand Down
19 changes: 17 additions & 2 deletions src/main/java/de/tracetronic/jenkins/plugins/ecutest/ETPlugin.java
Expand Up @@ -41,6 +41,8 @@
import org.jenkins.ui.icon.IconSet;
import org.jenkins.ui.icon.IconType;

import de.tracetronic.jenkins.plugins.ecutest.report.atx.ATXPublisher.DescriptorImpl;

/**
* Main entry point to this plugin for the {@link Jenkins} instance.
*
Expand All @@ -56,12 +58,12 @@ public class ETPlugin extends Plugin {
/**
* Defines the maximum allowed ECU-TEST version supported by this plugin.
*/
public static final ToolVersion ET_MAX_VERSION = new ToolVersion(6, 4, 0, 0);
public static final ToolVersion ET_MAX_VERSION = new ToolVersion(6, 5, 0, 0);

/**
* Defines the TEST-GUIDE version that the provided ATX configuration is based on.
*/
public static final ToolVersion ATX_VERSION = new ToolVersion(1, 33, 0, 0);
public static final ToolVersion ATX_VERSION = new ToolVersion(1, 38, 0, 0);

/**
* Helper class to easily compare tool versions defined by major, minor, micro and qualifier version. Mainly used to
Expand Down Expand Up @@ -235,4 +237,17 @@ public void start() throws Exception {
);
}
}

@Override
public void postInitialize() throws Exception {
super.postInitialize();
final Jenkins instance = Jenkins.getInstance();
if (instance != null) {
// Synchronize current ATX configuration with the default one.
final DescriptorImpl descriptor = instance.getDescriptorByType(DescriptorImpl.class);
if (descriptor != null) {
descriptor.syncWithDefaultConfig();
}
}
}
}
@@ -1,5 +1,5 @@
/**
* Copyright (c) 2015-2016 TraceTronic GmbH
* Copyright (c) 2015-2017 TraceTronic GmbH
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
Expand Down Expand Up @@ -103,7 +103,7 @@ protected VirtualFile getArchiveTargetDir(final File rootDir) {
* @return the last build with report artifacts or {@code null} if no proper build exists
*/
@CheckForNull
protected abstract Run<?, ?> getLastReportBuild(final Job<?, ?> project);
protected abstract Run<?, ?> getLastReportBuild(Job<?, ?> project);

@Override
public String getIconFileName() {
Expand Down
@@ -0,0 +1,68 @@
/**
* Copyright (c) 2015-2016 TraceTronic GmbH
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of TraceTronic GmbH nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package de.tracetronic.jenkins.plugins.ecutest.report;

import hudson.model.AbstractProject;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Publisher;
import hudson.tools.ToolInstallation;
import de.tracetronic.jenkins.plugins.ecutest.tool.installation.ETInstallation;

/**
* Common base descriptor class for all report related publisher descriptors implemented in this plugin.
*
* @author Christian Pönisch <christian.poenisch@tracetronic.de>
*/
public abstract class AbstractReportDescriptor extends BuildStepDescriptor<Publisher> {

/**
* Gets the tool installations.
*
* @return the installations
*/
public ETInstallation[] getToolInstallations() {
return getToolDescriptor().getInstallations();
}

/**
* Gets the tool descriptor holding the installations.
*
* @return the tool descriptor
*/
public ETInstallation.DescriptorImpl getToolDescriptor() {
return ToolInstallation.all().get(ETInstallation.DescriptorImpl.class);
}

@SuppressWarnings("rawtypes")
@Override
public boolean isApplicable(final Class<? extends AbstractProject> jobType) {
return true;
}
}

0 comments on commit e249323

Please sign in to comment.