]> git.apps.os.sepia.ceph.com Git - ceph-build.git/commitdiff
calamari-clients: Add calamari-clients jenkins build jobs 475/head
authorBoris Ranto <branto@redhat.com>
Fri, 9 Sep 2016 18:22:53 +0000 (20:22 +0200)
committerBoris Ranto <branto@redhat.com>
Mon, 12 Sep 2016 17:00:37 +0000 (19:00 +0200)
Signed-off-by: Boris Ranto <branto@redhat.com>
calamari-clients-build/build/build_rpm [new file with mode: 0644]
calamari-clients-build/build/setup [new file with mode: 0644]
calamari-clients-build/build/validate_rpm [new file with mode: 0644]
calamari-clients-build/config/definitions/calamari-clients-build.yml [new file with mode: 0644]
calamari-clients-setup/build/build [new file with mode: 0644]
calamari-clients-setup/config/definitions/calamari-clients-setup.yml [new file with mode: 0644]
calamari-clients/build/build [deleted file]
calamari-clients/config/definitions/calamari-clients.yml

diff --git a/calamari-clients-build/build/build_rpm b/calamari-clients-build/build/build_rpm
new file mode 100644 (file)
index 0000000..54a20bd
--- /dev/null
@@ -0,0 +1,114 @@
+#!/bin/bash
+set -ex
+
+if [[ ! -f /etc/redhat-release && ! -f /usr/bin/zypper ]] ; then
+    exit 0
+fi
+
+cd $WORKSPACE
+
+get_rpm_dist() {
+    LSB_RELEASE=/usr/bin/lsb_release
+    [ ! -x $LSB_RELEASE ] && echo unknown && exit
+
+    ID=`$LSB_RELEASE --short --id`
+
+    case $ID in
+    RedHatEnterpriseServer)
+        RELEASE=`$LSB_RELEASE --short --release | cut -d. -f1`
+        DIST=rhel$RELEASE
+        DISTRO=rhel
+        ;;
+    CentOS)
+        RELEASE=`$LSB_RELEASE --short --release | cut -d. -f1`
+        DIST=el$RELEASE
+        DISTRO=centos
+        ;;
+    Fedora)
+        RELEASE=`$LSB_RELEASE --short --release`
+        DIST=fc$RELEASE
+        DISTRO=fedora
+        ;;
+    SUSE\ LINUX)
+        DESC=`$LSB_RELEASE --short --description`
+        RELEASE=`$LSB_RELEASE --short --release`
+        case $DESC in
+        *openSUSE*)
+                DIST=opensuse$RELEASE
+                DISTRO=opensuse
+            ;;
+        *Enterprise*)
+                DIST=sles$RELEASE
+                DISTRO=sles
+                ;;
+            esac
+        ;;
+    *)
+        DIST=unknown
+        DISTRO=unknown
+        ;;
+    esac
+
+    echo $DIST
+}
+
+get_rpm_dist
+dist=$DIST
+[ -z "$dist" ] && echo no dist && exit 1
+echo dist $dist
+
+chacra_endpoint="calamari-clients/${BRANCH}/${SHA1}/${DISTRO}/${RELEASE}"
+chacra_check_url="${chacra_endpoint}/${ARCH}/calamari-clients-${VERSION}-${RPM_RELEASE}.${DIST}.${ARCH}.rpm"
+
+if [ "$THROWAWAY" = false ] ; then
+    # this exists in scripts/build_utils.sh
+    check_binary_existence $chacra_check_url
+fi
+
+HOST=$(hostname --short)
+echo "Building on $(hostname)"
+echo "  DIST=${DIST}"
+echo "  ARCH=${ARCH}"
+echo "  WS=$WORKSPACE"
+echo "  PWD=$(pwd)"
+echo "  BUILD SOURCE=$COPYARTIFACT_BUILD_NUMBER_CEPH_SETUP"
+echo "*****"
+env
+echo "*****"
+
+# Install the dependencies
+sudo yum-builddep -y dist/calamari-clients.spec
+
+# Create the source rpm
+echo "Building SRPM"
+rpmbuild \
+       --define "_sourcedir ./dist" \
+       --define "_specdir ." \
+       --define "_builddir ." \
+       --define "_srcrpmdir ." \
+       --define "_rpmdir ." \
+       --define "dist .any" \
+       --define "fedora 21" \
+       --define "rhel 7" \
+       --nodeps -bs dist/calamari-clients.spec
+SRPM=$(readlink -f *.src.rpm)
+
+# Build the binaries
+echo "Building RPMs"
+sudo mock -r epel-${RELEASE}-${ARCH} --resultdir=./dist/rpm/"%(dist)s"/"%(target_arch)s"/ ${SRPM}
+
+# Make sure we execute at the top level directory
+cd "$WORKSPACE"
+
+[ "$FORCE" = true ] && chacra_flags="--force" || chacra_flags=""
+
+if [ "$THROWAWAY" = false ] ; then
+    # push binaries to chacra
+    echo "$SRPM" | $VENV/chacractl binary ${chacra_flags} create ${chacra_endpoint}/source/
+    find dist/rpm/$DIST/ | egrep '\.rpm$' | $VENV/chacractl binary ${chacra_flags} create ${chacra_endpoint}/$ARCH/
+
+    # start repo creation
+    $VENV/chacractl repo update ${chacra_endpoint}
+
+    echo Check the status of the repo at: https://shaman.ceph.com/api/repos/${chacra_endpoint}
+fi
diff --git a/calamari-clients-build/build/setup b/calamari-clients-build/build/setup
new file mode 100644 (file)
index 0000000..bccd321
--- /dev/null
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Ceph distributed storage system
+#
+# Copyright (C) 2016 Red Hat <contact@redhat.com>
+#
+# Author: Boris Ranto <branto@redhat.com>
+#
+#  This library is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU Lesser General Public
+#  License as published by the Free Software Foundation; either
+#  version 2.1 of the License, or (at your option) any later version.
+#
+set -ex
+HOST=$(hostname --short)
+echo "Building on $(hostname)"
+echo "  DIST=${DIST}"
+echo "  BPTAG=${BPTAG}"
+echo "  KEYID=${KEYID}"
+echo "  WS=$WORKSPACE"
+echo "  PWD=$(pwd)"
+echo "  BUILD SOURCE=$COPYARTIFACT_BUILD_NUMBER_CEPH_SETUP"
+echo "*****"
+env
+echo "*****"
+
+if test $(id -u) != 0 ; then
+    SUDO=sudo
+fi
+export LC_ALL=C # the following is vulnerable to i18n
+
+if test -f /etc/redhat-release ; then
+    $SUDO yum install -y redhat-lsb-core
+fi
+
+if which apt-get > /dev/null ; then
+    $SUDO apt-get install -y lsb-release
+fi
+
+case $(lsb_release -si) in
+CentOS|Fedora|SUSE*|RedHatEnterpriseServer)
+        case $(lsb_release -si) in
+            SUSE*)
+                $SUDO zypper -y yum-utils
+                ;;
+            *)
+                $SUDO yum install -y yum-utils mock
+                ;;
+        esac
+        ;;
+*)
+        echo "$(lsb_release -si) is unknown, dependencies will have to be installed manually."
+        ;;
+esac
+
+pkgs=( "chacractl>=0.0.4" )
+install_python_packages "pkgs[@]"
+
+# ask shaman which chacra instance to use
+chacra_url=`curl -f -u $SHAMAN_API_USER:$SHAMAN_API_KEY https://shaman.ceph.com/api/nodes/next/`
+# create the .chacractl config file using global variables
+make_chacractl_config $chacra_url
diff --git a/calamari-clients-build/build/validate_rpm b/calamari-clients-build/build/validate_rpm
new file mode 100644 (file)
index 0000000..17b4148
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+set -ex
+
+# only do work if we are a RPM distro
+if [[ ! -f /etc/redhat-release && ! -f /usr/bin/zypper ]] ; then
+    exit 0
+fi
diff --git a/calamari-clients-build/config/definitions/calamari-clients-build.yml b/calamari-clients-build/config/definitions/calamari-clients-build.yml
new file mode 100644 (file)
index 0000000..be26bbb
--- /dev/null
@@ -0,0 +1,72 @@
+- job:
+    name: calamari-clients-build
+    project-type: matrix
+    defaults: global
+    display-name: 'calamari-clients-build'
+    block-downstream: false
+    block-upstream: false
+    concurrent: true
+    properties:
+      - github:
+          url: https://github.com/ceph/calamari-clients
+    execution-strategy:
+       combination-filter: DIST==AVAILABLE_DIST && ARCH==AVAILABLE_ARCH && (ARCH=="x86_64" || (ARCH == "arm64" && (DIST == "xenial" || DIST == "centos7")))
+    axes:
+      - axis:
+          type: label-expression
+          name: MACHINE_SIZE
+          values:
+            - small
+      - axis:
+          type: label-expression
+          name: AVAILABLE_ARCH
+          values:
+            - x86_64
+            - arm64
+      - axis:
+          type: label-expression
+          name: AVAILABLE_DIST
+          values:
+            - centos6
+            - centos7
+      - axis:
+          type: dynamic
+          name: DIST
+          values:
+            - DISTROS
+      - axis:
+          type: dynamic
+          name: ARCH
+          values:
+            - ARCHS
+
+
+
+    builders:
+      - shell: |
+          echo "Cleaning up top-level workarea (shared among workspaces)"
+          rm -rf dist
+          rm -rf venv
+          rm -rf release
+      - copyartifact:
+          project: calamari-clients-setup
+          filter: 'dist/**'
+          which-build: last-successful
+      - inject:
+          properties-file: ${WORKSPACE}/dist/sha1
+      - inject:
+          properties-file: ${WORKSPACE}/dist/branch
+      - inject:
+          properties-file: ${WORKSPACE}/dist/version
+      # rpm build scripts
+      - shell:
+          !include-raw:
+            - ../../build/validate_rpm
+            - ../../../scripts/build_utils.sh
+            - ../../build/setup
+            - ../../build/build_rpm
+
+    wrappers:
+      - inject-passwords:
+          global: true
+          mask-password-params: true
diff --git a/calamari-clients-setup/build/build b/calamari-clients-setup/build/build
new file mode 100644 (file)
index 0000000..d958af5
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/bash -ex
+
+HOST=$(hostname --short)
+echo "Building on ${HOST}"
+echo "  DIST=${DIST}"
+echo "  BPTAG=${BPTAG}"
+echo "  WS=$WORKSPACE"
+echo "  PWD=$(pwd)"
+echo "  BRANCH=$BRANCH"
+echo "  SHA1=$GIT_COMMIT"
+
+if [ -x "$BRANCH" ] ; then
+    echo "No git branch was supplied"
+    exit 1
+fi
+
+# Make sure the repo is clean
+echo "Cleaning up the repo"
+git clean -fxd
+
+# Make sure the dist directory is clean
+rm -rf dist
+mkdir -p dist
+
+echo "Building version $(git describe) Branch $BRANCH"
+
+# Install any setup-time deps
+if [ -x install-deps.sh ]; then
+  echo "Ensuring dependencies are installed"
+  ./install-deps.sh
+fi
+# These two should be in install-deps.sh
+sudo yum -y install npm
+sudo npm install --global grunt-cli
+
+# Get the version
+eval $(./get-versions.sh)
+RPM_RELEASE=$(echo $REVISION | tr '-' '_')
+
+# Create the source tarball and move it to dist
+echo "Building source distribution"
+make dist
+mv ../calamari-clients_*.tar.gz dist/
+
+# Prepare the spec file for build
+sed -e "s/@VERSION@/${VERSION}/g" -e "s/@RELEASE@/${RPM_RELEASE}/g" < calamari-clients.spec.in > dist/calamari-clients.spec
+
+# Save these so that we can later inject them into the build script
+cat > dist/sha1 << EOF
+SHA1=${GIT_COMMIT}
+EOF
+
+cat > dist/branch << EOF
+BRANCH=${BRANCH}
+EOF
+
+cat > dist/version << EOF
+VERSION=${VERSION}
+RPM_RELEASE=${RPM_RELEASE}
+EOF
diff --git a/calamari-clients-setup/config/definitions/calamari-clients-setup.yml b/calamari-clients-setup/config/definitions/calamari-clients-setup.yml
new file mode 100644 (file)
index 0000000..61d71eb
--- /dev/null
@@ -0,0 +1,48 @@
+- job:
+    name: calamari-clients-setup
+    description: "This job step checks out the branch and builds the tarballs, diffs, and dsc that are passed to the calamari-clients-build step.\r\n\r\nNotes:\r\nJob needs to run on a releatively recent debian system.  The Restrict where run feature is used to specifiy an appropriate label.\r\nThe clear workspace before checkout box for the git plugin is used."
+    # we do not need to pin this to trusty anymore for the new jenkins instance
+    # FIXME: unpin when this gets ported over
+    node: huge && trusty
+    display-name: 'calamari-clients-setup'
+    logrotate:
+      daysToKeep: -1
+      numToKeep: 25
+      artifactDaysToKeep: -1
+      artifactNumToKeep: -1
+    block-downstream: false
+    block-upstream: false
+    concurrent: true
+    properties:
+      - github:
+          url: https://github.com/ceph/calamari-clients
+
+    parameters:
+      - string:
+          name: BRANCH
+          description: "The git branch (or tag) to build"
+
+    scm:
+      - git:
+          url: git@github.com:ceph/calamari-clients.git
+          # Use the SSH key attached to the ceph-jenkins GitHub account.
+          credentials-id: '39fa150b-b2a1-416e-b334-29a9a2c0b32d'
+          branches:
+            - $BRANCH
+          skip-tag: true
+          wipe-workspace: true
+
+    builders:
+      - shell:
+          !include-raw ../../build/build
+
+    publishers:
+      - archive:
+          artifacts: 'dist/**'
+          allow-empty: false
+          latest-only: false
+
+    wrappers:
+      - inject-passwords:
+          global: true
+          mask-password-params: true
diff --git a/calamari-clients/build/build b/calamari-clients/build/build
deleted file mode 100644 (file)
index 3e81c86..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-set -ex
-echo "BRANCH: ${BRANCH} DIST: $dist ARCH: $arch WORKSPACE: $WORKSPACE  PWD: ${PWD}"
-ls $WORKSPACE
-rm -f $WORKSPACE/*{rpm,deb}
-ls $WORKSPACE
-
-sudo -E salt-call --local --file-root=$WORKSPACE/calamari-clients/vagrant/salt/roots state.highstate | \
-   multitee 0-1,4 4>/tmp/${BUILD_TAG}.out
-errs=$(sed --regexp-extended -n 's/^Failed:[[:space:]]+([[:digit:]]+)/\1/p' < /tmp/${BUILD_TAG}.out)
-rm /tmp/${BUILD_TAG}.out
-if [ $errs != 0 ] ; then echo "$errs HIGHSTATE ERRORS, BUILD FAILED"; exit 1; fi
-
-rm -rf $WORKSPACE/$BRANCH
-mkdir $WORKSPACE/$BRANCH
-find $WORKSPACE -maxdepth 1 -name '*.deb' -print0 -o -name '*.rpm' -print0 \
-  -o -name 'calamari-clients.build.output.tar.gz' -print0 | xargs --verbose -0 -I'{}' mv '{}' $WORKSPACE/$BRANCH
index 575f8371e2a4faa537b72dfecc2fa5ffc916b25e..33295041d492c698d7a6a3c3b11de46aff886042 100644 (file)
@@ -1,63 +1,72 @@
 - job:
-    axes:
-    - axis:
-        name: arch
-        type: label-expression
-        values:
-        - x86_64
-    - axis:
-        name: dist
-        type: label-expression
-        values:
-        - centos
-        - rhel7
-        - trusty
-    - axis:
-        name: label
-        type: slave
-        values:
-        - calamari-buildslave
+    name: calamari-clients
+    description: 'This is the main calamari-clients build task which builds for testing purposes.'
+    project-type: multijob
+    defaults: global
+    concurrent: true
+    display-name: 'calamari-clients'
+    logrotate:
+      daysToKeep: -1
+      numToKeep: 25
+      artifactDaysToKeep: 25
+      artifactNumToKeep: 25
     block-downstream: false
     block-upstream: false
-    builders:
-    - copyartifact:
-        exclude-pattern: ''
-        filter: $BRANCH/calamari-clients-build-output.tar.gz
-        flatten: true
-        project: calamari-clients-precise
-        target: $WORKSPACE
-        which-build: last-successful
-    - shell: !include-raw ../../build/build
-    combination-filter: dist != "wheezy"
-    description: 'Build all the non-precise distros (which really means "package them")'
-    execution-strategy:
-      run-sequentially: false
-    logrotate:
-      artifactDaysToKeep: '-1'
-      artifactNumToKeep: '-1'
-      daysToKeep: '-1'
-      numToKeep: '-1'
-    name: 'calamari-clients'
-    parameters:
-    - string:
-        default: master
-        description: ''
-        name: BRANCH
-    project-type: matrix
     properties:
-    - github:
-        url: https://github.com/ceph/romana/
-    publishers:
-    - archive:
-        allow-empty: false
-        artifacts: $BRANCH/*
-        default-excludes: true
-        fingerprint: false
-        only-if-success: false
-    scm:
-    - git:
-        basedir: calamari-clients
-        branches:
-          - $BRANCH
-        url: https://github.com/ceph/calamari-clients.git
-        wipe-workspace: true
+      - github:
+          url: https://github.com/ceph/calamari-clients
+
+    parameters:
+      - string:
+          name: BRANCH
+          description: "The git branch (or tag) to build"
+          default: master
+
+      - string:
+          name: DISTROS
+          description: "A list of distros to build for. Available options are: xenial, centos7, centos6, trusty, precise, wheezy, and jessie"
+          default: "centos6 centos7"
+
+      - string:
+          name: ARCHS
+          description: "A list of architectures to build for. Available options are: x86_64, and arm64"
+          default: "x86_64"
+
+      - bool:
+          name: THROWAWAY
+          description: "
+Default: False. When True it will not POST binaries to chacra. Artifacts will not be around for long. Useful to test builds."
+          default: false
+
+      - bool:
+          name: FORCE
+          description: "
+If this is unchecked, then nothing is built or pushed if they already exist in chacra. This is the default.
+
+If this is checked, then the binaries will be built and pushed to chacra even if they already exist in chacra."
+
+      - string:
+          name: CALAMARI_BUILD_VIRTUALENV
+          description: "Base parent path for virtualenv locations, set to avoid issues with extremely long paths that are incompatible with tools like pip. Defaults to '/tmp/' (note the trailing slash, which is required)."
+          default: "/tmp/"
+
+    builders:
+      - multijob:
+          name: 'calamari-clients setup phase'
+          condition: SUCCESSFUL
+          projects:
+            - name: calamari-clients-setup
+              current-parameters: true
+              exposed-scm: false
+      - multijob:
+          name: 'calamari-clients build phase'
+          condition: SUCCESSFUL
+          projects:
+            - name: calamari-clients-build
+              current-parameters: true
+              exposed-scm: false
+
+    wrappers:
+      - inject-passwords:
+          global: true
+          mask-password-params: true