Builds and archives uds artifacts 54/5154/9
authormatthew-mcneilly <matthew.mcneilly@est.tech>
Wed, 24 Jun 2020 09:54:28 +0000 (10:54 +0100)
committermatthew-mcneilly <matthew.mcneilly@est.tech>
Tue, 28 Jul 2020 13:12:51 +0000 (14:12 +0100)
Add parameter to specify source versions from commitids
Include other artifacts (.war files) in push to Artifactory
Include commitids into artifact filenames
Assign jenkins slave and enable single use
Refactoring into Jenkins multijob
Created build.properties file to share commitids across jobs

Signed-off-by: matthew-mcneilly <matthew.mcneilly@est.tech>
Change-Id: I5331e7fd376a09624930f9cc1ee9d2f2ee3aa50e

13 files changed:
jjb/onap/uds/README.md [new file with mode: 0644]
jjb/onap/uds/scripts/archive-images.sh [new file with mode: 0644]
jjb/onap/uds/scripts/archive-repos.sh [new file with mode: 0644]
jjb/onap/uds/scripts/collect-artifacts.sh [new file with mode: 0644]
jjb/onap/uds/scripts/generate-build-metadata.sh [new file with mode: 0644]
jjb/onap/uds/scripts/maven-build.sh [new file with mode: 0644]
jjb/onap/uds/scripts/maven-clean.sh [new file with mode: 0644]
jjb/onap/uds/scripts/pull-repos.sh [new file with mode: 0644]
jjb/onap/uds/scripts/push-artifacts.sh [new file with mode: 0644]
jjb/onap/uds/scripts/push-images.sh [new file with mode: 0644]
jjb/onap/uds/scripts/push-repos.sh [new file with mode: 0644]
jjb/onap/uds/uds-daily-build-package-promote.yaml [new file with mode: 0644]
jjb/onap/uds/uds-macros.yaml [new file with mode: 0644]

diff --git a/jjb/onap/uds/README.md b/jjb/onap/uds/README.md
new file mode 100644 (file)
index 0000000..7453feb
--- /dev/null
@@ -0,0 +1,50 @@
+## Job Descriptions
+Jenkins Multijob to build and archive UDS Artifacts (docker images, source repositories, .war files etc.) and pushe to Artifactory.
+Can accept multiple project source repositories for instances where repositories depend on each other in order to build.
+Intended for use within Aegis.
+[Link To Jira Ticket](https://jira.nordix.org/browse/AEGIS-36)
+
+- uds-verify-package-promote - Multijob root that creates build.properties file to share build parameters and pull project source repositories
+- uds-verify - Job that does a Maven build for each project source repository specified
+- uds-package-artifacts - Job that gathers file artifacts specified (.war .jar etc.) and places in a directory to be pushed to Artifactory
+- uds-package-images - Job archives each docker image using 'docker save' into a tarball and places in a directory to be pushed to Artifactory
+- uds-package-repositories - Job that archives the project source repositories into a tarball to be pushed to Artifactory
+- uds-promote-* - Jobs that push each of the Artifacts (docker images, source repos and war files etc.) to their specified location within Artifactory
+
+## Job Parameters
+Job parameters include;
+- PROJECTS - Nordix Gerrit projects to build and archive (e.g. project1, project2)
+- BRANCHES - Project branches to pull from (e.g. project1branch, project2branch)
+- PROJECT_DIRECTORIES - Directories names to place projects
+- PROJECT_VERSIONS - SHA commit ids/versions of PROJECTS source repositories to checkout e.g. 6d3ab..., d96ba... Allows for building from specific versions of a source or can also be left blank to pull latest source.
+- GIT_BASE_HTTPS - Base HTTPS URL of repository to clone from
+
+- MVN_VERSION - Maven version to build with
+- MVN_URL - Download URL for Maven
+- MVN - Path to mvn executable
+- MVN_PARAMS - Maven build parameters
+- MVN_SETTINGS_XML_VERSION - SHA commit id/version for the ONAP oparent repository to checkout. Used for retrieving the ONAP Maven settings.xml file for the Maven build process. Can be left blank to pull the latest version.
+
+- ARTIFACTORY_URL - Artifactory URL to push to
+- POM_LOCATION - Path to repository pom.xml parsed for version number used within archive filenames (e.g. uds.version)
+- GREP_PARAMS - Parameters for grep command used for parsing pom file for version number used within archive filenames
+
+- ARCHIVENAME - Name to be given to archive holding the repositories pushed to Artifactory
+- ARTIFACTORY_REPO_ARCHIVE_PATH - Artifactory repository and path to push repository archive to
+- REPO_ARCHIVE_ARTIFACT_DIRECTORY - Workspace directory to hold repository artifacts
+
+- DOCKER_IMAGES - Docker image names to archive and push to Artifactory
+- ARTIFACTORY_DOCKER_IMAGES_PATH - Artifactory repository and path to push docker images to
+- DOCKER_IMAGE_ARTIFACT_DIRECTORY - Workspace directory to hold docker image artifacts
+
+- ARTIFACT_PATHS - Artifact file paths that should be pushed to Artifactory, can contain wildcards
+- ARTIFACTORY_ARTIFACT_PATH - Artifactory repository and path to push artifacts to e.g. .war .jar files
+- ARTIFACT_DIRECTORY - Workspace directory to hold artifacts
+
+
+## Job Requirements
+Jenkins Job requires the following packages installed on the Jenkins slave
+ - Maven (tested with v3.6.0)
+ - Docker (tested with v3.3.9)
+ - Java (tested with 1.8.0)
+ For further information about building SDC see [link](https://wiki.onap.org/pages/viewpage.action?pageId=16004156)
diff --git a/jjb/onap/uds/scripts/archive-images.sh b/jjb/onap/uds/scripts/archive-images.sh
new file mode 100644 (file)
index 0000000..3c330d6
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Make directory to hold docker image artifacts
+mkdir -p $DOCKER_IMAGE_ARTIFACT_DIRECTORY
+
+# Ensure at root of WORKSPACE
+cd $WORKSPACE
+
+# For each docker image
+for DOCKER_IMAGE in $(echo $DOCKER_IMAGES | tr "," "\n")
+do
+  echo "----------------------------------------------------"
+  echo "Info: Archiving $DOCKER_IMAGE"
+  echo "----------------------------------------------------"
+  # Generate a name for the archive from its docker image name
+  # e.g.  uds/sdc-customization/eo-cassandra-init becomes eo-cassandra-init
+  DOCKER_IMAGE_TAG=$(docker images $DOCKER_IMAGE | awk '{ print $2}' | sed -n '2p')
+  # Create docker tag for filename using uds build version e.g. 1.5-STAGING-latest
+  DOCKER_IMAGE_NAME=$(echo $DOCKER_IMAGE | awk -F/ '{print $NF}')
+  # Create docker tag for filename using timestamp e.g. 1.5.0-20200610T134812Z
+  #DOCKER_IMAGE_TAG=$(docker images $DOCKER_IMAGE | awk '{ print $2}' | sed -n '3p')
+
+  # Create the archive.tar.gz
+  # Naming convention <docker-image-name>-<tag>-<project-commit-ids>.tar.gz
+  # Includes SHA commit ids of the projects for traceability of the artifacts
+  # e.g. eo-cassandra-init-1.7-STAGING-latest-6d3abef-d96bad4.tar.gz
+  docker save $DOCKER_IMAGE | gzip -c > $DOCKER_IMAGE_ARTIFACT_DIRECTORY/$DOCKER_IMAGE_NAME-$DOCKER_IMAGE_TAG-$COMMIT_IDS.tar.gz
+done
diff --git a/jjb/onap/uds/scripts/archive-repos.sh b/jjb/onap/uds/scripts/archive-repos.sh
new file mode 100644 (file)
index 0000000..54527f9
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Make directory to hold source repository archive artifact
+mkdir -p $REPO_ARCHIVE_ARTIFACT_DIRECTORY
+
+# Turn PROJECTS and PROJECT_DIRECTORIES paramter strings into arrays
+# Required in order to loop through them
+PROJECTS=(`echo $PROJECTS | sed 's/,/\n/g'`)
+PROJECT_DIRECTORIES=(`echo $PROJECT_DIRECTORIES | sed 's/,/\n/g'`)
+
+# Find and store array lenth using one of the arrays
+ARRAY_LENGTH=$(echo ${#PROJECTS[@]})
+# Take 1 of the array length for the loop
+((ARRAY_LENGTH--))
+
+# Ensure at root of the $WORKSPACE
+cd $WORKSPACE
+
+# Parse uds version number from pom.xml file for use within archive filename
+# e.g. <uds.version>1.7.0-SNAPSHOT</uds.version>
+VERSION=$(grep $GREP_PARAMS $POM_LOCATION)
+
+# Compress each source repository into an archive
+# Includes SHA commit ids of the projects for traceability of the artifacts
+# e.g. uds-1.7.0-SNAPSHOT-6d3abef-d96bad4.tar.gz
+for i in $(seq 0 $ARRAY_LENGTH)
+do
+  echo "----------------------------------------------------"
+  echo "INFO: Archive ${PROJECTS[$i]}"
+  echo "----------------------------------------------------"
+  tar -zcvf $REPO_ARCHIVE_ARTIFACT_DIRECTORY/$ARCHIVENAME-$VERSION-$COMMIT_IDS.tar.gz ${PROJECT_DIRECTORIES[$i]}
+done
diff --git a/jjb/onap/uds/scripts/collect-artifacts.sh b/jjb/onap/uds/scripts/collect-artifacts.sh
new file mode 100644 (file)
index 0000000..3cc778e
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Make directory to hold file artifacts (.war .jar etc)
+mkdir -p $ARTIFACT_DIRECTORY
+
+# Ensure at root of $WORKSPACE
+cd $WORKSPACE
+
+# For each file artifact create a reference in ARTIFACT_DIRECTORY
+# uses softlinks in order to save space and time
+# ARTIFACT_DIRECTORY contents will be pushed to Artifactory
+for ARTIFACT in $ARTIFACT_PATHS
+do
+  # Check if file exists before creating a softlink
+  if [ ! -f "$ARTIFACT" ]; then
+    echo "$ARTIFACT does not exist."
+    exit 1
+  fi
+
+  echo "----------------------------------------------------"
+  echo "Info: Copy $ARTIFACT into $ARTIFACT_DIRECTORY"
+  echo "----------------------------------------------------"
+  ln -sf $WORKSPACE/$ARTIFACT $ARTIFACT_DIRECTORY
+done
+
+cd $ARTIFACT_DIRECTORY
+
+# Rename the artifacts to include SHA commit ids of the projects for traceability
+# e.g. 6d3abef-d96bad4-catalog-be-1.6.1-SNAPSHOT.war
+for ARTIFACT in *
+do
+  echo "----------------------------------------------------"
+  echo "Info: Adding CommitIDs $COMMIT_IDS to $ARTIFACT filename"
+  echo "----------------------------------------------------"
+  mv "$ARTIFACT" "$COMMIT_IDS-$ARTIFACT"
+done
diff --git a/jjb/onap/uds/scripts/generate-build-metadata.sh b/jjb/onap/uds/scripts/generate-build-metadata.sh
new file mode 100644 (file)
index 0000000..fd9fb39
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Turn PROJECTS and PROJECT_DIRECTORIES paramter strings into arrays
+# Required in order to loop through them
+PROJECTS=(`echo $PROJECTS | sed 's/,/\n/g'`)
+PROJECT_DIRECTORIES=(`echo $PROJECT_DIRECTORIES | sed 's/,/\n/g'`)
+# Find and store array lenth using one of the arrays
+ARRAY_LENGTH=$(echo ${#PROJECTS[@]})
+# Take 1 of the array length for the loop
+((ARRAY_LENGTH--))
+
+# Iterate over project source repositories and fetch the SHA commit ids
+declare -a COMMIT_IDS
+for i in $(seq 0 $ARRAY_LENGTH)
+do
+  echo "----------------------------------------------------"
+  echo "INFO: Fetching Build ID of ${PROJECTS[$i]}"
+  echo "----------------------------------------------------"
+  cd $WORKSPACE/${PROJECT_DIRECTORIES[$i]}
+  COMMIT_IDS[$i]=$(echo $(git rev-parse --short HEAD))
+done
+
+# Generate a build.properties file in order to share variables among jobs
+# Includes SHA commit ids of the source repositories to include in artifact filenames for traceability
+echo "-------------------------------------------------------------------------"
+echo "INFO: Generating build metadata"
+echo "-------------------------------------------------------------------------"
+cat << EOF > "$WORKSPACE/build.properties"
+BUILD_DATE=$(date '+%Y%m%d%H%M')
+BUILT_BY=$BUILD_URL
+COMMIT_IDS=$(echo ${COMMIT_IDS[@]} | tr " " -)
+EOF
+
+echo "-------------------------------------------------------------------------"
+echo "INFO: Creating build metadata file build.properties"
+echo "-------------------------------------------------------------------------"
+cat "$WORKSPACE/build.properties"
+echo "-------------------------------------------------------------------------"
diff --git a/jjb/onap/uds/scripts/maven-build.sh b/jjb/onap/uds/scripts/maven-build.sh
new file mode 100644 (file)
index 0000000..506c957
--- /dev/null
@@ -0,0 +1,84 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+cd $WORKSPACE
+
+echo "----------------------------------------------------"
+echo "Info: Java version"
+echo "----------------------------------------------------"
+java -version
+
+echo "----------------------------------------------------"
+echo "Info: Downloading Maven $MVN_VERSION from $MVN_URL"
+echo "----------------------------------------------------"
+wget -q $MVN_URL && unzip -qqn apache-maven-$MVN_VERSION-bin.zip
+
+echo "----------------------------------------------------"
+echo "Info: Maven version"
+echo "----------------------------------------------------"
+$MVN -version
+
+echo "----------------------------------------------------"
+echo "Info: Downloading ONAP Maven XML for build process"
+echo "----------------------------------------------------"
+git clone "https://git.onap.org/oparent" $WORKSPACE/oparent
+cd $WORKSPACE/oparent
+# Check if a commitid parameter is given to specify a version of
+# oparent repository to checkout
+if [[ -v MVN_SETTINGS_XML_VERSION ]]; then
+  git checkout $MVN_SETTINGS_XML_VERSION
+fi
+# Copy Onap maven settings.xml to Jenkins home directory
+mkdir -p /home/jenkins/.m2/
+cp settings.xml /home/jenkins/.m2/settings.xml
+cd $WORKSPACE
+
+
+echo "----------------------------------------------------"
+echo "Info: Ensuring Docker is running"
+echo "----------------------------------------------------"
+# If docker daemon isnt up attempt to start it
+if ! docker info;
+then
+  systemctl start docker
+fi
+
+# Turn PROJECTS and PROJECT_DIRECTORIES paramter strings into arrays
+# Required in order to loop through them
+PROJECTS=(`echo $PROJECTS | sed 's/,/\n/g'`)
+PROJECT_DIRECTORIES=(`echo $PROJECT_DIRECTORIES | sed 's/,/\n/g'`)
+
+# Find and store array lenth of one of the arrays
+ARRAY_LENGTH=$(echo ${#PROJECTS[@]})
+# Take 1 of the array length for the loop
+((ARRAY_LENGTH--))
+
+# For each project source repository do a maven build
+# e.g. maven clean install -DskipTests -Pdocker
+for i in $(seq 0 $ARRAY_LENGTH)
+do
+  echo "----------------------------------------------------"
+  echo "INFO: Maven Build for ${PROJECTS[$i]}"
+  echo "----------------------------------------------------"
+  $MVN clean install $MVN_PARAMS -f ${PROJECT_DIRECTORIES[$i]}
+done
diff --git a/jjb/onap/uds/scripts/maven-clean.sh b/jjb/onap/uds/scripts/maven-clean.sh
new file mode 100644 (file)
index 0000000..e82b681
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Turn PROJECTS and PROJECT_DIRECTORIES paramter strings into arrays
+PROJECTS=(`echo $PROJECTS | sed 's/,/\n/g'`)
+PROJECT_DIRECTORIES=(`echo $PROJECT_DIRECTORIES | sed 's/,/\n/g'`)
+
+# Find and store array lenth of one of the arrays
+ARRAY_LENGTH=$(echo ${#PROJECTS[@]})
+# Take 1 of the array length for the loop
+((ARRAY_LENGTH--))
+
+# Do a Maven clean for each project source repository
+# Required to reduce filesize before archiving source repositories together 
+for i in $(seq 0 $ARRAY_LENGTH)
+do
+  echo "----------------------------------------------------"
+  echo "INFO: Maven Clean for ${PROJECTS[$i]}"
+  echo "----------------------------------------------------"
+  $MVN clean -f $WORKSPACE/${PROJECT_DIRECTORIES[$i]}
+done
diff --git a/jjb/onap/uds/scripts/pull-repos.sh b/jjb/onap/uds/scripts/pull-repos.sh
new file mode 100644 (file)
index 0000000..2ca8f61
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Turn PROJECTS, BRANCHES and PROJECT_DIRECTORIES paramter strings into arrays
+# Required in order to loop through them
+PROJECTS=(`echo $PROJECTS | sed 's/,/\n/g'`)
+BRANCHES=(`echo $BRANCHES | sed 's/,/\n/g'`)
+PROJECT_DIRECTORIES=(`echo $PROJECT_DIRECTORIES | sed 's/,/\n/g'`)
+# if commitids/project versions are given turn string into an array
+PROJECT_VERSIONS=(`echo $PROJECT_VERSIONS | sed 's/,/\n/g'`) || echo "No project versions/commit ids specificed, latest sources will be used"
+
+# Find and store array lenth of one of the arrays
+ARRAY_LENGTH=$(echo ${#PROJECTS[@]})
+# Take 1 of the array length for the loop
+((ARRAY_LENGTH--))
+
+# Create project directories and clone source repositories into them
+for i in $(seq 0 $ARRAY_LENGTH)
+do
+  echo "----------------------------------------------------"
+  echo "Info: Creating project directory ${PROJECT_DIRECTORIES[$i]}"
+  echo "----------------------------------------------------"
+  mkdir -p $WORKSPACE/${PROJECT_DIRECTORIES[$i]}
+
+  echo "----------------------------------------------------"
+  echo "Info: Cloning ${PROJECTS[$i]} branch ${BRANCHES[$i]} into ${PROJECT_DIRECTORIES[$i]}"
+  echo "----------------------------------------------------"
+  git clone --single-branch --branch ${BRANCHES[$i]} $GIT_BASE_HTTPS${PROJECTS[$i]} $WORKSPACE/${PROJECT_DIRECTORIES[$i]}
+
+  if ((${#PROJECT_VERSIONS[@]})); then
+    echo "----------------------------------------------------"
+    echo "Info: Checking out ${PROJECTS[$i]} to commit ${PROJECT_VERSIONS[$i]}"
+    echo "----------------------------------------------------"
+    cd $WORKSPACE/${PROJECT_DIRECTORIES[$i]}
+    git checkout ${PROJECT_VERSIONS[$i]}
+    cd $WORKSPACE
+  else
+    cd $WORKSPACE
+  fi
+done
diff --git a/jjb/onap/uds/scripts/push-artifacts.sh b/jjb/onap/uds/scripts/push-artifacts.sh
new file mode 100644 (file)
index 0000000..b375498
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Go to directory holding file artifacts (.war .jar etc)
+cd $ARTIFACT_DIRECTORY
+
+# For each artifact in ARTIFACT_DIRECTORY get the cheksums and upload to Artifactory
+for ARTIFACT in *
+do
+  echo $ARTIFACT
+  SHA_CHECKSUM=$(sha1sum $ARTIFACT| cut -d ' ' -f 1)
+  SHA256_CHECKSUM=$(sha256sum $ARTIFACT | cut -d ' ' -f 1)
+  MD5_CHECKSUM=$(md5sum $ARTIFACT | cut -d ' ' -f 1)
+
+  curl -H "X-JFrog-Art-Api:$ARTIFACTORY_API_KEY" \
+  -H "X-Checksum-Sha1:$SHA_CHECKSUM" \
+  -H "X-Checksum-Sha256:$SHA256_CHECKSUM" \
+  -H "X-Checksum-MD5:$MD5_CHECKSUM" \
+  -X PUT "$ARTIFACTORY_URL/$ARTIFACTORY_ARTIFACT_PATH/$ARTIFACT" \
+  -T $ARTIFACT
+done
diff --git a/jjb/onap/uds/scripts/push-images.sh b/jjb/onap/uds/scripts/push-images.sh
new file mode 100644 (file)
index 0000000..62d7ceb
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Go to directory holding docker image artifacts
+cd $DOCKER_IMAGE_ARTIFACT_DIRECTORY
+
+# For each artifact in DOCKER_IMAGE_ARTIFACT_DIRECTORY get the cheksums and upload to Artifactory
+for ARTIFACT in *
+do
+  echo $ARTIFACT
+  SHA_CHECKSUM=$(sha1sum $ARTIFACT| cut -d ' ' -f 1)
+  SHA256_CHECKSUM=$(sha256sum $ARTIFACT | cut -d ' ' -f 1)
+  MD5_CHECKSUM=$(md5sum $ARTIFACT | cut -d ' ' -f 1)
+
+  curl -H "X-JFrog-Art-Api:$ARTIFACTORY_API_KEY" \
+  -H "X-Checksum-Sha1:$SHA_CHECKSUM" \
+  -H "X-Checksum-Sha256:$SHA256_CHECKSUM" \
+  -H "X-Checksum-MD5:$MD5_CHECKSUM" \
+  -X PUT "$ARTIFACTORY_URL/$ARTIFACTORY_DOCKER_IMAGES_PATH/$ARTIFACT" \
+  -T $ARTIFACT
+done
diff --git a/jjb/onap/uds/scripts/push-repos.sh b/jjb/onap/uds/scripts/push-repos.sh
new file mode 100644 (file)
index 0000000..9ec40c6
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Go to directory holding repository archive artifacts
+cd $REPO_ARCHIVE_ARTIFACT_DIRECTORY
+
+# For each artifact in REPO_ARCHIVE_ARTIFACT_DIRECTORY get the cheksums and upload to Artifactory
+for ARTIFACT in *
+do
+  echo $ARTIFACT
+  SHA_CHECKSUM=$(sha1sum $ARTIFACT| cut -d ' ' -f 1)
+  SHA256_CHECKSUM=$(sha256sum $ARTIFACT | cut -d ' ' -f 1)
+  MD5_CHECKSUM=$(md5sum $ARTIFACT | cut -d ' ' -f 1)
+
+  curl -H "X-JFrog-Art-Api:$ARTIFACTORY_API_KEY" \
+  -H "X-Checksum-Sha1:$SHA_CHECKSUM" \
+  -H "X-Checksum-Sha256:$SHA256_CHECKSUM" \
+  -H "X-Checksum-MD5:$MD5_CHECKSUM" \
+  -X PUT "$ARTIFACTORY_URL/$ARTIFACTORY_REPO_ARCHIVE_PATH/$ARTIFACT" \
+  -T $ARTIFACT
+done
diff --git a/jjb/onap/uds/uds-daily-build-package-promote.yaml b/jjb/onap/uds/uds-daily-build-package-promote.yaml
new file mode 100644 (file)
index 0000000..75efb3b
--- /dev/null
@@ -0,0 +1,232 @@
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2019 Nordix Foundation.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+---
+- project:
+    name: 'uds-daily-build-package-promote'
+    projects: 'onap/sdc, local/onap/uds/sdc-customization'
+    project-name:
+      - uds
+    branches: 20.2, master
+    project_directories: sdc, sdc-customization
+    project_versions:
+    mvn_settings_xml_version:
+    docker_images: '
+      uds/sdc-cassandra-init,
+      uds/sdc-backend-init,
+      uds/sdc-be-plugin/etsi-nfv-nsd-csar,
+      uds/sdc-be-plugin/vf-csar,
+      uds/sdc-customization/eo-sdc-backend-init,
+      uds/sdc-customization/eo-cassandra-init,
+      uds/sdc-backend,
+      uds/sdc-onboard-backend,
+      uds/sdc-frontend,
+      uds/sdc-cassandra,
+      uds/sdc-simulator
+    '
+    docker_image_artifact_directory: $WORKSPACE/artifacts/images
+    artifactory_docker_images_path: onap/uds/images
+    artifact_paths: 'sdc/catalog-be/target/catalog-be-*.war'
+    artifactory_artifact_path: onap/uds
+    artifact_directory: $WORKSPACE/artifacts/artifacts
+    artifactory_repo_archive_path: onap/uds/releases
+    repo_archive_artifact_directory: $WORKSPACE/artifacts/repos
+    grep_parameters: -oP (?<=uds.version>)[^<]+
+    archive_name: uds
+    pom_location: sdc/pom.xml
+    workspace: /home/jenkins/nordix/slave_root/workspace/
+    node: onap-uds-build-ubuntu1804
+
+    jobs:
+      - '{project-name}-daily-build-package-promote'
+      - '{project-name}-build'
+      - '{project-name}-package-artifacts'
+      - '{project-name}-package-images'
+      - '{project-name}-package-repositories'
+      - '{project-name}-promote-artifacts'
+      - '{project-name}-promote-images'
+      - '{project-name}-promote-repositories'
+
+
+- job-template:
+    name: '{project-name}-daily-build-package-promote'
+    description: 'Job for building, packing and pushing UDS artifacts including sources, docker images and other arifacts to Artifactory'
+    project-type: 'multijob'
+    workspace: '{workspace}'
+    node: '{node}'
+    parameters:
+      - multi-project-parameters:
+          projects: '{projects}'
+          branches: '{branches}'
+          project_directories: '{project_directories}'
+          project_versions: '{project_versions}'
+      - git-parameters
+      - maven-parameters:
+          mvn_settings_xml_version: '{mvn_settings_xml_version}'
+      - artifact_parameters:
+          artifact_paths: '{artifact_paths}'
+          artifactory_artifact_path: '{artifactory_artifact_path}'
+          artifact_directory: '{artifact_directory}'
+      - artifactory-parameters
+      - docker-archive-parameters:
+          docker_images: '{docker_images}'
+          artifactory_docker_images_path: '{artifactory_docker_images_path}'
+          docker_image_artifact_directory: '{docker_image_artifact_directory}'
+      - repo-archive-parameters:
+          grep_parameters: '{grep_parameters}'
+          pom_location: '{pom_location}'
+          archive_name: '{archive_name}'
+          artifactory_repo_archive_path: '{artifactory_repo_archive_path}'
+          repo_archive_artifact_directory: '{repo_archive_artifact_directory}'
+
+    builders:
+      - 'pull-source-repositories'
+      - 'generate-build-metadata'
+      - multijob:
+          name: Build
+          condition: SUCCESSFUL
+          projects:
+            - name: '{project-name}-build'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+      - multijob:
+          name: Package
+          condition: SUCCESSFUL
+          execution-type: SEQUENTIALLY
+          projects:
+            - name: '{project-name}-package-artifacts'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+            - name: '{project-name}-package-images'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+            - name: '{project-name}-package-repositories'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+      - multijob:
+          name: Promote
+          condition: SUCCESSFUL
+          execution-type: PARALLEL
+          projects:
+            - name: '{project-name}-promote-artifacts'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+            - name: '{project-name}-promote-images'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+            - name: '{project-name}-promote-repositories'
+              current-parameters: true
+              node-parameters: true
+              abort-all-job: false
+              kill-phase-on: FAILURE
+              property-file: $WORKSPACE/build.properties
+    triggers:
+      - timed: "@midnight"
+    wrappers:
+      - openstack:
+          single-use: True
+      - credentials-binding:
+        - username-password-separated:
+            credential-id: infra-nordix-artifactory-api-key
+            username: ARTIFACTORY_USER
+            password: ARTIFACTORY_API_KEY
+
+- job-template:
+    name: '{project-name}-build'
+    description: 'Job for building out uds repositories'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'maven-build-repositories'
+
+
+- job-template:
+    name: '{project-name}-package-artifacts'
+    description: 'Job for archiving uds artifacts (.war, .jar files etc.)'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'collect-file-artifacts'
+
+
+- job-template:
+    name: '{project-name}-package-images'
+    description: 'Job for archiving uds docker images'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'package-docker-images'
+
+
+- job-template:
+    name: '{project-name}-package-repositories'
+    description: 'Job for archiving uds source repos (sdc, sdc-customization)'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'maven-clean-repositories'
+      - 'package-source-repositories'
+
+
+- job-template:
+    name: '{project-name}-promote-artifacts'
+    description: 'Job for pushing uds file artifacts (.war, .jar files etc.) to Artifactory'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'promote-file-artifacts-to-artifactory'
+
+- job-template:
+    name: '{project-name}-promote-images'
+    description: 'Job for pushing uds docker images to Artifactory'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'promote-docker-images-to-artifactory'
+
+- job-template:
+    name: '{project-name}-promote-repositories'
+    description: 'Job for pushing uds source repositories (sdc, sdc-customization) to Artifactory'
+    workspace: '{workspace}'
+    node: '{node}'
+
+    builders:
+      - 'promote-source-repositories-to-artifactory'
diff --git a/jjb/onap/uds/uds-macros.yaml b/jjb/onap/uds/uds-macros.yaml
new file mode 100644 (file)
index 0000000..d1a866d
--- /dev/null
@@ -0,0 +1,210 @@
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2019 Nordix Foundation.
+# ================================================================================
+# Licensed 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+#-------------------------------------------------------------------------------
+# Macros are used to avoid hitting parameter expansion of curly brackets and
+# the need to using include-raw-escape
+#-------------------------------------------------------------------------------
+
+---
+# Parameters used for setting multiple Gerrit Projects on Nordix
+# Required for cases where source repositories depend on each other to build
+# e.g. sdc-customization depends on sdc repo
+- parameter:
+    name: multi-project-parameters
+    parameters:
+      - string:
+          name: PROJECTS
+          default: '{projects}'
+          description: JJB configured PROJECTS parameter to identify Nordix Gerrit projects
+      - string:
+          name: BRANCHES
+          default: '{branches}'
+          description: "JJB configured BRANCHES parameter (e.g. 20.1, master)"
+      - string:
+          name: PROJECT_DIRECTORIES
+          default: '{project_directories}'
+          description: Directory names to place PROJECTS
+      - string:
+          name: PROJECT_VERSIONS
+          default: '{project_versions}'
+          description: Commit ids of PROJECTS source to checkout e.g. 6d3ab, d96ba Allows for building from specific versions of a source or can also be left blank to pull latest source.
+
+- parameter:
+    name: git-parameters
+    parameters:
+      - string:
+          name: GIT_BASE_HTTPS
+          default: https://gerrit.nordix.org/
+          description: Base HTTPS URL of repository to clone from
+
+- parameter:
+    name: maven-parameters
+    parameters:
+      - string:
+          name: MVN_VERSION
+          default: 3.6.0
+          description: Maven version to build with
+      - string:
+          name: MVN_URL
+          default: https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/$MVN_VERSION/apache-maven-$MVN_VERSION-bin.zip
+          description: Download URL for Maven
+      - string:
+          name: MVN
+          default: $WORKSPACE/apache-maven-$MVN_VERSION/bin/mvn
+          description: Path to mvn executable
+      - string:
+          name: MVN_PARAMS
+          default: -Pdocker
+          description: Maven build parameters
+      - string:
+          name: MVN_SETTINGS_XML_VERSION
+          default: '{mvn_settings_xml_version}'
+          description: Commit ID of ONAP Oparent repository (https://git.onap.org/oparent/) to pull. Used for Maven settings file. Can be left blank to pull the latest version.
+
+- parameter:
+    name: artifactory-parameters
+    parameters:
+      - string:
+          name: ARTIFACTORY_URL
+          default: "https://artifactory.nordix.org/artifactory"
+          description: Artifactory URL to push to
+
+# Parameters for source repository artifacts
+- parameter:
+    name: repo-archive-parameters
+    parameters:
+      - string:
+          name: POM_LOCATION
+          default: '{pom_location}'
+          description: Path to repository pom.xml parsed for version number used within archive filenames
+      - string:
+          name: GREP_PARAMS
+          default: '{grep_parameters}'
+          description: Parameters for grep command used for parsing pom file for version number used within archive filenames
+      - string:
+          name: ARCHIVENAME
+          default: '{archive_name}'
+          description: Name to be given to archive holding the repositories pushed to Artifactory
+      - string:
+          name: ARTIFACTORY_REPO_ARCHIVE_PATH
+          default: '{artifactory_repo_archive_path}'
+          description: Artifactory repository and path to push repository archive to
+      - string:
+          name: REPO_ARCHIVE_ARTIFACT_DIRECTORY
+          default: '{repo_archive_artifact_directory}'
+          description: Workspace directory to hold repository artifacts
+
+
+# Parameters regarding docker image artifacts
+- parameter:
+    name: docker-archive-parameters
+    parameters:
+      - text:
+          name: DOCKER_IMAGES
+          default: '{docker_images}'
+          description: Docker image names to archive and push to Artifactory
+      - string:
+          name: ARTIFACTORY_DOCKER_IMAGES_PATH
+          default: '{artifactory_docker_images_path}'
+          description: Artifactory repository and path to push docker images to
+      - string:
+          name: DOCKER_IMAGE_ARTIFACT_DIRECTORY
+          default: '{docker_image_artifact_directory}'
+          description: Workspace directory to hold docker image artifacts
+
+# Parameters regarding file artifacts (.war, .jar files etc)
+- parameter:
+    name: artifact_parameters
+    parameters:
+      - text:
+          name: ARTIFACT_PATHS
+          default: '{artifact_paths}'
+          description: Artifact file paths that should be pushed to Artifactory, can contain wildcards e.g. PROJECTDIRECTORY/some/path/catalog-be-*.war
+      - string:
+          name: ARTIFACTORY_ARTIFACT_PATH
+          default: '{artifactory_artifact_path}'
+          description: Artifactory repository and path to push artifacts to e.g. .war .jar files
+      - string:
+          name: ARTIFACT_DIRECTORY
+          default: '{artifact_directory}'
+          description: Workspace directory to hold artifacts
+
+
+# Builders for maven builds
+- builder:
+    name: 'generate-build-metadata'
+    builders:
+      - shell:
+          !include-raw: ./scripts/generate-build-metadata.sh
+
+- builder:
+    name: 'pull-source-repositories'
+    builders:
+      - shell:
+          !include-raw: ./scripts/pull-repos.sh
+
+- builder:
+    name: 'maven-build-repositories'
+    builders:
+      - shell:
+          !include-raw: ./scripts/maven-build.sh
+
+- builder:
+    name: 'maven-clean-repositories'
+    builders:
+      - shell:
+          !include-raw: ./scripts/maven-clean.sh
+
+# Builders for packaging artifacts (.war .jar, docker images and source repositories)
+- builder:
+    name: 'collect-file-artifacts'
+    builders:
+      - shell:
+          !include-raw: ./scripts/collect-artifacts.sh
+
+- builder:
+    name: 'package-docker-images'
+    builders:
+      - shell:
+          !include-raw: ./scripts/archive-images.sh
+
+- builder:
+    name: 'package-source-repositories'
+    builders:
+      - shell:
+          !include-raw: ./scripts/archive-repos.sh
+
+# Builders for promoting/pushing artifacts (.war, .jar, docker images and source repositories) to Artifactory
+- builder:
+    name: 'promote-file-artifacts-to-artifactory'
+    builders:
+      - shell:
+          !include-raw: ./scripts/push-artifacts.sh
+
+- builder:
+    name: 'promote-docker-images-to-artifactory'
+    builders:
+      - shell:
+          !include-raw: ./scripts/push-images.sh
+
+- builder:
+    name: 'promote-source-repositories-to-artifactory'
+    builders:
+      - shell:
+          !include-raw: ./scripts/push-repos.sh