mirror of
https://github.com/vyos/vyos-build.git
synced 2025-10-01 20:28:40 +02:00
Instead of writing the same code over and over again, place the common parts into a Jenkins Library which is then consumed by every individual build Job. This not only makes it less complex, but also increases maintainability by several magnitudes.
165 lines
6.2 KiB
Groovy
165 lines
6.2 KiB
Groovy
// Copyright (C) 2020 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 <http://www.gnu.org/licenses/>.
|
|
|
|
@NonCPS
|
|
/* Using a version specifier library, use 'current' branch */
|
|
@Library('vyos-build@current')
|
|
|
|
/* Only keep the 10 most recent builds. */
|
|
def projectProperties = [
|
|
[$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '10']],
|
|
]
|
|
|
|
properties(projectProperties)
|
|
setDescription()
|
|
|
|
node('Docker') {
|
|
stage('Define Agent') {
|
|
script {
|
|
// create container name on demand
|
|
def branchName = getGitBranchName()
|
|
// Adjust PR target branch name so we can re-map it to the proper
|
|
// Docker image. CHANGE_ID is set only for pull requests, so it is
|
|
// safe to access the pullRequest global variable
|
|
if (env.CHANGE_ID) {
|
|
branchName = "${env.CHANGE_TARGET}".toLowerCase()
|
|
}
|
|
if (branchName.equals("master")) {
|
|
branchName = "current"
|
|
}
|
|
env.DOCKER_IMAGE = "vyos/vyos-build:" + branchName
|
|
}
|
|
}
|
|
}
|
|
|
|
pipeline {
|
|
agent {
|
|
docker {
|
|
args "--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=1006 -e GOSU_GID=1006"
|
|
image "${env.DOCKER_IMAGE}"
|
|
alwaysPull true
|
|
}
|
|
}
|
|
environment {
|
|
BASE_DIR = "packages/netfilter/"
|
|
CHANGESET_DIR = "**/${env.BASE_DIR}*"
|
|
}
|
|
options {
|
|
disableConcurrentBuilds()
|
|
timeout(time: 60, unit: 'MINUTES')
|
|
timestamps()
|
|
}
|
|
stages {
|
|
stage('Fetch') {
|
|
when {
|
|
beforeOptions true
|
|
beforeAgent true
|
|
anyOf {
|
|
changeset "${env.CHANGESET_DIR}"
|
|
triggeredBy 'TimerTrigger'
|
|
triggeredBy cause: "UserIdCause"
|
|
}
|
|
}
|
|
steps {
|
|
script {
|
|
dir('build') {
|
|
checkout scm
|
|
}
|
|
}
|
|
}
|
|
}
|
|
stage('Git Clone') {
|
|
when {
|
|
changeset "${env.CHANGESET_DIR}"
|
|
}
|
|
steps {
|
|
dir(env.BASE_DIR + 'pkg-libnftnl') {
|
|
checkout([$class: 'GitSCM',
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [[$class: 'CleanCheckout']],
|
|
branches: [[name: 'debian/1.1.7-1' ]],
|
|
userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnftnl.git']]])
|
|
}
|
|
dir(env.BASE_DIR + 'pkg-nftables') {
|
|
checkout([$class: 'GitSCM',
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [[$class: 'CleanCheckout']],
|
|
branches: [[name: 'debian/0.9.6-1' ]],
|
|
userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-nftables.git']]])
|
|
}
|
|
dir(env.BASE_DIR + 'pkg-conntrack-tools') {
|
|
checkout([$class: 'GitSCM',
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [[$class: 'CleanCheckout']],
|
|
branches: [[name: 'debian/1%1.4.6-1' ]],
|
|
userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-conntrack-tools.git']]])
|
|
}
|
|
dir(env.BASE_DIR + 'pkg-libnetfilter-conntrack') {
|
|
checkout([$class: 'GitSCM',
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [[$class: 'CleanCheckout']],
|
|
branches: [[name: 'debian/1.0.8-1' ]],
|
|
userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnetfilter-conntrack.git']]])
|
|
}
|
|
}
|
|
}
|
|
stage('Build') {
|
|
when {
|
|
changeset "${env.CHANGESET_DIR}"
|
|
}
|
|
steps {
|
|
script {
|
|
dir(env.BASE_DIR + 'pkg-libnftnl') {
|
|
sh 'dpkg-buildpackage -uc -us -tc -b'
|
|
}
|
|
dir(env.BASE_DIR + 'pkg-nftables') {
|
|
sh """
|
|
# we need the newly generated library for this build
|
|
sudo dpkg -i ../libnftnl*.deb
|
|
# Debian debhelper-compat level 12 works, too and
|
|
# is available in buster
|
|
sed -i 's/debhelper-compat.*/debhelper-compat (= 12),/' debian/control
|
|
dpkg-buildpackage -uc -us -tc -b
|
|
"""
|
|
}
|
|
dir(env.BASE_DIR + 'pkg-libnetfilter-conntrack') {
|
|
sh 'dpkg-buildpackage -uc -us -tc -b'
|
|
}
|
|
dir(env.BASE_DIR + 'pkg-conntrack-tools') {
|
|
sh """
|
|
# we need the newly generated library for this build
|
|
sudo dpkg -i ../libnetfilter*.deb
|
|
dpkg-buildpackage -uc -us -tc -b
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
post {
|
|
cleanup {
|
|
deleteDir()
|
|
}
|
|
success {
|
|
script {
|
|
// archive *.deb artifact on custom builds, deploy to repo otherwise
|
|
if ( isCustomBuild()) {
|
|
archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|