diff options
author | Artem Naluzhnyy <A.Naluzhnyy@samsung.com> | 2019-09-02 14:27:36 +0200 |
---|---|---|
committer | Artem Naluzhnyy <a.naluzhnyy@samsung.com> | 2019-09-03 09:43:32 +0000 |
commit | dcc213dedc51a82832f90d644f14b28a3e55aa18 (patch) | |
tree | 1f5f90bb2013b954a5a7af3197f73e451324699c | |
parent | 5b0faffcb99bb520786c45d9f58d83a094dcf7b1 (diff) |
Add workaround for broken git repo polling by Jenkins
To save our Jenkins lab resources and Coverity Scan submission quota we
can run the scan if there were recent commits only.
At the moment the following JJB configuration does not work properly for
ONAP repositories:
triggers:
- pollscm:
cron: '@daily'
As a workaround a new job build parameter is introduced -
'max-git-repo-age-hours'. If set to non-zero run the code scan only if
there were no git repository commits last max-git-repo-age-hours hours.
It makes sense to set the value twice the 'cron' interval for the job
(e.g. if 'cron: @daily', then max-git-repo-age-hours=48).
Issue-ID: CIMAN-260
Signed-off-by: Artem Naluzhnyy <A.Naluzhnyy@samsung.com>
Change-Id: I82ce092e9b8bb423e9db8b3958d6cfa3b527b33b
-rw-r--r-- | jjb/ci-management/ci-management-coverity.yaml | 9 | ||||
-rw-r--r-- | shell/maven-coverity.sh | 38 |
2 files changed, 43 insertions, 4 deletions
diff --git a/jjb/ci-management/ci-management-coverity.yaml b/jjb/ci-management/ci-management-coverity.yaml index fadea8882..6003bf24e 100644 --- a/jjb/ci-management/ci-management-coverity.yaml +++ b/jjb/ci-management/ci-management-coverity.yaml @@ -41,6 +41,7 @@ coverity-user-email: '' coverity-search-paths: '' coverity-search-exclude-regexs: '' + max-git-repo-age-hours: 0 stream: master submodule-recursive: true submodule-timeout: 10 @@ -101,6 +102,14 @@ name: DRY_RUN default: '{dry-run}' description: Do not submit results to Coverity Scan server at the end of the build. + - string: + name: 'MAX_GIT_REPO_AGE_HOURS' + default: '{max-git-repo-age-hours}' + description: > + If set to non-zero run the code scan only if there were no git + repository commits last MAX_GIT_REPO_AGE_HOURS hours. + It makes sense to set the value twice the 'cron' interval for the + job (e.g. if 'cron: @daily', then MAX_GIT_REPO_AGE_HOURS=48) triggers: - timed: '{obj:cron}' diff --git a/shell/maven-coverity.sh b/shell/maven-coverity.sh index 5db7f33e4..af5422ead 100644 --- a/shell/maven-coverity.sh +++ b/shell/maven-coverity.sh @@ -23,6 +23,29 @@ SUBMISSION_ATTEMPTS=5 SUBMISSION_INITIAL_REST_INTERVAL=30 # seconds, will be doubled after each attempt #----------------------------------------------------------------------------- +# Check for git repo changes within the last $MAX_GIT_REPO_AGE_HOURS hours +# +# It makes sense to set the value twice the 'cron' interval for the job (e.g. +# if 'cron: @daily', then MAX_GIT_REPO_AGE_HOURS=48) + +if ! [[ "${MAX_GIT_REPO_AGE_HOURS:=0}" =~ ^[0-9]+$ ]]; then + echo '[ERROR] MAX_GIT_REPO_AGE_HOURS must be non-negative integer.' \ + >&2 + exit 1 +fi + +if [ ${MAX_GIT_REPO_AGE_HOURS:=0} -ne 0 ]; then + LAST_COMMIT_AGE=$(( $(date +%s) - $(git log -1 --pretty=format:%ct) )) + + if [ $LAST_COMMIT_AGE -le $(( MAX_GIT_REPO_AGE_HOURS *60*60 )) ]; then + echo '[NOTICE] Git repository did not have any commits last' \ + "${MAX_GIT_REPO_AGE_HOURS} hours - no need to re-analyse it." \ + >&2 + exit 0 + fi +fi + +#----------------------------------------------------------------------------- # Process parameters for JS/TS/Python/Ruby/PHP files analysis if [ -n "${SEARCH_PATHS:=}" ]; then @@ -30,7 +53,9 @@ if [ -n "${SEARCH_PATHS:=}" ]; then if [ -d "${SEARCH_PATH}" ]; then FS_CAPTURE_SEARCH_PARAMS="${FS_CAPTURE_SEARCH_PARAMS:=} --fs-capture-search '${SEARCH_PATH}'" else - echo "'${SEARCH_PATH}' from \$SEARCH_PATHS is not an existing directory." >&2 + echo "[ERROR] '${SEARCH_PATH}' from \$SEARCH_PATHS is not an" \ + "existing directory." \ + >&2 exit 1 fi done @@ -69,7 +94,9 @@ if [ "${DRY_RUN}" != 'true' ]; then | jq '.upload_permitted' ) if [ x"${IS_COVERITY_UPLOAD_PERMITTED}" != x'true' ]; then - echo "Upload quota reached. Next upload permitted at "$(echo "${CURL_OUTPUT}" | jq '.next_upload_permitted_at') >&2 + echo "[WARNING] Upload quota reached. Next upload permitted at" \ + $(echo "${CURL_OUTPUT}" | jq '.next_upload_permitted_at') \ + >&2 exit 1 fi fi @@ -220,11 +247,14 @@ if [ "${DRY_RUN}" != 'true' ]; then HTTP_RESPONSE=$(echo -n "${CURL_OUTPUT}" | head -n -1 | tr -d '\n') if [ x"${HTTP_RESPONSE}" != x"Build successfully submitted." ]; then - echo "Coverity Scan service responded with '${HTTP_RESPONSE}' while 'Build successfully submitted.' expected." >&2 + echo "[ERROR] Coverity Scan service responded with '${HTTP_RESPONSE}'" \ + "while 'Build successfully submitted.' expected." \ + >&2 exit 1 fi + + echo "[INFO] Build successfully submitted to Coverity Scan server." >&2 fi #----------------------------------------------------------------------------- - exit 0 |