blob: 2abfa28207ac31c00e9002806e67bcf880c743d5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#!/usr/bin/env groovy
// Copyright (C) 2019 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
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 git@github.com:vyos/<reponame>.
// <reponame> can be e.g. vyos-1x.git or vyatta-op.git
def isCustomBuild() {
// GitHub organisation base URL
def gitURI = 'git@github.com: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>Build VyOS ISO image</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: '1']],
]
properties(projectProperties)
setDescription()
pipeline {
options {
disableConcurrentBuilds()
timeout(time: 90, unit: 'MINUTES')
parallelsAlwaysFailFast()
}
triggers {
cron('H 2 * * *')
}
agent {
dockerfile {
filename 'Dockerfile'
dir 'docker'
args '--privileged --sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=1006 -e GOSU_GID=1006'
}
}
stages {
stage('Configure') {
steps {
script {
def commitId = sh(returnStdout: true, script: 'git rev-parse --short=11 HEAD').trim()
currentBuild.description = sprintf('Git SHA1: %s', commitId[-11..-1])
sh './configure --build-by autobuild@vyos.net --debian-mirror http://ftp.us.debian.org/debian/'
}
}
}
stage('Build') {
steps {
sh 'sudo make iso'
}
}
}
post {
cleanup {
echo 'One way or another, I have finished'
// the 'build' directory got elevated permissions during the build
// cdjust permissions so it can be cleaned up by the regular user
sh '''
#!/bin/bash
if [ -d build ]; then
sudo chmod -R 777 build/
fi
'''
deleteDir() /* cleanup our workspace */
}
}
}
|