CI for [% gerrit_project %] '[% branch %]' branch on [% gerrit_host %] [automatically generated from [% job_template %]]
[% enabled ? "false" : "true" %]
[% log_days_to_keep %]
[% log_num_to_keep %]
[% log_days_to_keep %]
[% log_num_to_keep %]
qt_ci_git_url
Git URL for code under test
ssh://[% gerrit_host %]/[% gerrit_project %]
qt_ci_git_ref
Git ref for code under test
refs/heads/[% branch %]
qt_ci_request_id
Qt Project CI system build request ID; leave blank for manual trigger
[%- IF trigger_cron %]
[% trigger_cron %]
[%- END %]
ci/[% gerrit_project %]
[% branch %]
cfg
[%- FOREACH cfg IN configurations %]
[% cfg %]
[%- END %]
[%- IF on_demand == 1 %]
xterm
[%- END %]
[%- IF on_demand == 1 %]
^o-win.*$
[%- ELSE %]
^.*\bwindows\b.*$
[%- END %]
^.*\bmaster\b.*$
[%- IF on_demand == 1 %]
mkdir c:\work\build
cd c:\work\build
[%- ELSE %]
rd /S /Q %WORKSPACE%\_artifacts
rd /S /Q %CI_NODE_ROOT%\build & IF EXIST %CI_NODE_ROOT%\build TIMEOUT /T 5 & rd /S /Q %CI_NODE_ROOT%\build
mkdir %CI_NODE_ROOT%\build
cd %CI_NODE_ROOT%\build
[%- END %]
call git init
if errorlevel 1 exit /b 1
[%- IF gerrit_host != "codereview.qt-project.org" %]
call git fetch --verbose [% gerrit_host %]:[% gerrit_project %] +refs/heads/[% branch %]:refs/remotes/mirror/[% branch %]
[%- ELSE %]
call git fetch --verbose qt-gerrit-mirror:[% gerrit_project %] +refs/heads/[% branch %]:refs/remotes/mirror/[% branch %]
[%- END %]
exit /b 0
[%- IF on_demand == 1 %]
^o-win.*$
[%- ELSE %]
^.*\bwindows\b.*$
[%- END %]
^.*\bmaster\b.*$
set +e
/opt/version.sh || echo "Unable to execute version.sh"
[%- IF on_demand == 1 %]
rm -rf /work/ci
rm -rf /work/build
mkdir -p /work/build
cd /work/build
[%- ELSE %]
rm -rf $WORKSPACE/_artifacts
rm -rf $CI_NODE_ROOT/build
mkdir -p $CI_NODE_ROOT/build
cd $CI_NODE_ROOT/build
[%- END %]
git init
[%- IF gerrit_host != "codereview.qt-project.org" %]
git fetch --verbose [% gerrit_host %]:[% gerrit_project %] +refs/heads/[% branch %]:refs/remotes/mirror/[% branch %]
[%- ELSE %]
git fetch --verbose qt-gerrit-mirror:[% gerrit_project %] +refs/heads/[% branch %]:refs/remotes/mirror/[% branch %]
[% END %]
[%- IF on_demand == 1 %]
^.*\bmaster\b.*$
PARENT=${JOB_NAME}
BRANCH=[% template_ini_prefix %]
create_nodes_and_vms
ALWAYS
false
false
[%- END %]
[%- IF on_demand == 1 %]
^o-win.*$
[%- ELSE %]
^.*\bwindows\b.*$
[%- END %]
[%- IF on_demand == 1 %]
setlocal enabledelayedexpansion
echo %cfg%|findstr /i winrt >nul:
if %errorlevel%==0 (
set "TARGET_ARCHITECTURE=x86"
) else (
set "TARGET_ARCHITECTURE=%PROCESSOR_ARCHITECTURE%"
)
echo %cfg%|findstr /i wince70embedded >nul:
if %errorlevel%==0 (
REM LIB/INCLUDE contains desktop openssl paths as set in jenkins ini,
REM reset them before calling vsvars32.bat if we are building for WEC7
set LIB=
set INCLUDE=
)
echo %cfg%|findstr /i msvc2008 >nul:
if %errorlevel%==0 (
call "%VS90COMNTOOLS%\vsvars32.bat"
)
echo %cfg%|findstr /i msvc2010 >nul:
if %errorlevel%==0 (
call "%VS100COMNTOOLS%\vsvars32.bat"
)
echo %cfg%|findstr /i msvc2012 >nul:
if %errorlevel%==0 (
call "%MSVC2012_DIR%\vcvarsall.bat" %TARGET_ARCHITECTURE%
)
)
cd c:\work\build
set GIT_BRANCH=%qt_ci_git_ref%
set
call git remote add origin -t %qt_ci_git_ref% %qt_ci_git_url%
if errorlevel 1 exit /b 1
call git pull origin %qt_ci_git_ref%
if errorlevel 1 exit /b 1
call git init _testconfig
if errorlevel 1 exit /b 1
cd _testconfig
call git fetch qt-gerrit-mirror:qtqa/testconfig +refs/heads/*:refs/remotes/mirror/*
call git fetch git://github.com/tsarajar/qtqa-testconfig.git +refs/heads/*:refs/remotes/origin/*
if errorlevel 1 exit /b 1
call git reset --hard origin/master
if errorlevel 1 exit /b 1
cd ..
perl _testconfig/test.pl --project "[% testconfig_project %]"
[%- IF publish_build == "log_publisher" %]
set PUBLISHER_PARAMS="token=PUBLISHER&BUILD_LOG_URL=%BUILD_URL%&REMOTE_BUILD_NUMBER=%BUILD_NUMBER%&REMOTE_BUILD_NAME=%JOB_NAME%
set PUBLISHER_JENKINS="[% remote_jenkins %]"
set PUBLISHER_JOB="[% remote_jenkins_job %]"
perl _qtqa_latest\scripts\jenkins\jenkins_job_trigger.pl -fireandforget
[%- END %]
endlocal
[%- ELSE %]
setlocal enabledelayedexpansion
echo %cfg%|findstr /i mingw491 >nul:
if %errorlevel%==0 (
set "PATH=%PATH_MINGW491%;%PATH%"
set "PATH=!PATH!;%ICUMINGW491%\bin"
set "LIBRARY=!LIBRARY!;%ICUMINGW491%\lib"
set "INCLUDE=!INCLUDE!;%ICUMINGW491%\include"
)
echo %cfg%|findstr /i mingw48 >nul:
if %errorlevel%==0 (
set "PATH=%PATH_MINGW48%;!PATH!"
set "PATH=!PATH!;%ICUMINGW48%\bin"
set "LIBRARY=!LIBRARY!;%ICUMINGW48%\lib"
set "INCLUDE=!INCLUDE!;%ICUMINGW48%\include"
)
echo %cfg%|findstr /i winrt >nul||echo %cfg%|findstr /i winphone >nul:
if %errorlevel%==0 (
set "TARGET_ARCHITECTURE=x86"
) else (
set "TARGET_ARCHITECTURE=%PROCESSOR_ARCHITECTURE%"
)
echo %cfg%|findstr /i wince70embedded >nul:
if %errorlevel%==0 (
REM LIB/INCLUDE contains desktop openssl/icu paths as set in jenkins ini,
REM reset them before calling vsvars32.bat if we are building for WEC7
set LIB=
set INCLUDE=
)
echo %cfg%|findstr /i msvc2008 >nul:
if %errorlevel%==0 (
call "%VS90COMNTOOLS%\vsvars32.bat"
)
echo %cfg%|findstr /i msvc2010 >nul:
if %errorlevel%==0 (
call "%VS100COMNTOOLS%\vsvars32.bat"
)
echo %cfg%|findstr /i msvc2012 >nul:
if %errorlevel%==0 (
call "%MSVC2012_DIR%\vcvarsall.bat" %TARGET_ARCHITECTURE%
set "PATH=!PATH!;%ICU2012%\bin;%ICU2012%\lib"
set "LIB=!LIB!;%ICU2012%\lib"
set "INCLUDE=!INCLUDE!;%ICU2012%\include"
)
echo %cfg%|findstr /i msvc2013 >nul:
if %errorlevel%==0 (
call "%MSVC2013_DIR%\vcvarsall.bat" %TARGET_ARCHITECTURE%
set "PATH=!PATH!;%ICU2013%\bin;%ICU2013%\lib"
set "LIB=!LIB!;%ICU2013%\lib"
set "INCLUDE=!INCLUDE!;%ICU2013%\include"
)
cd %CI_NODE_ROOT%\build
set GIT_BRANCH=%qt_ci_git_ref%
set
call git remote add origin -t %qt_ci_git_ref% %qt_ci_git_url%
if errorlevel 1 exit /b 1
call git pull origin %qt_ci_git_ref%
if errorlevel 1 exit /b 1
call git init _testconfig
if errorlevel 1 exit /b 1
cd _testconfig
call git fetch qt-gerrit-mirror:qtqa/testconfig +refs/heads/*:refs/remotes/mirror/*
call git fetch ssh://codereview.qt-project.org/qtqa/testconfig.git +refs/heads/*:refs/remotes/origin/*
if errorlevel 1 exit /b 1
call git reset --hard origin/master
if errorlevel 1 exit /b 1
cd ..
perl _testconfig/test.pl --project "[% testconfig_project %]"
[%- IF publish_build == "log_publisher" %]
set PUBLISHER_PARAMS="token=PUBLISHER&BUILD_LOG_URL=%BUILD_URL%&REMOTE_BUILD_NUMBER=%BUILD_NUMBER%&REMOTE_BUILD_NAME=%JOB_NAME%
set PUBLISHER_JENKINS="[% remote_jenkins %]"
set PUBLISHER_JOB="[% remote_jenkins_job %]"
perl _qtqa_latest\scripts\jenkins\jenkins_job_trigger.pl -fireandforget
[%- END %]
endlocal
[%- END %]
[%- IF on_demand == 1 %]
^o-win.*$
[%- ELSE %]
^.*\bwindows\b.*$
[%- END %]
[%- IF on_demand == 1 %]
cd /work/build
[%- ELSE %]
cd $CI_NODE_ROOT/build
[%- END %]
GIT_BRANCH=${qt_ci_git_ref}
export GIT_BRANCH
set
git remote add origin -t ${qt_ci_git_ref} ${qt_ci_git_url}
git pull origin ${qt_ci_git_ref}
git init _testconfig
cd _testconfig
git fetch qt-gerrit-mirror:qtqa/testconfig +refs/heads/*:refs/remotes/mirror/* || true
git fetch ssh://codereview.qt-project.org/qtqa/testconfig +refs/heads/*:refs/remotes/origin/*
git reset --hard origin/master
cd ..
[%- IF publish_build == "log_publisher" %]
PUBLISHER_PARAMS="token=PUBLISHER&BUILD_LOG_URL=$BUILD_URL&REMOTE_BUILD_NUMBER=$BUILD_NUMBER&REMOTE_BUILD_NAME=$JOB_NAME"
export PUBLISHER_PARAMS
export PUBLISHER_JENKINS="[% remote_jenkins %]"
export PUBLISHER_JOB="[% remote_jenkins_job %]"
trap 'perl _qtqa_latest/scripts/jenkins/jenkins_job_trigger.pl -fireandforget' INT TERM EXIT
[%- END %]
perl _testconfig/test.pl --project "[% testconfig_project %]"
[%- IF publish_xunit == 1 %]
**/_artifacts/test-logs/*.xml
false
true
false
[%- END %]
[%- IF publish_build == 1 %]
true
true
[%- END %]
[%- IF send_status_mail == 1 %]
$DEFAULT_RECIPIENTS
$PROJECT_DEFAULT_SUBJECT
$PROJECT_DEFAULT_CONTENT
false
false
$PROJECT_DEFAULT_REPLYTO
project
default
$DEFAULT_SUBJECT
$DEFAULT_CONTENT
$DEFAULT_PRESEND_SCRIPT
false
false
no-reply@qt-project.org
false
ONLY_PARENT
[%- END %]
**/*.xml
false
true
[%- IF publish_build == "postbuild_publisher" %]
rm -f ./state_postbuild.py
cp $JENKINS_HOME/state_postbuild.py .
python ./state_postbuild.py -u $JOB_URL -n $BUILD_NUMBER
false
false
MATRIX
[%- END %]
[%- IF on_demand == 0 %]
import hudson.slaves.OfflineCause.SimpleOfflineCause
import hudson.util.RemotingDiagnostics
import java.io.PrintWriter
import java.io.StringWriter
// returns full stack trace of a throwable 't' as a string
def getStackTrace(t) {
def sw = new StringWriter()
def pw = new PrintWriter(sw, true)
t.printStackTrace(pw)
pw.flush()
sw.flush()
return sw.toString()
}
// FIXME: why cannot we import jenkins.util.NonLocalizable ?
class OfflineMessage extends org.jvnet.localizer.Localizable {
def message
OfflineMessage() {
super(null, null, [])
def timestr = new Date().format("HH:mm dd/MM/yy z", TimeZone.getTimeZone("UTC"))
this.message = "automated reboot at end of test at " + timestr
}
String toString() {
this.message
}
String toString(java.util.Locale l) {
toString()
}
}
def computer = manager.build.getBuiltOn().toComputer()
def channel = computer.getChannel()
def cause = SimpleOfflineCause.create(new OfflineMessage())
def rebooted = 0
for (i in 1..5) {
try {
RemotingDiagnostics.executeGroovy( """
if (Functions.isWindows()) {
'shutdown /r /t 10 /c "Restarting after Jenkins test completed"'.execute()
} else {
"sudo -n /sbin/reboot".execute()
}
""", channel )
rebooted = i
break
} catch (Exception e) {
manager.addWarningBadge("could not reboot [attempt " + i + "]: " + getStackTrace(e))
// disconnecting the computer, waiting for it to reconnect and reinitializing the
// channel helps to recover from "Could not initialize class org.codehause.groovy.runtime.InvokerHelper",
// which occurs on slaves sometimes (with Jenkins 1.466) for unknown reasons.
computer.disconnect(cause).get()
sleep(30000)
channel = computer.getChannel()
def attempts = 0
while (channel == null && ++attempts < 5) {
sleep(30000)
channel = computer.getChannel()
}
}
}
if (rebooted == 0) {
manager.addShortText("reboot failed")
} else if (rebooted > 1) {
manager.addShortText("rebooted after " + rebooted + " attempts")
} else {
manager.addInfoBadge("rebooted after build")
}
if (rebooted) {
// make sure jobs cannot be scheduled until after the node reboots
computer.setTemporarilyOffline(true, cause)
computer.disconnect(cause).get()
}
s = new Socket("localhost", 7182)
s << '{"type":"build-updated","job":"[% name %]","build":' << manager.build.number << '}'
s.close()
0
[%- END %]
[%- IF on_demand == 1 %]
import hudson.slaves.OfflineCause.SimpleOfflineCause
import hudson.util.RemotingDiagnostics
import java.io.PrintWriter
import java.io.StringWriter
// returns full stack trace of a throwable 't' as a string
def getStackTrace(t) {
def sw = new StringWriter()
def pw = new PrintWriter(sw, true)
t.printStackTrace(pw)
pw.flush()
sw.flush()
return sw.toString()
}
// FIXME: why cannot we import jenkins.util.NonLocalizable ?
class OfflineMessage extends org.jvnet.localizer.Localizable {
def message
OfflineMessage() {
super(null, null, [])
def timestr = new Date().format("HH:mm dd/MM/yy z", TimeZone.getTimeZone("UTC"))
this.message = "Node brought offline after build at " + timestr
}
String toString() {
this.message
}
String toString(java.util.Locale l) {
toString()
}
}
def computer = manager.build.getBuiltOn().toComputer()
def channel = computer.getChannel()
def cause = SimpleOfflineCause.create(new OfflineMessage())
// make sure jobs cannot be scheduled until after the node reboots
computer.setTemporarilyOffline(true, cause)
0
perl /var/lib/jenkins/vm-cloner/vm-cloner-delete-nodes-and-vms.pl -ini /var/lib/jenkins/vm-cloner/[% template_ini_prefix %]_templates.ini -job $JOB_NAME -build_number $BUILD_NUMBER
set
false
false
MATRIX
[%- END %]
5
false
false
true
false
false
true