Add TCP-QA pipeline
Change-Id: If6f26e72294b9464716033cdda6c5b8c8b1d8514
diff --git a/tcp-qa-pipeline.groovy b/tcp-qa-pipeline.groovy
new file mode 100644
index 0000000..1b178b4
--- /dev/null
+++ b/tcp-qa-pipeline.groovy
@@ -0,0 +1,138 @@
+/*
+ *
+ * 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 = "${env.JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/"
+ def testPlanName = "${env.TESTRAIL_MILESTONE} Integration-${new Date().format('yyyy-MM-dd')}"
+
+ qaCommon.uploadResultsTestRail([
+ junitXml: "${env.WORKSPACE}/nosetests.xml",
+ testPlanName: testPlanName,
+ testSuiteName: "${env.TESTRAIL_TEST_SUITE}",
+ testrailMilestone: "${env.TESTRAIL_MILESTONE}",
+ jobURL: thisBuildUrl,
+ ])
+ }
+}
+
+def runSlavesLabels = params.SLAVE_LABELS ?: 'tcp-qa-slaves'
+def runTimeout = params.TEST_TIMEOUT ?: 240
+
+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'
+ }
+}