author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Wed, 27 Jun 2018 21:21:19 +0100 | |
changeset 248 | a13b0f9ba9e9 |
parent 246 | 687c4889e2e6 |
permissions | -rwxr-xr-x |
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
1 |
#!/usr/bin/ruby |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
2 |
DOCUMENTATION = <<DOCEND |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
3 |
A help script to build a Smalltalk/X jv-branch (mainly) on a Jenkins CI. |
24
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
4 |
If no TARGET is given, invokes target `jenkins:job`. |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
5 |
|
246
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
6 |
Some influential environment variables: |
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
7 |
|
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
8 |
BUILD_TARGET target to build, can be also specified on a command line using |
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
9 |
--build-target option. |
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
10 |
CC C compiler command (only UNIX builds for now) |
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
11 |
CXX C++ compiler command (only UNIX builds for now) |
687c4889e2e6
Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
238
diff
changeset
|
12 |
|
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
13 |
DOCEND |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
|
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
15 |
require 'optparse' |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
|
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
17 |
def run() |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
18 |
optparse = OptionParser.new do | opts | |
24
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
19 |
opts.banner = "Usage: #{$0} [TARGET1 [TARGET1 [...]]\n" |
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
20 |
opts.on('-p', '--project PROJECT', "PROJECT to build. Overrides project specified by the environment variable.") do | value | |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
21 |
ENV['PROJECT'] = value |
20
0b7a237a445b
Fixed `Jenkinsfile.rb` to correctly propagate --project and --arch to `rake`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
5
diff
changeset
|
22 |
self.class.const_set('PROJECT', value) |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
23 |
end |
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
|
169
f9f519bb10b6
Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
90
diff
changeset
|
25 |
opts.on('-t', '--build-target BUILD_TARGET', "Target to build for in form of GNU target triplet (such as 'x86_64-pc-linux-gnu'). Overrides build target specified by the environment variable.") do | value | |
f9f519bb10b6
Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
90
diff
changeset
|
26 |
ENV['BUILD_TARGET'] = value |
f9f519bb10b6
Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
90
diff
changeset
|
27 |
self.class.const_set('BUILD_TARGET', value) |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
28 |
end |
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
29 |
|
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
30 |
opts.on(nil, '--help', "Prints this message") do |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
31 |
puts DOCUMENTATION |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
32 |
puts optparse.help() |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
33 |
exit 0 |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
34 |
end |
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
35 |
end |
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
36 |
|
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
37 |
optparse.parse! |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
38 |
|
238
8d6be42520be
Rakefiles: cleanup - removed `REPOSITORYSET` variable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
221
diff
changeset
|
39 |
# If run outside a Jenkins build environment (such as from a command line), |
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
40 |
# define some variables to make it look more like a proper Jenkins build |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
41 |
# environment. |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
42 |
ENV['WORKSPACE'] ||= '.' |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
43 |
ENV['BUILD_NUMBER'] ||= Time.now.strftime("%Y%m%d") |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
44 |
ENV['JOB_NAME'] ||= 'interactive' |
24
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
45 |
|
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
46 |
# If no target is given, run target jenkins:job |
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
47 |
if ARGV.size == 0 then |
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
48 |
ARGV << 'jenkins:job' |
ae6fc15070e4
Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
20
diff
changeset
|
49 |
end |
25
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
50 |
|
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
51 |
# Wipe out `reports` directory. This is needed for two reasons: |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
52 |
# |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
53 |
# 1) There's a bug in Cobertura plugin so it does not expand |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
54 |
# variables in .xml file pattern so the pattern cannot include |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
55 |
# BUILD_NUMBER to tell reports for particular build. |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
56 |
# See https://issues.jenkins-ci.org/browse/JENKINS-30647 |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
57 |
# 2) More importantly, when additional axis is used (such as JDK |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
58 |
# or Mercurial version) then value of this axis is not reflected |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
59 |
# in report filename. So again, all files, even those from previous |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
60 |
# builds would be matches which is not what we want. |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
61 |
# |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
62 |
# A workaround is to wipe-out `reports` directory before each buld, |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
63 |
# so once this script finishes, all reports there are for this build. |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
64 |
# The downside is that we have to limit number of executors to 1, |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
65 |
reports_dir = File.join(ENV['WORKSPACE'], 'reports') |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
66 |
if File.exist? reports_dir then |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
67 |
require 'fileutils' |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
68 |
FileUtils.rm_rf reports_dir |
7ef6e0216e9c
Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
24
diff
changeset
|
69 |
end |
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
70 |
|
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
71 |
# When run under Jenkins, we do want to see full backtrace if something |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
72 |
# fails. |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
73 |
ARGV << '--trace' |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
74 |
|
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
75 |
require 'rake' |
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
76 |
Rake.application.run |
0
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
end |
f46260ba26b1
Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
78 |
|
5
0e2993dac13e
Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
0
diff
changeset
|
79 |
run if __FILE__ == $0 |