blob: 6acadb992bfad8a018345d53f0bace6c140617a5 [file] [log] [blame]
/*
*
* Launcher for TCP-QA tests
*
* Expected parameters:
* ENV_NAME Environment name
* REPOSITORY_SUITE Packagfe repository (stable, testing, nightly)
* TEST_GROUP TCQ-QA test group or a test name
* LAB_CONFIG_NAME Environment confguration for deploy
* ADDITIONAL_PARAMETERS Additional shell environment variables
* TCP_QA_COMMIT TCQ-QA commit or branch
* TCP_QA_REFS TCP-QA refs for cherry-pick
* TCP_QA_GERRIT_HOST TCQ-QA repo Gerrit host
* SHUTDOWN_ENV_ON_TEARDOWN Destroy virtual environment after test run
* KEEP_BEFORE Keep virtual environment before run tests or erase it
* KEEP_AFTER Keep virtual environment after run tests or erase it
* VENV_PATH Path to python virtual environment
* SLAVE_LABELS Jenkins slave node labels
* TEST_TIMEOUT Timeout for test job in minutes
* UPLOAD_RESULTS Upload or not test results to Testrail
* TESTRAIL_MILESTONE Testrail milestone
* TESTRAIL_TEST_SUITE Testrail test suite
*
*/
git = new com.mirantis.mcp.Git()
qaCommon = new com.mirantis.tcp_qa.Common()
testRunner = new com.mirantis.tcp_qa.RunTest()
environment = new com.mirantis.tcp_qa.EnvActions()
def runTests() {
def additionalParameters = []
if (!env.ENV_NAME) {
error("Error! Test path (ENV_NAME) is not specified!")
}
if (!env.REPOSITORY_SUITE) {
error("Error! Test path (REPOSITORY_SUITE) is not specified!")
}
if (!env.TEST_GROUP){
error("Error! Test path (TEST_GROUP) is not specified!")
}
if (!env.LAB_CONFIG_NAME){
error("Error! Test path (LAB_CONFIG_NAME) is not specified!")
}
if (params.ADDITIONAL_PARAMETERS) {
for (p in params.ADDITIONAL_PARAMETERS.split('\n')) {
additionalParameters << p
}
echo("Additional parameters are: ${additionalParameters.join(' ')}")
}
withEnv(additionalParameters) {
stage('Clone tcp-qa') {
git.gitCheckout ([
protocol: 'https',
port: '443',
branch : env.TCP_QA_COMMIT,
host : 'github.com',
project : 'Mirantis/tcp-qa',
targetDir : '.'
])
if ( env.TCP_QA_REFS && ! env.TCP_QA_REFS.equals('none') ) {
def refs = "${env.TCP_QA_REFS}".split("\n")
qaCommon.getCustomRefs(env.TCP_QA_GERRIT_HOST, 'Mirantis/tcp-qa', env.WORKSPACE, refs)
}
}
stage('Update python venv') {
environment.prepareEnv()
}
stage('Run tests') {
if (!((env.KEEP_BEFORE == "yes") || (env.KEEP_BEFORE == "true"))){
environment.eraseEnv()
}
sh """
. ${VENV_PATH}/bin/activate
cd tcp_tests
if ! py.test -vvv -s -p no:django -p no:ipdb --junit-xml=../nosetests.xml -k ${TEST_GROUP}; then
echo "Tests failed!"
exit 1
fi
"""
// testRunner.runTest("-k ${env.TEST_GROUP}", jobSetParameters)
}
if (!((env.KEEP_AFTER == "yes") || (env.KEEP_AFTER == "true"))){
environment.eraseEnv()
}
}
}
def uploadResults(){
stage('Upload tests results'){
def thisBuildUrl = "${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/"
def testPlanName = "${TESTRAIL_MILESTONE} Integration-${new Date().format('yyyy-MM-dd')}"
qaCommon.uploadResultsTestRail([
junitXml: "${WORKSPACE}/nosetests.xml",
testPlanName: testPlanName,
testSuiteName: "${TESTRAIL_TEST_SUITE}",
testrailMilestone: "${TESTRAIL_MILESTONE}",
jobURL: thisBuildUrl,
])
}
}
def runSlavesLabels = params.SLAVE_LABELS ?: 'tcp-qa-slaves'
def runTimeout = params.TEST_TIMEOUT ?: 240
timeout(time: 12, unit: 'HOURS') {
node (runSlavesLabels) {
try {
timeout(time: runTimeout.toInteger(), unit: 'MINUTES') {
runTests()
}
}
catch (err) {
echo "Failed: ${err}"
currentBuild.result = 'FAILURE'
}
finally {
if (env.UPLOAD_RESULTS == "true") {
testRunUrl = uploadResults()
currentBuild.description = """
<a href="${testRunUrl}">TestRail report</a>
"""
}
environment.destroyEnv()
archiveArtifacts allowEmptyArchive: true, artifacts: 'nosetests.xml,tests.log,*.ini', excludes: null
junit keepLongStdio: false, testResults: 'nosetests.xml'
}
}
}