├── .gitattributes
├── .gitignore
├── Dockerfile
├── Jenkinsfile
├── README.md
├── jenkins
├── Jenkinsfile
└── scripts
│ └── deliver.sh
├── pom.xml
└── src
├── main
└── java
│ └── com
│ └── mycompany
│ └── app
│ └── App.java
└── test
└── java
└── com
└── mycompany
└── app
└── AppTest.java
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | target/
3 | pom.xml.tag
4 | pom.xml.releaseBackup
5 | pom.xml.versionsBackup
6 | pom.xml.next
7 | release.properties
8 | dependency-reduced-pom.xml
9 | buildNumber.properties
10 | .mvn/timing.properties
11 |
12 | # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
13 | !/.mvn/wrapper/maven-wrapper.jar
14 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:8
2 |
3 | COPY target/*.jar myapp.jar
4 |
5 | ENTRYPOINT [ "java" , "-jar" , "myapp.jar" ]
6 |
--------------------------------------------------------------------------------
/Jenkinsfile:
--------------------------------------------------------------------------------
1 | pipeline {
2 |
3 | agent none
4 |
5 | stages {
6 |
7 | stage('Build'){
8 |
9 | agent {
10 | label "myslavemaven"
11 | }
12 |
13 | steps {
14 |
15 | echo "my master branch"
16 | }
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # simple-java-maven-app
2 |
3 | This repository is for the
4 | [Build a Java app with Maven](https://jenkins.io/doc/tutorials/build-a-java-app-with-maven/)
5 | tutorial in the [Jenkins User Documentation](https://jenkins.io/doc/).
6 |
7 | The repository contains a simple Java application which outputs the string
8 | "Hello world!" and is accompanied by a couple of unit tests to check that the
9 | main application works as expected. The results of these tests are saved to a
10 | JUnit XML report.
11 |
12 | The `jenkins` directory contains an example of the `Jenkinsfile` (i.e. Pipeline)
13 | you'll be creating yourself during the tutorial and the `scripts` subdirectory
14 | contains a shell script with commands that are executed when Jenkins processes
15 | the "Deliver" stage of your Pipeline.
16 |
--------------------------------------------------------------------------------
/jenkins/Jenkinsfile:
--------------------------------------------------------------------------------
1 | pipeline {
2 | agent {
3 | docker {
4 | image 'maven:3-alpine'
5 | args '-v /root/.m2:/root/.m2'
6 | }
7 | }
8 | stages {
9 | stage('Build') {
10 | steps {
11 | sh 'mvn -B -DskipTests clean package'
12 | }
13 | }
14 | stage('Test') {
15 | steps {
16 | sh 'mvn test'
17 | }
18 | post {
19 | always {
20 | junit 'target/surefire-reports/*.xml'
21 | }
22 | }
23 | }
24 | stage('Deliver') {
25 | steps {
26 | sh './jenkins/scripts/deliver.sh'
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/jenkins/scripts/deliver.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | echo 'The following Maven command installs your Maven-built Java application'
4 | echo 'into the local Maven repository, which will ultimately be stored in'
5 | echo 'Jenkins''s local Maven repository (and the "maven-repository" Docker data'
6 | echo 'volume).'
7 | set -x
8 | mvn jar:jar install:install help:evaluate -Dexpression=project.name
9 | set +x
10 |
11 | echo 'The following complex command extracts the value of the element'
12 | echo 'within of your Java/Maven project''s "pom.xml" file.'
13 | set -x
14 | NAME=`mvn help:evaluate -Dexpression=project.name | grep "^[^\[]"`
15 | set +x
16 |
17 | echo 'The following complex command behaves similarly to the previous one but'
18 | echo 'extracts the value of the element within instead.'
19 | set -x
20 | VERSION=`mvn help:evaluate -Dexpression=project.version | grep "^[^\[]"`
21 | set +x
22 |
23 | echo 'The following command runs and outputs the execution of your Java'
24 | echo 'application (which Jenkins built using Maven) to the Jenkins UI.'
25 | set -x
26 | java -jar target/${NAME}-${VERSION}.jar
27 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | com.mycompany.app
5 | my-app
6 | jar
7 | 1.0-SNAPSHOT
8 | my-app
9 | http://maven.apache.org
10 |
11 |
12 | junit
13 | junit
14 | 4.11
15 | test
16 |
17 |
18 |
19 |
20 |
21 |
22 | org.apache.maven.plugins
23 | maven-jar-plugin
24 | 3.0.2
25 |
26 |
27 |
28 | true
29 | lib/
30 | com.mycompany.app.App
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/main/java/com/mycompany/app/App.java:
--------------------------------------------------------------------------------
1 | package com.mycompany.app;
2 |
3 | /**
4 | * Hello world!
5 | */
6 | public class App
7 | {
8 |
9 | private final String message = "Hello World!";
10 |
11 | public App() {}
12 |
13 | public static void main(String[] args) {
14 | System.out.println(new App().getMessage());
15 | }
16 |
17 | private final String getMessage() {
18 | return message;
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/test/java/com/mycompany/app/AppTest.java:
--------------------------------------------------------------------------------
1 | package com.mycompany.app;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.PrintStream;
5 | import org.junit.Before;
6 | import org.junit.Test;
7 | import org.junit.After;
8 | import static org.junit.Assert.*;
9 |
10 | /**
11 | * Unit test for simple App.
12 | */
13 | public class AppTest
14 | {
15 |
16 | private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
17 |
18 | @Before
19 | public void setUpStreams() {
20 | System.setOut(new PrintStream(outContent));
21 | }
22 |
23 | @Test
24 | public void testAppConstructor() {
25 | try {
26 | new App();
27 | } catch (Exception e) {
28 | fail("Construction failed.");
29 | }
30 | }
31 |
32 | @Test
33 | public void testAppMain()
34 | {
35 | App.main(null);
36 | try {
37 | assertEquals("Hello World!" + System.getProperty("line.separator"), outContent.toString());
38 | } catch (AssertionError e) {
39 | fail("\"message\" is not \"Hello World!\"");
40 | }
41 | }
42 |
43 | @After
44 | public void cleanUpStreams() {
45 | System.setOut(null);
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------