- Migrated the Jenkinsfile to match that of the PLC4X project
diff --git a/Jenkinsfile b/Jenkinsfile
index fab451c..2edcad1 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -18,107 +18,253 @@
* limitations under the License.
*
*/
-node('ubuntu') {
+pipeline {
- currentBuild.result = "SUCCESS"
-
- echo 'Building Branch: ' + env.BRANCH_NAME
-
- // Setup the required environment variables.
- def mvnHome = "${tool 'Maven 3 (latest)'}"
- env.JAVA_HOME="${tool 'JDK 1.8 (latest)'}"
- env.PATH="${env.JAVA_HOME}/bin:${env.PATH}"
-
- // Make sure the feature branches don't change the SNAPSHOTS in Nexus.
- def mavenGoal = "install"
- def mavenLocalRepo = ""
- if(env.BRANCH_NAME == 'develop') {
- mavenGoal = "sonar:sonar deploy"
- } else {
- mavenLocalRepo = "-Dmaven.repo.local=${env.WORKSPACE}/.repository"
+ agent {
+ node {
+ label 'ubuntu'
+ }
}
- def mavenFailureMode = "" // consider "--fail-at-end"? Odd ordering side effects?
- try {
- /*stage ('Cleanup') {
- echo 'Cleaning up the workspace'
- deleteDir()
- }*/
+ environment {
+ // It seems the login the jenkins slave uses, doesn't pick up the environment changes,
+ // so we have to try to manually add theme here.
+ MAVEN_HOME = '/opt/maven'
+ PATH = "${MAVEN_HOME}/bin:${env.PATH}"
- stage ('Checkout') {
- echo 'Checking out branch ' + env.BRANCH_NAME
- checkout scm
+ PLC4X_BUILD_ON_JENKINS = true
+ JENKINS_PROFILE = 'jenkins-build'
+ // On non develop build we don't want to pollute the global m2 repo
+ MVN_LOCAL_REPO_OPT = '-Dmaven.repo.local=.repository'
+ // Test failures will be handled by the jenkins junit steps and mark the build as unstable.
+ MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true'
+
+ JAVA_HOME="${tool 'JDK 1.8 (latest)'}"
+ }
+
+ tools {
+ maven 'Maven 3 (latest)'
+ jdk 'JDK 1.8 (latest)'
+ }
+
+ options {
+ // Kill this job after one hour.
+ timeout(time: 1, unit: 'HOURS')
+ // When we have test-fails e.g. we don't need to run the remaining steps
+ skipStagesAfterUnstable()
+ buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '3'))
+ }
+
+ stages {
+ stage('Initialization') {
+ steps {
+ echo 'Building Branch: ' + env.BRANCH_NAME
+ echo 'Using PATH = ' + env.PATH
+ }
}
- stage ('Clean') {
- echo 'Cleaning Edgent'
- sh "${mvnHome}/bin/mvn ${mavenLocalRepo} -Pplatform-android,platform-java7,distribution clean"
+ stage('Cleanup') {
+ steps {
+ echo 'Cleaning up the workspace'
+ deleteDir()
+ }
}
- stage ('Build Edgent') {
- echo 'Building Edgent'
- withSonarQubeEnv('ASF Sonar Analysis') {
- sh "${mvnHome}/bin/mvn ${mavenFailureMode} ${mavenLocalRepo} -Pplatform-android,platform-java7,distribution,toolchain -Djava8.home=${env.JAVA_HOME} -Dedgent.build.ci=true ${mavenGoal}"
+ stage('Checkout') {
+ steps {
+ echo 'Checking out branch ' + env.BRANCH_NAME
+ checkout scm
+ }
+ }
+
+ stage('Build') {
+ when {
+ expression {
+ env.BRANCH_NAME != 'develop'
+ }
+ }
+ steps {
+ echo 'Building'
+ sh 'mvn -P${JENKINS_PROFILE} ${MVN_TEST_FAIL_IGNORE} ${MVN_LOCAL_REPO_OPT} clean install'
+ }
+ post {
+ always {
+ junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+ junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+ }
+ }
+ }
+
+ stage('Build develop') {
+ when {
+ branch 'develop'
+ }
+ steps {
+ echo 'Building'
+ // We'll deploy to a relative directory so we can save
+ // that and deploy in a later step on a different node
+ sh 'mvn ${MVN_TEST_FAIL_IGNORE} -Pplatform-android,platform-java7,distribution,toolchain -Djava8.home=${JAVA_HOME} -Dedgent.build.ci=true -DaltDeploymentRepository=snapshot-repo::default::file:./local-snapshots-dir clean deploy'
+ }
+ post {
+ always {
+ junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+ junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+ }
+ }
+ }
+
+ stage('Code Quality') {
+ when {
+ branch 'develop'
+ }
+ steps {
+ echo 'Checking Code Quality'
+ withSonarQubeEnv('ASF Sonar Analysis') {
+ sh 'mvn -P${JENKINS_PROFILE} sonar:sonar'
+ }
+ }
+ }
+
+ stage('Deploy') {
+ when {
+ branch 'develop'
+ }
+ steps {
+ echo 'Deploying'
+ // Deploy the artifacts using the wagon-maven-plugin.
+ sh 'mvn -f jenkins.pom -X -P deploy-snapshots wagon:upload'
}
}
stage ('Build Site') {
- if(env.BRANCH_NAME == 'develop') {
+ when {
+ branch 'develop'
+ }
+ steps {
echo 'Building Site'
sh "${mvnHome}/bin/mvn ${mavenLocalRepo} site site:stage"
- } else {
- echo 'Building Site (skipped for non develop branch)'
}
}
-/* ========================== TODO figure out what to do with samples now in a separate repo
- stage ('Build Samples') {
- echo 'Building samples'
- sh "cd samples; ${mvnHome}/bin/mvn ${mavenFailureMode} ${mavenLocalRepo} clean package"
- sh "cd samples/topology; ./run-sample.sh HelloEdgent"
- sh "cd samples; ${mvnHome}/bin/mvn ${mavenFailureMode} ${mavenLocalRepo} -Pplatform-java7 clean package"
- sh "cd samples/topology; ./run-sample.sh HelloEdgent"
- }
- stage ('Build Templates') {
- echo 'Building templates'
- sh "cd samples/template; ${mvnHome}/bin/mvn ${mavenFailureMode} ${mavenLocalRepo} clean package; ./app-run.sh"
- sh "cd samples/template; ${mvnHome}/bin/mvn ${mavenFailureMode} ${mavenLocalRepo} -Pplatform-java7 clean package; ./app-run.sh"
- sh "cd samples/template; ${mvnHome}/bin/mvn ${mavenFailureMode} ${mavenLocalRepo} -Pplatform-android clean package; ./app-run.sh"
- }
-========================== */
-
- /* There seems to be a problem with this (Here the output of the build log):
-
- Verifying get-edgent-jars
- [Pipeline] sh
- [edgent-pipeline_develop-JN4DHO6BQV4SCTGBDJEOL4ZIC6T36DGONHH3VGS4DCDBO6UXH4MA] Running shell script
- + cd samples/get-edgent-jars-project
- + ./get-edgent-jars.sh
- ./get-edgent-jars.sh: 111: [: java8: unexpected operator
- ./get-edgent-jars.sh: 118: ./get-edgent-jars.sh: Syntax error: "(" unexpected
-
- */
- /*stage ('Verify get-engent-jars') {
- if(env.BRANCH_NAME == 'develop') {
- echo 'Verifying get-edgent-jars'
- sh "cd samples/get-edgent-jars-project; ./get-edgent-jars.sh"
- } else {
- echo 'Verifying get-edgent-jars (skipped for non develop branch)'
+ stage('Stage site') {
+ when {
+ branch 'develop'
}
- }*/
+ steps {
+ echo 'Staging Site'
+ sh 'mvn -P${JENKINS_PROFILE} site:stage'
+ // Stash the generated site so we can publish it on the 'git-website' node.
+ stash includes: 'target/staging/**/*', name: 'edgent-site'
+ }
+ }
+
+ stage('Deploy site') {
+ when {
+ branch 'develop'
+ }
+ // Only the nodes labeled 'git-websites' have the credentials to commit to the.
+ agent {
+ node {
+ label 'git-websites'
+ }
+ }
+ steps {
+ echo 'Deploying Site'
+ // Clean up the site directory.
+ dir("target/staging") {
+ deleteDir()
+ }
+
+ // Unstash the previously stashed site.
+ unstash 'edgent-site'
+ // Publish the site with the scm-publish plugin.
+ sh 'mvn -f jenkins.pom -X -P deploy-site scm-publish:publish-scm'
+
+ // Clean up the snapshots directory (freeing up more space after deploying).
+ dir("target/staging") {
+ deleteDir()
+ }
+ }
+ }
}
+ // Send out notifications on unsuccessful builds.
+ post {
+ // If this build failed, send an email to the list.
+ failure {
+ script {
+ if(env.BRANCH_NAME == "develop") {
+ emailext(
+ subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+ body: """
+BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
- catch (err) {
- currentBuild.result = "FAILURE"
-/* mail body: "project build error is here: ${env.BUILD_URL}" ,
- from: 'xxxx@yyyy.com',
- replyTo: 'dev@edgent.apache.org',
- subject: 'Autobuild for Branch ' env.BRANCH_NAME
- to: 'commits@edgent.apache.org'
-*/
- throw err
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+ to: "dev@edgent.apache.org",
+ recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+ )
+ }
+ }
+ }
+
+ // If this build didn't fail, but there were failing tests, send an email to the list.
+ unstable {
+ script {
+ if(env.BRANCH_NAME == "develop") {
+ emailext(
+ subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+ body: """
+BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+ to: "dev@edgent.apache.org",
+ recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+ )
+ }
+ }
+ }
+
+ // Send an email, if the last build was not successful and this one is.
+ success {
+ // Cleanup the build directory if the build was successful
+ // (in this cae we probably don't have to do any post-build analysis)
+ deleteDir()
+ script {
+ if ((env.BRANCH_NAME == "develop") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
+ emailext (
+ subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+ body: """
+BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Is back to normal.
+""",
+ to: "dev@edgent.apache.org",
+ recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+ )
+ }
+ }
+ }
+
+ always {
+ script {
+ if(env.BRANCH_NAME == "master") {
+ emailext(
+ subject: "[COMMIT-TO-MASTER]: A commit to the master branch was made'",
+ body: """
+COMMIT-TO-MASTER: A commit to the master branch was made:
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+ to: "dev@edgent.apache.org",
+ recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+ )
+ }
+ }
+ }
}
+
}
\ No newline at end of file
diff --git a/jenkins.pom b/jenkins.pom
new file mode 100644
index 0000000..e8b1321
--- /dev/null
+++ b/jenkins.pom
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>21</version>
+ </parent>
+
+ <groupId>org.apache.edgent</groupId>
+ <artifactId>edgent-jenkins-tools</artifactId>
+ <version>0.2.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>PLC4X: Jenkins Tools</name>
+ <description>Set of helpers to do individual tasks only needed on our Jenkins build.</description>
+
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scm:git:https://gitbox.apache.org/repos/asf/incubator-edgent-website.git</url>
+ </site>
+ </distributionManagement>
+
+ <profiles>
+ <!--
+ This profile is used to deploy all the artifacts in the
+ 'local-snapshots-dir' to Apache's SNAPSHOT repo.
+ -->
+ <profile>
+ <id>deploy-snapshots</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>wagon-maven-plugin</artifactId>
+ <version>2.0.0</version>
+ <configuration>
+ <fromDir>${project.basedir}/local-snapshots-dir</fromDir>
+ <includes>**</includes>
+ <serverId>apache.snapshots.https</serverId>
+ <url>${distMgmtSnapshotsUrl}</url>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>deploy-site</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-scm-publish-plugin</artifactId>
+ <configuration>
+ <!-- mono-module doesn't require site:stage -->
+ <content>${project.build.directory}/staging</content>
+ <!-- branch where to deploy -->
+ <scmBranch>asf-site</scmBranch>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a53f0ba..7090271 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
- <version>19</version>
+ <version>21</version>
</parent>
<groupId>org.apache.edgent</groupId>