You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2019/05/06 17:29:49 UTC

[ignite-teamcity-bot] branch ignite-10095 updated (be32ce9 -> 56c7d1b)

This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a change to branch ignite-10095
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git.


    from be32ce9  IGNITE-10095: Support Build Parameters specifying in triggering builds
     new 86570e6  IGNITE-10095: Support Build Parameters specifying in triggering builds
     new 56c7d1b  IGNITE-10095: Support Build Parameters saving for Fat Build

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 conf/branches.json                                 | 22 ++++--
 .../main/java/org/apache/ignite/ci/ITeamcity.java  | 30 +++----
 .../apache/ignite/ci/IgniteTeamcityConnection.java |  4 +-
 .../ignite/ci/tcbot/conf/BuildParameter.java       | 16 +++-
 .../ignite/ci/tcbot/conf/ChainAtServerTracked.java | 14 ++--
 .../org/apache/ignite/ci/tcmodel/Properties.java   | 18 ++---
 .../ignite/ci/tcmodel/conf/bt/Parameters.java      | 21 +++--
 .../apache/ignite/ci/tcmodel/conf/bt/Property.java | 32 +++++---
 .../org/apache/ignite/ci/tcmodel/result/Build.java | 21 ++++-
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   |  4 +-
 .../ignited/buildtype/ParametersCompacted.java     |  2 +-
 .../ignited/fatbuild/FatBuildCompacted.java        | 28 +++++--
 .../ignited/fatbuild/PropertiesCompacted.java      | 92 ++++++++++++++++++++++
 .../ignited/fatbuild/StatisticsCompacted.java      | 10 ++-
 .../ignited/IgnitedTcInMemoryIntegrationTest.java  | 10 +++
 15 files changed, 257 insertions(+), 67 deletions(-)
 create mode 100644 ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/PropertiesCompacted.java


[ignite-teamcity-bot] 01/02: IGNITE-10095: Support Build Parameters specifying in triggering builds

Posted by dp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-10095
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit 86570e65d83e239c4c525eecc379f9a370867532
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Mon May 6 17:14:22 2019 +0300

    IGNITE-10095: Support Build Parameters specifying in triggering builds
---
 conf/branches.json                                 | 22 +++++++++++++++++-----
 .../apache/ignite/ci/IgniteTeamcityConnection.java |  2 +-
 .../ignite/ci/tcbot/conf/BuildParameter.java       | 16 +++++++++++++++-
 .../ignite/ci/tcbot/conf/ChainAtServerTracked.java | 14 +++++---------
 4 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/conf/branches.json b/conf/branches.json
index 90d93cb..3039641 100644
--- a/conf/branches.json
+++ b/conf/branches.json
@@ -79,28 +79,40 @@
           "suiteId": "IgniteTests24Java8_RunAllNightly",
           "branchForRest": "\u003cdefault\u003e",
           "triggerBuild": true,
-          "triggerBuildQuietPeriod": 30 //triggering quiet period in minutes
+          /* Triggering quiet period in minutes. Protects from too-often triggering in case build is too fast, e.g. compilation failure. */
+          "triggerBuildQuietPeriod": 30,
+          "triggerParameters": [
+            {
+              name: "reverse.dep.*.env.JAVA_HOME",
+              randomValues: [
+                "%env.JDK_ORA_18%",
+                "%env.JDK_ORA_9%",
+                "%env.JDK_ORA_10%",
+                "%env.JDK_OPEN_11%"
+              ]
+            }
+          ]
         }
       ]
     },
     {
-      "id": "ignite-2.7",
+      "id": "ignite-2.7.5",
       "chains": [
         {
           "serverId": "apache",
           "suiteId": "IgniteTests24Java8_RunAll",
-          "branchForRest": "ignite-2.7",
+          "branchForRest": "ignite-2.7.5",
           "baseBranchForTc": "\u003cdefault\u003e"
         }
       ]
     },
     {
-      "id": "ignite-2.7-nightly",
+      "id": "ignite-2.7.5-nightly",
       "chains": [
         {
           "serverId": "apache",
           "suiteId": "IgniteTests24Java8_RunAllNightly",
-          "branchForRest": "ignite-2.7",
+          "branchForRest": "ignite-2.7.5",
           "baseBranchForTc": "\u003cdefault\u003e",
           "triggerBuild": true,
           "triggerBuildQuietPeriod": 30 //triggering quiet period in minutes
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
index efafbf1..766e30d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
@@ -223,7 +223,7 @@ public class IgniteTeamcityConnection implements ITeamcity {
                 " cleanSources=\"" + cleanRebuild + "\"" +
                 " rebuildAllDependencies=\"" + cleanRebuild + "\"" +
                 " queueAtTop=\"" + queueAtTop + "\"" +
-                "/>";
+                "/>\n";
 
         String comments = " <comment><text>Build triggered from Ignite TC Bot" +
             " [cleanRebuild=" + cleanRebuild + ", top=" + queueAtTop + "]</text></comment>\n";
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BuildParameter.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BuildParameter.java
index c4709b1..b7fbb6c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BuildParameter.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/BuildParameter.java
@@ -17,13 +17,19 @@
 
 package org.apache.ignite.ci.tcbot.conf;
 
+import com.google.common.base.Strings;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
 
 public class BuildParameter {
+    /** Name. */
     private String name;
+
+    /** Value. */
     private String value;
+
+    /** Random values. Ignored if exact values were specified */
     private List<String> randomValues = new LinkedList<>();
 
     /** {@inheritDoc} */
@@ -48,6 +54,14 @@ public class BuildParameter {
     }
 
     public Object generateValue() {
-        return value;
+        if (!Strings.isNullOrEmpty(value))
+            return value;
+
+        if (randomValues.isEmpty())
+            return null;
+
+        int idx = (int)(Math.random() * randomValues.size());
+
+        return randomValues.get(idx);
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java
index 0892445..92088b3 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ChainAtServerTracked.java
@@ -75,29 +75,25 @@ public class ChainAtServerTracked extends ChainAtServer {
         return Optional.ofNullable(baseBranchForTc);
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     @Override public boolean equals(Object o) {
         if (this == o)
             return true;
-
         if (o == null || getClass() != o.getClass())
             return false;
-
         if (!super.equals(o))
             return false;
-
         ChainAtServerTracked tracked = (ChainAtServerTracked)o;
-
         return Objects.equals(branchForRest, tracked.branchForRest) &&
+            Objects.equals(baseBranchForTc, tracked.baseBranchForTc) &&
             Objects.equals(triggerBuild, tracked.triggerBuild) &&
-            Objects.equals(triggerBuildQuietPeriod, tracked.triggerBuildQuietPeriod);
+            Objects.equals(triggerBuildQuietPeriod, tracked.triggerBuildQuietPeriod) &&
+            Objects.equals(triggerParameters, tracked.triggerParameters);
     }
 
     /** {@inheritDoc} */
     @Override public int hashCode() {
-        return Objects.hash(super.hashCode(), branchForRest, triggerBuild, triggerBuildQuietPeriod);
+        return Objects.hash(super.hashCode(), branchForRest, baseBranchForTc, triggerBuild, triggerBuildQuietPeriod, triggerParameters);
     }
 
     /**


[ignite-teamcity-bot] 02/02: IGNITE-10095: Support Build Parameters saving for Fat Build

Posted by dp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-10095
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit 56c7d1b8d39331413114070acd61754f7ff8aed5
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Mon May 6 20:29:25 2019 +0300

    IGNITE-10095: Support Build Parameters saving for Fat Build
---
 .../main/java/org/apache/ignite/ci/ITeamcity.java  | 30 +++----
 .../apache/ignite/ci/IgniteTeamcityConnection.java |  2 +-
 .../org/apache/ignite/ci/tcmodel/Properties.java   | 18 ++---
 .../ignite/ci/tcmodel/conf/bt/Parameters.java      | 21 +++--
 .../apache/ignite/ci/tcmodel/conf/bt/Property.java | 32 +++++---
 .../org/apache/ignite/ci/tcmodel/result/Build.java | 21 ++++-
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   |  4 +-
 .../ignited/buildtype/ParametersCompacted.java     |  2 +-
 .../ignited/fatbuild/FatBuildCompacted.java        | 28 +++++--
 .../ignited/fatbuild/PropertiesCompacted.java      | 92 ++++++++++++++++++++++
 .../ignited/fatbuild/StatisticsCompacted.java      | 10 ++-
 .../ignited/IgnitedTcInMemoryIntegrationTest.java  | 10 +++
 12 files changed, 219 insertions(+), 51 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
index c9be5dc..c145e1f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
@@ -17,34 +17,36 @@
 
 package org.apache.ignite.ci;
 
+import java.io.File;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.ci.analysis.LogCheckResult;
 import org.apache.ignite.ci.analysis.SingleBuildRunCtx;
-import org.apache.ignite.ci.tcmodel.agent.Agent;
-import org.apache.ignite.ci.tcmodel.conf.BuildType;
-import org.apache.ignite.ci.tcmodel.hist.BuildRef;
-import org.apache.ignite.ci.tcmodel.result.Build;
 import org.apache.ignite.ci.tcmodel.user.User;
 import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
 import org.apache.ignite.ci.util.Base64Util;
-import org.apache.ignite.ci.util.FutureUtil;
-import org.jetbrains.annotations.NotNull;
-
-import javax.annotation.Nullable;
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
 
 /**
  * API for calling methods from REST service:
  * https://confluence.jetbrains.com/display/TCD10/REST+API
  */
 public interface ITeamcity extends ITeamcityConn {
+    /** Default. */
     public String DEFAULT = "<default>";
+
+    /** Branch synonym: Refs heads master. */
     public String REFS_HEADS_MASTER = "refs/heads/master";
 
+    /** Branch synonym: Master. */
+    public String MASTER = "master";
+
+    /** Some fake property to avoid merging build in queue: Tcbot trigger time. */
+    public String TCBOT_TRIGGER_TIME = "tcbot.triggerTime";
+
+    /** Default list of properties to be skipped in saving in FAT builds. */
+    public String[] AVOID_SAVE_PROPERTIES = new String[] {TCBOT_TRIGGER_TIME, "build.query.loginTs"};
+
     CompletableFuture<File> unzipFirstFile(CompletableFuture<File> fut);
 
     CompletableFuture<File> downloadBuildLogZip(int id);
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
index 766e30d..d42029d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
@@ -233,7 +233,7 @@ public class IgniteTeamcityConnection implements ITeamcity {
         if (buildParms != null)
             props.putAll(buildParms);
 
-        props.put("tcbot.triggerTime", System.currentTimeMillis()); // some fake property to avoid merging build in queue
+        props.put(TCBOT_TRIGGER_TIME, System.currentTimeMillis()); //
 
         StringBuilder sb = new StringBuilder();
         sb.append("<build branchName=\"").append(xmlEscapeText(branchName)).append("\">\n");
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/Properties.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/Properties.java
index f03a7ed..192ec42 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/Properties.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/Properties.java
@@ -80,9 +80,9 @@ public class Properties {
      *
      */
     public List<Property> getProperty() {
-        if (property == null) {
-            property = new ArrayList<Property>();
-        }
+        if (property == null)
+            property = new ArrayList<>();
+
         return this.property;
     }
 
@@ -101,13 +101,13 @@ public class Properties {
     /**
      * Sets the value of the count property.
      *
-     * @param value
+     * @param val
      *     allowed object is
      *     {@link Integer }
      *
      */
-    public void setCount(Integer value) {
-        this.count = value;
+    public void setCount(Integer val) {
+        this.count = val;
     }
 
     /**
@@ -125,12 +125,12 @@ public class Properties {
     /**
      * Sets the value of the href property.
      *
-     * @param value
+     * @param val
      *     allowed object is
      *     {@link String }
      *
      */
-    public void setHref(String value) {
-        this.href = value;
+    public void setHref(String val) {
+        this.href = val;
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java
index de93c4b..9f92e33 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java
@@ -19,8 +19,6 @@ package org.apache.ignite.ci.tcmodel.conf.bt;
 
 import com.google.common.base.MoreObjects;
 import java.util.ArrayList;
-import org.jetbrains.annotations.Nullable;
-
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
@@ -28,6 +26,7 @@ import java.util.Optional;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Collection of parameters in build
@@ -40,21 +39,24 @@ public class Parameters {
     public Parameters() {
     }
 
-    public Parameters(List<Property> properties) {
-        this.properties = properties == null ? null : new ArrayList<>(properties);
+    public Parameters(List<Property> props) {
+        this.properties = props == null ? null : new ArrayList<>(props);
     }
 
+    /**
+     * @param key Key of parameter.
+     */
     @Nullable public String getParameter(String key) {
         if (properties == null)
             return null;
 
         final Optional<Property> any = properties.stream().filter(property ->
             Objects.equals(property.name, key)).findAny();
-        return any.map(Property::getValue).orElse(null);
+        return any.map(Property::value).orElse(null);
     }
 
     public List<Property> properties() {
-        if (this.properties==null)
+        if (this.properties == null)
             return Collections.emptyList();
 
         return Collections.unmodifiableList(this.properties);
@@ -91,4 +93,11 @@ public class Parameters {
             .add("properties", properties)
             .toString();
     }
+
+    /**
+     * @return {@code true} if this list contains no elements
+     */
+    public boolean isEmpty() {
+        return properties == null || properties.isEmpty();
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
index af4b2c7..3f87d0a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
@@ -29,30 +29,40 @@ import org.jetbrains.annotations.Nullable;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 public class Property {
+    /** Parameter Name/Key. */
     @XmlAttribute String name;
+
+    /** Parameter Value. */
     @XmlAttribute String value;
+
+    /** Flag indicating that value is inherited from a template. */
     @XmlAttribute Boolean inherited;
 
     public Property() {
     }
 
-    public Property(String name, String value) {
+    public Property(String name, String val) {
         this.name = name;
-        this.value = value;
+        this.value = val;
         this.inherited = null;
     }
 
-    public Property(String name, String value, Boolean inherited) {
+    public Property(String name, String val, Boolean inherited) {
         this.name = name;
-        this.value = value;
+        this.value = val;
         this.inherited = inherited;
     }
 
-    @Nullable
-    public String getValue() {
+    /**
+     * @return {@link #value}
+     */
+    @Nullable public String value() {
         return value;
     }
 
+    /**
+     * @return {@link #name}
+     */
     public String name() {
         return name;
     }
@@ -65,16 +75,16 @@ public class Property {
         if (!(o instanceof Property))
             return false;
 
-        Property property = (Property)o;
+        Property prop = (Property)o;
 
-        return Objects.equals(name, property.name) &&
-            Objects.equals(getValue(), property.getValue()) &&
-            Objects.equals(inherited, property.inherited);
+        return Objects.equals(name, prop.name) &&
+            Objects.equals(value(), prop.value()) &&
+            Objects.equals(inherited, prop.inherited);
     }
 
     /** {@inheritDoc} */
     @Override public int hashCode() {
-        return Objects.hash(name, getValue(), inherited);
+        return Objects.hash(name, value(), inherited);
     }
 
     /** {@inheritDoc} */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java
index 9af0c1b..aa4235a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java
@@ -31,6 +31,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import org.apache.ignite.ci.tcmodel.changes.ChangesListRef;
 import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.bt.Parameters;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.vcs.Revision;
 import org.apache.ignite.ci.tcmodel.vcs.Revisions;
@@ -65,7 +66,7 @@ public class Build extends BuildRef {
 
     @XmlElement(name = "statistics") public StatisticsRef statisticsRef;
 
-    /** Changes included into build.*/
+    /** Changes included into build. */
     @XmlElement(name = "changes") public ChangesListRef changesRef;
 
     /** Information about build triggering. */
@@ -73,6 +74,9 @@ public class Build extends BuildRef {
 
     @XmlElement(name = "revisions") private Revisions revisions;
 
+    /** Build parameters. */
+    @Nullable @XmlElement(name = "properties") private Parameters properties;
+
     @NotNull public static Build createFakeStub() {
         return new Build();
     }
@@ -187,4 +191,19 @@ public class Build extends BuildRef {
         this.revisions = new Revisions();
         this.revisions.revisions(revisions);
     }
+
+    /**
+     * @param s Parameter key.
+     */
+    @Nullable public String parameter(String s) {
+        return properties == null ? null : properties.getParameter(s);
+    }
+
+    @Nullable public Parameters parameters() {
+        return properties;
+    }
+
+    public void parameters(Parameters parameters) {
+        this.properties = parameters;
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
index 9a4c0aa..3577d14 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
@@ -78,7 +78,6 @@ import static org.apache.ignite.ci.tcmodel.hist.BuildRef.STATUS_UNKNOWN;
  *
  */
 public class TeamcityIgnitedImpl implements ITeamcityIgnited {
-
     /** Default project id. */
     public static final String DEFAULT_PROJECT_ID = "IgniteTests24Java8";
 
@@ -88,9 +87,10 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
     /** Max build id diff to enforce reload during incremental refresh. */
     public static final int MAX_ID_DIFF_TO_ENFORCE_CONTINUE_SCAN = 3000;
 
+    /** Default synonyms. */
     private static final List<String> DEFAULT_SYNONYMS
             = Collections.unmodifiableList(
-                    Lists.newArrayList(ITeamcity.DEFAULT, ITeamcity.REFS_HEADS_MASTER, "master"));
+                    Lists.newArrayList(ITeamcity.DEFAULT, ITeamcity.REFS_HEADS_MASTER, ITeamcity.MASTER));
 
     /** Server (service) code. */
     private String srvCode;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
index ebac6b9..dd7180f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
@@ -50,7 +50,7 @@ public class ParametersCompacted {
             if (Strings.isNullOrEmpty(name))
                 continue;
 
-            String strVal = next.getValue();
+            String strVal = next.value();
             if (Strings.isNullOrEmpty(strVal))
                 continue;
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
index 8ec87d5..b7ed85f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
@@ -30,6 +30,8 @@ import java.util.stream.Stream;
 import org.apache.ignite.ci.analysis.IVersionedEntity;
 import org.apache.ignite.ci.db.Persisted;
 import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.bt.Parameters;
+import org.apache.ignite.ci.tcmodel.conf.bt.Property;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
 import org.apache.ignite.ci.tcmodel.result.TestOccurrencesRef;
@@ -116,6 +118,8 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
 
     @Nullable private RevisionCompacted revisions[];
 
+    @Nullable private PropertiesCompacted parameters;
+
     /** {@inheritDoc} */
     @Override public int version() {
         return _ver;
@@ -200,13 +204,18 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
         }
 
         Revisions revisions = build.getRevisions();
-        if(revisions!=null) {
+        if (revisions != null) {
             this.revisions = revisions.revisions()
                 .stream()
                 .filter(b -> b.version() != null)
                 .map(revision -> new RevisionCompacted(compactor, revision))
                 .toArray(RevisionCompacted[]::new);
         }
+
+        Parameters parameters = build.parameters();
+
+        if (parameters != null && !parameters.isEmpty())
+            this.parameters = new PropertiesCompacted(compactor, parameters);
     }
 
     public FatBuildCompacted setFakeStub(boolean val) {
@@ -240,7 +249,7 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
 
     /**
      * @param compactor Compactor.
-     * @param res Response.
+     * @param res Resulting build.
      */
     private void fillBuildFields(IStringCompactor compactor, Build res) {
         if (startDate > 0)
@@ -322,6 +331,14 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
                         .vcsRootId(vcsRootId));
             }).collect(Collectors.toList()));
         }
+
+        if (parameters != null) {
+            List<Property> props = new ArrayList<>();
+
+            parameters.forEach(compactor, (k, v) -> props.add(new Property(k, v)));
+
+            res.parameters(new Parameters(props));
+        }
     }
 
     /**
@@ -417,12 +434,13 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
             Objects.equals(statistics, that.statistics) &&
             Arrays.equals(changesIds, that.changesIds) &&
             Objects.equals(triggered, that.triggered) &&
-            Arrays.equals(revisions, that.revisions);
+            Arrays.equals(revisions, that.revisions) &&
+            Objects.equals(parameters, that.parameters);
     }
 
     /** {@inheritDoc} */
     @Override public int hashCode() {
-        int res = Objects.hash(super.hashCode(), _ver, startDate, finishDate, queuedDate, projectId, name, tests, flags, problems, statistics, triggered);
+        int res = Objects.hash(super.hashCode(), _ver, startDate, finishDate, queuedDate, projectId, name, tests, flags, problems, statistics, triggered, parameters);
         res = 31 * res + Arrays.hashCode(snapshotDeps);
         res = 31 * res + Arrays.hashCode(changesIds);
         res = 31 * res + Arrays.hashCode(revisions);
@@ -441,7 +459,7 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
     /**
      *
      */
-    public boolean isFakeStub() {
+    @Override public boolean isFakeStub() {
         if (getId() == null)
             return true;
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/PropertiesCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/PropertiesCompacted.java
new file mode 100644
index 0000000..070e3dd
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/PropertiesCompacted.java
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.fatbuild;
+
+import com.google.common.base.Strings;
+import java.util.List;
+import java.util.function.BiConsumer;
+import org.apache.ignite.ci.db.Persisted;
+import org.apache.ignite.ci.tcmodel.conf.bt.Parameters;
+import org.apache.ignite.ci.tcmodel.conf.bt.Property;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.apache.ignite.internal.util.GridIntList;
+
+/**
+ * Properties (Build parameters) compacted value for storing in TC Bot DB
+ */
+@Persisted
+public class PropertiesCompacted {
+    /** Property Keys (Names), int value is coming from the compatcor. */
+    private GridIntList keys;
+
+    /** Property Values, int value is coming from the compatcor. */
+    private GridIntList values;
+
+    public PropertiesCompacted() {
+    }
+
+    public PropertiesCompacted(IStringCompactor compactor, Parameters parameters) {
+        List<Property> props = parameters.properties();
+        int size = props.size();
+        keys = new GridIntList(size);
+        values = new GridIntList(size);
+
+        for (Property next : props) {
+            String name = next.name();
+            if (Strings.isNullOrEmpty(name))
+                continue;
+
+            String valStr = next.value();
+
+            keys.add(compactor.getStringId(name));
+            values.add(compactor.getStringId(valStr));
+        }
+    }
+
+    private long findPropertyValue(int propCode) {
+        if (keys == null)
+            return -1L;
+
+        int size = keys.size();
+
+        for (int i = 0; i < size; i++) {
+            int nameid = keys.get(i);
+
+            if (nameid == propCode)
+                return i < values.size() ? values.get(i) : -1;
+        }
+
+        return -1L;
+    }
+
+    public void forEach(IStringCompactor compactor, BiConsumer<String, String> consumer) {
+        int size = keys.size();
+
+        for (int i = 0; i < size; i++) {
+            int nameid = keys.get(i);
+
+            if (i >= values.size())
+                break;
+
+            int valId = values.get(i);
+
+            consumer.accept(compactor.getStringFromId(nameid), compactor.getStringFromId(valId));
+        }
+
+    }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/StatisticsCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/StatisticsCompacted.java
index 02254a0..1d66c5b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/StatisticsCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/StatisticsCompacted.java
@@ -19,6 +19,7 @@ package org.apache.ignite.ci.teamcity.ignited.fatbuild;
 
 import com.google.common.base.Strings;
 import java.util.List;
+import org.apache.ignite.ci.db.Persisted;
 import org.apache.ignite.ci.tcmodel.conf.bt.Property;
 import org.apache.ignite.ci.tcmodel.result.stat.Statistics;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
@@ -27,11 +28,18 @@ import org.apache.ignite.internal.util.GridLongList;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * Statistics values to be saved in compacted form.
+ */
+@Persisted
 public class StatisticsCompacted {
     /** Logger. */
     private static final Logger logger = LoggerFactory.getLogger(StatisticsCompacted.class);
 
+    /** Statistics Keys (Names), int value is coming from the compatcor. */
     private GridIntList keys;
+
+    /** Statistics Parsed Values as long. */
     private GridLongList values;
 
     public StatisticsCompacted() {
@@ -48,7 +56,7 @@ public class StatisticsCompacted {
             if (Strings.isNullOrEmpty(name))
                 continue;
 
-            final String valStr = next.getValue();
+            final String valStr = next.value();
             if (Strings.isNullOrEmpty(valStr))
                 continue;
 
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
index 04964fd..3a2faa9 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
@@ -477,6 +477,9 @@ public class IgnitedTcInMemoryIntegrationTest {
         assertEquals(refBuild.getStartDate(), actBuild.getStartDate());
         assertEquals(refBuild.getFinishDate(), actBuild.getFinishDate());
 
+        assertParameter(refBuild, actBuild, "env.JAVA_HOME");
+        assertParameter(refBuild, actBuild, "reverse.dep.*.env.JAVA_HOME");
+
         final Triggered refTrig = refBuild.getTriggered();
         final Triggered actTrig = actBuild.getTriggered();
         assertNotNull(refTrig);
@@ -532,6 +535,13 @@ public class IgnitedTcInMemoryIntegrationTest {
         assertEquals(refRev0.vcsBranchName(), actRev0.vcsBranchName());
         assertEquals(refRev0.vcsRootInstance().id(), actRev0.vcsRootInstance().id());
         assertEquals(refRev0.vcsRootInstance().vcsRootId(), actRev0.vcsRootInstance().vcsRootId());
+
+
+    }
+
+    public void assertParameter(Build refBuild, Build actBuild, String parmKey) {
+        assertNotNull(refBuild.parameter(parmKey));
+        assertEquals(refBuild.parameter(parmKey), actBuild.parameter(parmKey));
     }
 
     private void saveTmpFile(Object obj, String name) throws IOException, JAXBException {