Initial JJB self-hosting job definitions 03/3/1
authorAndrew Grimberg <agrimberg@linuxfoundation.org>
Mon, 23 Nov 2015 16:48:17 +0000 (08:48 -0800)
committerAndrew Grimberg <agrimberg@linuxfoundation.org>
Mon, 23 Nov 2015 16:48:17 +0000 (08:48 -0800)
These are the base definitions for having Jenkins validate and merge the
JJB jobs that manage the Jenkins instance.

Change-Id: Ic028248bc6cacb86d4db8c1e0f5f924640892c99
Signed-off-by: Andrew Grimberg <agrimberg@linuxfoundation.org>
jjb/ci-management-jobs.yaml [new file with mode: 0644]
jjb/global-defaults.yaml [new file with mode: 0644]
jjb/global-macros.yaml [new file with mode: 0644]
jjb/include-raw-jjb-update.sh [new file with mode: 0644]
scripts/check-unicode.sh [new file with mode: 0755]

diff --git a/jjb/ci-management-jobs.yaml b/jjb/ci-management-jobs.yaml
new file mode 100644 (file)
index 0000000..7b2540c
--- /dev/null
@@ -0,0 +1,154 @@
+- project:
+    name: ci-management-jobs
+    jobs:
+        - 'ci-management-verify-jjb'
+        - 'ci-management-merge'
+        - 'ci-management-weekly'
+
+    project: 'ci-management'
+
+- job-template:
+    name: ci-management-verify-jjb
+
+    project-type: freestyle
+
+    logrotate:
+        daysToKeep: 30
+        numToKeep: 10
+        artifactDaysToKeep: -1
+        artifactNumToKeep: -1
+
+    parameters:
+        - project-parameter:
+            project: '{project}'
+        - gerrit-parameter:
+            branch: 'master'
+
+    scm:
+        - gerrit-trigger-scm:
+            credentials-id: '{ssh-credentials}'
+            refspec: '$GERRIT_REFSPEC'
+            choosing-strategy: 'gerrit'
+
+    wrappers:
+        - ssh-agent-credentials:
+            users:
+                - '{ssh-credentials}'
+
+    triggers:
+        - gerrit:
+            trigger-on:
+                - patchset-created-event:
+                    exclude-drafts: 'false'
+                    exclude-trivial-rebase: 'false'
+                    exclude-no-code-change: 'false'
+                - draft-published-event
+                - comment-added-contains-event:
+                    comment-contains-value: 'recheck'
+                - comment-added-contains-event:
+                    comment-contains-value: 'reverify'
+            projects:
+                - project-compare-type: 'ANT'
+                  project-pattern: 'ci-management'
+                  branches:
+                    - branch-compare-type: 'ANT'
+                      branch-pattern: '**/master'
+                  file-paths:
+                    - compare-type: ANT
+                      pattern: jjb/*
+                    - compare-type: ANT
+                      pattern: jjb-templates/**
+
+    builders:
+        - shell: |
+            jenkins-jobs test jjb/
+        - ci-management-check-unicode
+
+- job-template:
+    name: 'ci-management-merge'
+
+    project-type: freestyle
+
+    logrotate:
+        daysToKeep: 30
+        numToKeep: 40
+        artifactDaysToKeep: -1
+        artifactNumToKeep: 5
+
+    parameters:
+        - project-parameter:
+            project: '{project}'
+        - gerrit-parameter:
+            branch: 'master'
+
+    scm:
+        - gerrit-trigger-scm:
+            credentials-id: '{ssh-credentials}'
+            refspec: ''
+            choosing-strategy: 'default'
+
+    wrappers:
+        - ssh-agent-credentials:
+            users:
+                - '{ssh-credentials}'
+
+    triggers:
+        - gerrit:
+            trigger-on:
+                - change-merged-event
+                - comment-added-contains-event:
+                    comment-contains-value: 'remerge'
+            projects:
+                - project-compare-type: 'ANT'
+                  project-pattern: 'ci-management'
+                  branches:
+                    - branch-compare-type: 'ANT'
+                      branch-pattern: '**/master'
+                  file-paths:
+                    - compare-type: ANT
+                      pattern: jjb/**
+                    - compare-type: ANT
+                      pattern: jjb-templates/**
+
+    builders:
+        - shell:
+            !include-raw-escape include-raw-jjb-update.sh
+
+- job-template:
+    name: 'ci-management-weekly'
+
+    # ci-management-weekly job to run JJB update weekly
+    #
+    # This job's purpose is to update all the JJB on a weekly (Sunday)
+    # basis with --flush-cache enabled to ensure jobs are properly configured in Jenkins
+
+    project-type: freestyle
+
+    logrotate:
+        daysToKeep: 30
+        numToKeep: 40
+        artifactDaysToKeep: -1
+        artifactNumToKeep: 5
+
+    parameters:
+        - project-parameter:
+            project: '{project}'
+
+    scm:
+        - git-scm:
+            credentials-id: '{ssh-credentials}'
+            branch: 'master'
+
+    wrappers:
+        - ssh-agent-credentials:
+            users:
+                - '{ssh-credentials}'
+
+    triggers:
+        - timed: 'H H * * 0'
+
+    builders:
+        - shell: |
+            jenkins-jobs --flush-cache update jjb/
+
+
diff --git a/jjb/global-defaults.yaml b/jjb/global-defaults.yaml
new file mode 100644 (file)
index 0000000..87c10fe
--- /dev/null
@@ -0,0 +1,11 @@
+# GLOBAL jenkins defaults
+
+- defaults:
+    name: global
+
+    build-days-to-keep: 30
+    build-num-to-keep: 40
+    build-artifact-days-to-keep: -1
+    build-artifact-num-to-keep: 5
+
+    ssh-credentials: 'jenkins-gerrit-credentials'
diff --git a/jjb/global-macros.yaml b/jjb/global-macros.yaml
new file mode 100644 (file)
index 0000000..6abec56
--- /dev/null
@@ -0,0 +1,116 @@
+# Global macros
+
+#### PARAMETERS
+- parameter:
+    name: project-parameter
+    parameters:
+        - string:
+            name: PROJECT
+            default: '{project}'
+            description: "JJB configured PROJECT parameter to identify a Gerrit project"
+
+- parameter:
+    name: gerrit-parameter
+    parameters:
+        - string:
+            name: GERRIT_BRANCH
+            default: '{branch}'
+            description: "JJB configured GERRIT_BRANCH parameter"
+
+- parameter:
+    name: gerrit-project-parameter
+    parameters:
+        - string:
+            name: GERRIT_PROJECT
+            default: '{project}'
+            description: "GERRIT_PROJECT parameter if not given by trigger"
+
+- parameter:
+    name: gerrit-refspec-parameter
+    parameters:
+        - string:
+            name: GERRIT_REFSPEC
+            default: '{refspec}'
+            description: "GERRIT_REFSPEC parameter not given by trigger"
+
+##### SCMS
+- scm:
+    name: git-scm
+    scm:
+        - git:
+            credentials-id: '{credentials-id}'
+            url: '$GIT_BASE'
+            refspec: ''
+            branches:
+                - 'origin/${branch}'
+            skip-tag: true
+            wipe-workspace: true
+
+- scm:
+    name: gerrit-trigger-scm
+    scm:
+        - git:
+            credentials-id: '{credentials-id}'
+            url: '$GIT_BASE'
+            refspec: '{refspec}'
+            branches:
+                - 'origin/$GERRIT_BRANCH'
+            skip-tag: true
+            choosing-strategy: '{choosing-strategy}'
+
+###### WRAPPERS
+- wrapper:
+    name: build-timeout
+    wrappers:
+        - timeout:
+            type: absolute
+            timeout: 360
+            fail: true
+
+###### TRIGGERS
+- trigger:
+    name: gerrit-trigger-patch-submitted
+    triggers:
+        - gerrit:
+            server-name: 'Default'
+            trigger-on:
+                - patchset-created-event:
+                    exclude-drafts: 'false'
+                    exclude-trivial-rebase: 'false'
+                    exclude-no-code-change: 'false'
+                - draft-published-event
+                - comment-added-contains-event:
+                    comment-contains-value: 'recheck'
+                - comment-added-contains-event:
+                    comment-contains-value: 'reverify'
+            projects:
+                - project-compare-type: 'ANT'
+                  project-pattern: '{name}'
+                  branches:
+                    - branch-compare-type: 'ANT'
+                      branch-pattern: '**/{branch}'
+
+- trigger:
+    name: gerrit-trigger-patch-merged
+    triggers:
+        - gerrit:
+            server-name: 'Default'
+            trigger-on:
+                - change-merged-event
+                - comment-added-contains-event:
+                    comment-contains-value: 'remerge'
+            projects:
+                - project-compare-type: 'ANT'
+                  project-pattern: '{name}'
+                  branches:
+                    - branch-compare-type: 'ANT'
+                      branch-pattern: '**/{branch}'
+
+###### BUILDERS
+- builder:
+    name: ci-management-check-unicode
+    builders:
+        - shell: |
+            $WORKSPACE/scripts/check-unicode.sh jjb/
+
+
diff --git a/jjb/include-raw-jjb-update.sh b/jjb/include-raw-jjb-update.sh
new file mode 100644 (file)
index 0000000..f1aaaa8
--- /dev/null
@@ -0,0 +1,10 @@
+jenkins-jobs update --delete-old jjb/
+
+# Submit patches for any jobs that can be auto updated
+function submitJJB {
+    git commit -asm "Update automated project templates"
+    git push origin HEAD:refs/for/master
+}
+
+gitdir=$(git rev-parse --git-dir); scp -p -P 29418 rotterdam-jobbuilder@git.opendaylight.org:hooks/commit-msg ${gitdir}/hooks/
+git diff --exit-code || submitJJB
diff --git a/scripts/check-unicode.sh b/scripts/check-unicode.sh
new file mode 100755 (executable)
index 0000000..db45f6a
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# @License EPL-1.0 <http://spdx.org/licenses/EPL-1.0>
+##############################################################################
+# Copyright (c) 2015 The Linux Foundation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#   Thanh Ha (The Linux Foundation) - Initial implementation
+##############################################################################
+
+directory="."
+if [ ! -z "$1" ]; then
+    directory="$1"
+fi
+
+echo "Scanning $directory"
+for x in $(find $directory -type f); do
+    if LC_ALL=C grep -q '[^[:print:][:space:]]' "$x"; then
+        echo "file "$x" contains non-ascii characters"
+        exit 1
+    fi
+done
+
+echo "All files are ASCII only"