-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
7 additions
and
146 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
// Copyright (C) 2019 VyOS maintainers and contributors | ||
// Copyright (C) 2020-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 | ||
|
@@ -15,149 +15,10 @@ | |
|
||
@NonCPS | ||
|
||
def getGitBranchName() { | ||
def branch = scm.branches[0].name | ||
return branch.split('/')[-1] | ||
} | ||
|
||
def getGitRepoURL() { | ||
return scm.userRemoteConfigs[0].url | ||
} | ||
|
||
def getGitRepoName() { | ||
return getGitRepoURL().split('/').last() | ||
} | ||
|
||
// Returns true if this is a custom build launched on any project fork. | ||
// Returns false if this is build from [email protected]:vyos/<reponame>. | ||
// <reponame> can be e.g. vyos-1x.git or vyatta-op.git | ||
def isCustomBuild() { | ||
// GitHub organisation base URL | ||
def gitURI = '[email protected]:vyos/' + getGitRepoName() | ||
def httpURI = 'https://github.com/vyos/' + getGitRepoName() | ||
|
||
return ! ((getGitRepoURL() == gitURI) || (getGitRepoURL() == httpURI)) | ||
} | ||
|
||
def setDescription() { | ||
def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) | ||
|
||
// build up the main description text | ||
def description = "" | ||
description += "<h2>VyOS individual package build: " + getGitRepoName().replace('.git', '') + "</h2>" | ||
|
||
if (isCustomBuild()) { | ||
description += "<p style='border: 3px dashed red; width: 50%;'>" | ||
description += "<b>Build not started from official Git repository!</b><br>" | ||
description += "<br>" | ||
description += "Repository: <font face = 'courier'>" + getGitRepoURL() + "</font><br>" | ||
description += "Branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" | ||
description += "</p>" | ||
} else { | ||
description += "Sources taken from Git branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" | ||
} | ||
|
||
item.setDescription(description) | ||
item.save() | ||
} | ||
|
||
/* Only keep the 10 most recent builds. */ | ||
def projectProperties = [ | ||
[$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '10']], | ||
] | ||
|
||
properties(projectProperties) | ||
setDescription() | ||
|
||
pipeline { | ||
agent { | ||
docker { | ||
args '--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=1006 -e GOSU_GID=1006' | ||
image 'vyos/vyos-build:crux' | ||
} | ||
} | ||
options { | ||
disableConcurrentBuilds() | ||
skipDefaultCheckout() | ||
timeout(time: 30, unit: 'MINUTES') | ||
timestamps() | ||
} | ||
stages { | ||
stage('Fetch') { | ||
steps { | ||
script { | ||
dir('build') { | ||
git branch: getGitBranchName(), url: getGitRepoURL() | ||
} | ||
} | ||
} | ||
} | ||
stage('Build') { | ||
steps { | ||
script { | ||
dir('build') { | ||
sh "dpkg-buildpackage -b -us -uc -tc" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
post { | ||
cleanup { | ||
deleteDir() | ||
} | ||
success { | ||
script { | ||
// archive *.deb artifact on custom builds, deploy to repo otherwise | ||
if ( isCustomBuild()) { | ||
archiveArtifacts artifacts: '*.deb', fingerprint: true | ||
} else { | ||
// publish build result, using SSH-dev.packages.vyos.net Jenkins Credentials | ||
sshagent(['SSH-dev.packages.vyos.net']) { | ||
// build up some fancy groovy variables so we do not need to write/copy | ||
// every option over and over again! | ||
|
||
def VYOS_REPO_PATH = '/home/sentrium/web/dev.packages.vyos.net/public_html/repositories/' + getGitBranchName() + '/' | ||
if (getGitBranchName() != "equuleus") | ||
VYOS_REPO_PATH += 'vyos/' | ||
|
||
def SSH_OPTS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR' | ||
def SSH_REMOTE = '[email protected]' | ||
|
||
echo "Uploading package(s) and updating package(s) in the repository ..." | ||
|
||
files = findFiles(glob: '*.deb') | ||
files.each { PACKAGE -> | ||
def RELEASE = getGitBranchName() | ||
def ARCH = sh(returnStdout: true, script: "dpkg-deb -f ${PACKAGE} Architecture").trim() | ||
def SUBSTRING = sh(returnStdout: true, script: "dpkg-deb -f ${PACKAGE} Package").trim() | ||
def SSH_DIR = '~/VyOS/' + RELEASE + '/' + ARCH | ||
def ARCH_OPT = '' | ||
if (ARCH != 'all') | ||
ARCH_OPT = '-A ' + ARCH | ||
|
||
// No need to explicitly check the return code. The pipeline | ||
// will fail if sh returns a non 0 exit code | ||
sh """ | ||
ssh ${SSH_OPTS} ${SSH_REMOTE} -t "bash --login -c 'mkdir -p ${SSH_DIR}'" | ||
""" | ||
sh """ | ||
scp ${SSH_OPTS} ${PACKAGE} ${SSH_REMOTE}:${SSH_DIR}/ | ||
""" | ||
sh """ | ||
ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} remove ${RELEASE} ${SUBSTRING}'" | ||
""" | ||
sh """ | ||
ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} deleteunreferenced'" | ||
""" | ||
sh """ | ||
ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} includedeb ${RELEASE} ${SSH_DIR}/${PACKAGE}'" | ||
""" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
// Using a version specifier library, use 'current' branch. The underscore (_) | ||
// is not a typo! You need this underscore if the line immediately after the | ||
// @Library annotation is not an import statement! | ||
@Library('vyos-build@crux')_ | ||
|
||
// Start package build using library function from https://github.com/vyos/vyos-build | ||
buildPackage() |