From 8a6a04fe78dfea724aa807af8911f7210562e59a Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sat, 5 Jun 2021 09:55:27 +0200 Subject: Jenkins: re-add erroneously removed when build conditions Debian packages should only be build if a file in the requested subfolder changes (like a version upgrade) or if explicitly reuested by the user. VyOS ISO generation should only be run once a night by the CI if triggered by the timer, or on explicit user request. --- Jenkinsfile | 7 +-- vars/buildPackage.groovy | 14 +++-- vars/cloneAndBuild.groovy | 134 +++++++++++++++++++++++----------------------- 3 files changed, 78 insertions(+), 77 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b682f41c..dbb0d9cd 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -124,11 +124,8 @@ pipeline { when { beforeOptions true beforeAgent true - // Do not run ISO build when the Docker container definition or the build pipeline - // library changes as this has no direct impact on the ISO image. - not { changeset "**/docker/*" } - not { changeset "**/vars/*" } - not { changeset "**/packages/*" } + // Only run ISO image build process of explicit user request or + // once a night triggered by the timer. anyOf { triggeredBy 'TimerTrigger' triggeredBy cause: "UserIdCause" diff --git a/vars/buildPackage.groovy b/vars/buildPackage.groovy index ca901481..fde5e59a 100644 --- a/vars/buildPackage.groovy +++ b/vars/buildPackage.groovy @@ -37,11 +37,6 @@ def call(description=null, pkgList=null, buildCmd=null, buildArm=false) { agent { label "ec2_amd64" } - environment { - // get relative directory path to Jenkinsfile - BASE_DIR = getJenkinsfilePath() - CHANGESET_DIR = getChangeSetPath() - } steps { script { // create container name on demand @@ -62,6 +57,15 @@ def call(description=null, pkgList=null, buildCmd=null, buildArm=false) { } } stage('Build Code') { + when { + beforeOptions true + beforeAgent true + anyOf { + changeset pattern: getChangeSetPath() + expression { isPullRequest() } + triggeredBy cause: "UserIdCause" + } + } parallel { stage('amd64') { agent { diff --git a/vars/cloneAndBuild.groovy b/vars/cloneAndBuild.groovy index 0fc847f4..adb62525 100644 --- a/vars/cloneAndBuild.groovy +++ b/vars/cloneAndBuild.groovy @@ -1,67 +1,67 @@ -#!/usr/bin/env groovy -// Copyright (C) 2021 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -def call(description, architecture, pkgList, buildCmd) { - // package build must be done in "any" subdir. Without it the Debian build system - // is unable to generate the *.deb files in the sources parent directory, which - // will cause a "Permission denied" error. - dir ("build-${architecture}") { - // cleanup - deleteDir() - - // checkout git repository which hold 'Jenkinsfile' - checkout scm - - // Display Git commit Id used with the Jenkinsfile on the Job "Build History" pane - def commitId = sh(returnStdout: true, script: 'git rev-parse --short=11 HEAD').trim() - currentBuild.description = sprintf('Git SHA1: %s', commitId[-11..-1]) - - if (pkgList) { - // Fetch individual package source code, but only if a URL is defined, this will - // let us reuse this script for packages like vyos-1x which ship a Jenkinfile in - // their repositories root folder. - pkgList.each { pkg -> - if (pkg.scmUrl && pkg.scmCommit) { - dir(env.BASE_DIR + pkg.name) { - checkout([$class: 'GitSCM', - doGenerateSubmoduleConfigurations: false, - extensions: [[$class: 'CleanCheckout']], - branches: [[name: pkg.scmCommit]], - userRemoteConfigs: [[url: pkg.scmUrl]]]) - } - } - } - } - - // compile the source(s) ... - if (pkgList) { - pkgList.each { pkg -> - dir(env.BASE_DIR + pkg.name) { - sh pkg.buildCmd - } - } - } else if (buildCmd) { - sh buildCmd - } else { - sh 'dpkg-buildpackage -uc -us -tc -b' - } - } - if (architecture == 'amd64') { - archiveArtifacts artifacts: "**/*.deb", fingerprint: true - } else { - archiveArtifacts artifacts: "**/*_${architecture}.deb", fingerprint: true - } -} +#!/usr/bin/env groovy +// Copyright (C) 2021 VyOS maintainers and contributors +// +// This program is free software; you can redistribute it and/or modify +// in order to easy exprort images built to "external" world +// it under the terms of the GNU General Public License version 2 or later as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +def call(description, architecture, pkgList, buildCmd) { + // package build must be done in "any" subdir. Without it the Debian build system + // is unable to generate the *.deb files in the sources parent directory, which + // will cause a "Permission denied" error. + dir ("build-${architecture}") { + // cleanup + deleteDir() + + // checkout git repository which hold 'Jenkinsfile' + checkout scm + + // Display Git commit Id used with the Jenkinsfile on the Job "Build History" pane + def commitId = sh(returnStdout: true, script: 'git rev-parse --short=11 HEAD').trim() + currentBuild.description = sprintf('Git SHA1: %s', commitId[-11..-1]) + + if (pkgList) { + // Fetch individual package source code, but only if a URL is defined, this will + // let us reuse this script for packages like vyos-1x which ship a Jenkinfile in + // their repositories root folder. + pkgList.each { pkg -> + if (pkg.scmUrl && pkg.scmCommit) { + dir(getJenkinsfilePath() + pkg.name) { + checkout([$class: 'GitSCM', + doGenerateSubmoduleConfigurations: false, + extensions: [[$class: 'CleanCheckout']], + branches: [[name: pkg.scmCommit]], + userRemoteConfigs: [[url: pkg.scmUrl]]]) + } + } + } + } + + // compile the source(s) ... + if (pkgList) { + pkgList.each { pkg -> + dir(getJenkinsfilePath() + pkg.name) { + sh pkg.buildCmd + } + } + } else if (buildCmd) { + sh buildCmd + } else { + sh 'dpkg-buildpackage -uc -us -tc -b' + } + } + if (architecture == 'amd64') { + archiveArtifacts artifacts: "**/*.deb", fingerprint: true + } else { + archiveArtifacts artifacts: "**/*_${architecture}.deb", fingerprint: true + } +} -- cgit v1.2.3