Core interfaces
This page documents the interface between the Jenkins front end and the Fuego core engine. See also Variables
From Jenkins to Fuego
Environment variables passed during a build
Built-in Jenkins variables for shell script jobs
BUILD_ID
The current test run id. As of (at least) Jenkins version 2.32.1, this is the same as the BUILD_NUMBER.
BUILD_NUMBER
The current test run number, such as “153”. This appears to be selected as the next numerical number in sequence,by the Jenkins system, at the start of a job.
BUILD_TAG
String of “jenkins-${JOB_NAME}-${BUILD_NUMBER}”. Convenient to put into a resource file, a jar file, etc for easier identification.
BUILD_URL
Full URL of this test run, like http://server:port/jenkins/job/foo/15/
EXECUTOR_NUMBER
The unique number that identifies the current executor (among executors of the same machine) that’s carrying out this test run. This is the number you see in the “test executor status”, except that the number starts from 0, not 1.
JENKINS_HOME
The absolute path of the directory assigned on the master node for Jenkins to store data.
JENKINS_URL
Full URL of Jenkins, like http://server:port/jenkins/
JOB_NAME
Name of Jenkins job for this test. In Fuego, this will be something like: “myboard.default.Functional.foo” or “myboard.default.Benchmark.bar”. The job name has the form: {board}.{spec}.{type}.{test_name}
JOB_URL
Full URL of this test or test suite, like http://server:port/jenkins/job/myboard.default.Functional.foo/
NODE_LABELS
Whitespace-separated list of labels that are assigned to the node.
NODE_NAME
Name of the slave if the test run is on a slave, or “master” if run on master. In the case of Fuego, this is the board name (e.g. ‘beagleboneblack’)
WORKSPACE
The absolute path of the directory assigned to the test run as a workspace. For Fuego, this is always
/fuego-rw/buildzone
. Note that this comes from “custom workspace” setting in the job definition.
Fuego variables passed from Jenkins system configuration
The following variables are defined at the system level, and are passed by Jenkins in the environment of every job that is executed:
FUEGO_RO
The location where Fuego read-only data (configuration, boards and toolchains) are located. Currently
/fuego-ro
in the docker container.FUEGO_RW
The location where Fuego read-write data is located (directories for builds, logs (run data), and other workspace and scratchpad areas). Currently
/fuego-rw
.FUEGO_CORE
The location where the Fuego script system and tests are located. Currently
/fuego-core
.
Fuego variables passed from Jenkins job definition
These variables are defined in the job definition for a test:
Device
This is the target board to run the test on.
Reboot
Indicates to reboot the target device before running the test
Rebuild
Indicates that build instances of the test suite should be deleted, and the test suite rebuilt from the tarball
Target_PreCleanup
Indicates to clean up test materials left from a previous run of the test, before the test begins.
Target_PostCleanup
Indicates to clean up test materials after the test ends.
TESTPLAN
This has the name of the testplan used for this test job. Note that this selected by the end user from the output of getTestplans.groovy. (example value: testplan_default)
TESTNAME
Has the base name of the test (e.g. LTP vs Functional.LTP)
TESTSPEC
This has the name of the spec used for this test job
FUEGO_DEBUG
Can have a 1 to indicate verbose shell script output
From Fuego to Fuego
DISTRIB
Indicates the distribution file for the board. This comes from the board file. It’s primary purpose is to select the logging features of the distribution on the target (to indicate whether there’s a logger present on target). The value is often ‘distribs/nologread.dist’
OF_BOARD_FILE
Full path to the board file
OF_CLASSDIR
full path to the overlay class directory (usually /home/jenkins/overlays//base)
OF_CLASSDIR_ARGS
argument specifying the overlay class directory (usually ‘–classdir /home/jenkins/overlays//base’)
OF_DEFAULT_SPECDIR
path to directory containing test specs (usually /home/jenkins/overlays//test_specs)
OF_DISTRIB_FILE
path to the distribution file for the target board (often /home/jenkins/overlays//distribs/nologger.dist
OF_OVFILES
FIXTHIS - document what OF_OVFILES is for
OF_OVFILES_ARGS
FIXTHIS - document what OF_OVFILES_ARGS is for
OF_ROOT
root directory for overlay generator (usually /home/jenkins/overlays/)
OF_SPECDIR_ARGS
argument to specify the test spec directory (usually ‘–specdir /home/jenkins/overlays//test_specs/’)
OF_TESTPLAN_ARGS
OF_TESTPLAN
full path to the JSON test plan file for this test (often /home/jenkins/overlays//testplans/testplan_default.json)
OF_TESTPLAN_ARGS
argument specifying the path to the testplan (often ‘–testplan /home/jenkins/overlays//testplans/testplan_default.json’)
TEST_HOME
home directory for the test materials for this test (example: /home/jenkins/tests/Functional.bc)
TESTDIR
base directory name of the test (example: Functional.bc)
TRIPLET
FIXTHIS - document TRIPLET
Deprecated
The following variables are no longer used in Fuego:
FUEGO_ENGINE_PATH
(deprecated in Fuego 1.1 - use ‘$FUEGO_CORE/engine’ now)
FUEGO_PARSER_PATH
(deprecated in Fuego 1.1)
Example Values
Here are the values from a run using the Jenkins front-end with job bbb.default.Functional.hello_world:
(these are sorted alphabetically):
AR=arm-linux-gnueabihf-ar
ARCH=arm
AS=arm-linux-gnueabihf-as
BUILD_DISPLAY_NAME=#2
BUILD_ID=2
BUILD_NUMBER=2
BUILD_TAG=jenkins-bbb.default.Functional.hello_world-2
BUILD_TIMESTAMP=2017-04-10_21-55-26
CC=arm-linux-gnueabihf-gcc
CONFIGURE_FLAGS=--target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --build=x86_64-unknown-linux-gnu
CPP=arm-linux-gnueabihf-gcc -E
CROSS_COMPILE=arm-linux-gnueabihf-
CXX=arm-linux-gnueabihf-g++
CXXCPP=arm-linux-gnueabihf-g++ -E
EXECUTOR_NUMBER=0
FUEGO_CORE=/fuego-core
FUEGO_RO=/fuego-ro
FUEGO_RW=/fuego-rw
FUEGO_START_TIME=1491861326786
HOME=/var/lib/jenkins
HOST=arm-linux-gnueabihf
HUDSON_COOKIE=1b9620a3-d550-4cb1-afb1-9c5a29650c14
HUDSON_HOME=/var/lib/jenkins
HUDSON_SERVER_COOKIE=2334aa4d37eae7a4
JENKINS_HOME=/var/lib/jenkins
JENKINS_SERVER_COOKIE=2334aa4d37eae7a4
JOB_BASE_NAME=bbb.default.Functional.hello_world
JOB_DISPLAY_URL=http://unconfigured-jenkins-location/job/bbb.default.Functional.hello_world/display/redirect
JOB_NAME=bbb.default.Functional.hello_world
LD=arm-linux-gnueabihf-ld
LDFLAGS=--sysroot / -lm
LOGDIR=/fuego-rw/logs/Functional.hello_world/bbb.default.2.2
LOGNAME=jenkins
MAIL=/var/mail/jenkins
NODE_LABELS=bbb
NODE_NAME=bbb
PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PREFIX=arm-linux-gnueabihf
PWD=/fuego-rw/buildzone
RANLIB=arm-linux-gnueabihf-ranlib
Reboot=false
Rebuild=true
RUN_CHANGES_DISPLAY_URL=http://unconfigured-jenkins-location/job/bbb.default.Functional.hello_world/2/display/redirect?page=changes
RUN_DISPLAY_URL=http://unconfigured-jenkins-location/job/bbb.default.Functional.hello_world/2/display/redirect
SDKROOT=/
SHELL=/bin/bash
SHLVL=3
Target_PostCleanup=true
Target_PreCleanup=true
TERM=xterm
TESTDIR=Functional.hello_world
TESTNAME=hello_world
TESTSPEC=default
USER=jenkins
WORKSPACE=/fuego-rw/buildzone
From Fuego to Jenkins
This sections describes some of the operations that Fuego core scripts (or a test) can perform to invoke an action by Jenkins during a test. To perform a Jenkins action, Fuego uses Jenkins’ REST API using the wget command.
To abort a job, fuego does:
wget -qO- ${BUILD_URL}/stop
This is called by common.sh:
abort_job()
To check if another test instance is running (do a lock check), fuego does:
wget -qO- “$(cat ${LOCKFILE})/api/xml?xpath=*/building/text%28%29”
LOCKFILE was previously set to hold the contents: ${BUILD_URL}, so this resolves to:
wget -qO- ${BUILD_URL}/api/xml?xpath=*/building/text()
This is called by functions.sh:
concurrent_check()
Jenkins python module
Fuego’s ftc
command uses the ‘jenkins’ python module to perform a
number of operations with Jenkins. This module is used to:
list nodes
add nodes
remove nodes
list jobs
build jobs
remove jobs
re-synch build data for a job (using get_job_config() and reconfig_job())
add view
Note
Fuego uses jenkins-cli to add jobs (described next).
Jenkins-cli interface
You can run Jenkins commands from the command line, using the
pre-installed jenkins-cli interface. This is used by Fuego’s
ftc
command to create jobs.
jenkins-cli.jar is located in the Docker container at:
/var/cache/jenkins/war/WEB-INF/jenkins-cli.jar
See https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI for information about using this plugin.
Here is a list of available commands for this plugin:
build
Runs a test, and optionally waits until its completion.
cancel-quiet-down
Cancel the effect of the "quiet-down" command.
clear-queue
Clears the test run queue
connect-node
Reconnect to a node
console
Retrieves console output of a build
copy-job
Copies a test.
create-job
Creates a new test by reading stdin as a configuration XML file.
delete-builds
Deletes test record(s).
delete-job
Deletes a test
delete-node
Deletes a node
disable-job
Disables a test
disconnect-node
Disconnects from a node
enable-job
Enables a test
get-job
Dumps the test definition XML to stdout
groovy
Executes the specified Groovy script.
groovysh
Runs an interactive groovy shell.
help
Lists all the available commands.
install-plugin
Installs a plugin either from a file, an URL, or from update center.
install-tool
Performs automatic tool installation, and print its location to
stdout. Can be only called from inside a test run.
keep-build
Mark the test run to keep the test run forever.
list-changes
Dumps the changelog for the specified test(s).
list-jobs
Lists all tests in a specific view or item group.
list-plugins
Outputs a list of installed plugins.
login
Saves the current credential to allow future commands to run
without explicit credential information.
logout
Deletes the credential stored with the login command.
mail
Reads stdin and sends that out as an e-mail.
offline-node
Stop using a node for performing test runs temporarily, until the
next "online-node" command.
online-node
Resume using a node for performing test runs, to cancel out the
earlier "offline-node" command.
quiet-down
Quiet down Jenkins, in preparation for a restart. Don't start
any test runs.
reload-configuration
Discard all the loaded data in memory and reload everything from
file system. Useful when you modified config files directly on disk.
restart
Restart Jenkins
safe-restart
Safely restart Jenkins
safe-shutdown
Puts Jenkins into the quiet mode, wait for existing test runs to
be completed, and then shut down Jenkins.
session-id
Outputs the session ID, which changes every time Jenkins restarts
set-build-description
Sets the description of a test run.
set-build-display-name
Sets the displayName of a test run
set-build-result
Sets the result of the current test run. Works only if invoked
from within a test run.
shutdown
Immediately shuts down Jenkins server
update-job
Updates the test definition XML from stdin.
The opposite of the get-job command
version
Outputs the current version.
wait-node-offline
Wait for a node to become offline
wait-node-online
Wait for a node to become online
who-am-i
Reports your credential and permissions
Scripts to process Fuego data
Benchmark parsing
In Fuego, Benchmark log parsing is done by a python system consisting
of parser.py
(from each test), dataload.py
and utility functions in
fuego-core/engine/scripts/parser
See Benchmark parser notes, parser.py, reference.log and Parser module API.
Postbuild action
In Fuego, Jenkins jobs are configured to perfrom a postbuild action, to set the description of a test with links to the test log (and possibly plot and other files generated in post-processing)