Merge "Builds and archives uds artifacts"
authorMatthew McNeilly <matthew.mcneilly.est@gmail.com>
Wed, 29 Jul 2020 09:22:12 +0000 (09:22 +0000)
committerNordix Gerrit <gerrit@nordix.org>
Wed, 29 Jul 2020 09:22:12 +0000 (09:22 +0000)
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